java - @PersistenceContext 如何保证线程安全?

标签 java multithreading dependency-injection ejb-3.0

根据许多示例,可以像这样将 EntityManager 注入(inject) @Stateless 或 @Singleton EJB:

@Stateless // or @Singleton
public class MyRepository {
   @PersistenceContext
   private EntityManager em;
   ...
}

EJB 3.1 规范指出依赖注入(inject)仅在构造时执行,因此 MyRepository 的所有调用者都将使用相同的 EntityManager 实例。 EJB 容器如何确保使用正确的 EntityManager 实例?

最佳答案

我的理解是,@Stateless bean 永远不会被两个客户端同时使用;如果需要为多个客户端提供服务,容器将简单地创建同一 bean 的更多实例。

至于@Singleton bean,spec说默认情况下他们使用容器管理并发,其中容器使用方法 Lock s 并且可以在单例繁忙时以超时异常拒绝客户端。

编辑:此外,@PersistentContext 类型默认为事务范围(规范中为 16.11.1.1),因此 EntityManager 管理的所有实体在最后分离每笔交易。

关于java - @PersistenceContext 如何保证线程安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2015184/

相关文章:

C++:依赖注入(inject)、循环依赖和回调

java - 如何检测不同的json对象?

java - Spring MVC : Threads not executing in production

java - 您能否暂停 Java 应用程序并从该应用程序中获取其线程的快照?

java - 究竟什么是现场注入(inject)以及如何避免它?

asp.net-mvc-3 - 工作单元和存储库模式是一起使用还是两个解决方案?

Java 音频输入不一致

java - 我可以使用 UrlEncodedFormEntity 为多个部分上传图像和文本吗?

java - 动态检查 onClickListener 中的复选框

c++ - 如何通过阻塞调用来控制线程的执行