【发布时间】:2011-10-27 03:24:06
【问题描述】:
给定:简单的 JSF webapp(没有 Seam),让 JSF bean 调用几个 EJB,这些 EJB 依次加载和持久化 JPA 实体。我想要的是对 ejb 使用 @Singleton 注释并注入 EntityManager 而不是 EntityManagerFactory:
@Singleton
public class MyEJB {
@PersistenceContext(unitName = PERSISTENCE_UNIT_NAME)
protected EntityManager em; // not EntityManagerFactory
}
Spec 说@Singleton 是线程安全的,支持并发和事务属性(来自我的观点)使得从 JSF bean 调用变得安全。我还期望性能优势,因为 EntityManager 不会为每个调用重新创建,并且它具有内部缓存能力。
我主要关心的是在我有多个单例的情况下对 JPA 实体的创建/更新操作,因此,长期存在的 EntityManager 数量相同。
- 如果一个单例更新 JPA 实例会发生什么以及这些 更改填充到其他单例?
- 由于我无法关闭实体管理器,是否需要刷新它 每个实体更新?
- 如果这几个单例共享同一个实体会更好吗 经理?
- 我只看到了几个这样的设计例子。为什么?有没有严重的 缺点?
非常感谢!
【问题讨论】:
标签: jsf jpa jsf-2 ejb-3.0 ejb-3.1