在muliple类threadsafe中,EntityManager @Inject [ed]如下所示?
@PersistenceContext(unitName="blah")
private EntityManager em;
Run Code Online (Sandbox Code Playgroud)
我正在维护一些运行良好的旧JEE代码但是正在使用一些静态辅助类,其中实体管理器从调用EJB传递方法,如下所示:
public class StaticHelper {
public static void helpingOut(EntityManager entityManager, String value) {
// i.e. insert value
}
}
Run Code Online (Sandbox Code Playgroud)
由于这似乎不适合JEE并且对单元测试不好,我已经将这些助手转换为@StatelessEJB,如下所示:
@Stateless
public class StatelessHelper {
@PersistenceContext(unitName="SuperUnit")
private EntityManager entityManager;
public void helpingOut(String value) {
// i.e. insert value
}
}
Run Code Online (Sandbox Code Playgroud)
就像我可以在使用CDI-Unit的调用EJB中注入一个模拟帮助器.
现在,根据负载,由这是不是在所有的问题我想说的容器中创建无状态帮手1-3实例,但无论如何,我想过一个@Singleton使用两种@ConcurrencyManagement(ConcurrencyManagementType.BEAN)或@Lock(LockType.READ)使其多线程-不过这并未"似乎是一个好主意,因为EntityManager它不是线程安全的.或者这里解释的仍然适用?
"...容器序列化对每个有状态和无状态会话bean实例的调用.大多数容器将支持并发执行的会话bean的许多实例;但是,每个实例只能看到序列化的方法调用序列.因此,有状态或无状态会话bean不必编码为可重入..."