
一种选择是不是创建一个新
EntityManagerFactory的
EMFactory(这是在请求范围内),您可以创建为一个单独的工厂
EntityManagerFactory,然后就注射
EntityManagerFactory到
EMFactory。
public class EMFFactory implements Factory<EntityManagerFactory> { private final EntityManagerFactory emf; public EMFFactory (){ emf = Persistence.createEntityManagerFactory(persistenceUnit); } public EntityManagerFactory provide() { return emf; } ...}public class EMFactory implements Factory<EntityManager> { private final EntityManager em; @Inject public EMFactory (EntityManagerFactory emf){ em = emf.createEntityManager(); } public EntityManager provide() { return em; } ...}还没有测试过确切的实现,但是应该看起来像这样。我以前使用过这种模式。
register(new AbstractBinder() { @Override public void configure() { bindFactory(EMFFactory.class).to(EntityManagerFactory.class).in(Singleton.class); bindFactory(EMFactory.class).to(EntityManager.class).in(RequestScoped.class); }});更新
关于上面的示例,需要注意的一件事是它不会清理资源,即
EntityManager应该关闭资源。它不会自行关闭。有一个
dispose在方法
Factory类,我们需要重写,但是从我的经验,这是从来没有通过所谓的球衣。
我们可以做的就是将
EntityManager[
CloseableService] 添加到[ ] [1]
public class EMFactory implements Factory<EntityManager> { private final EntityManagerFactory emf; private final CloseableService closeService; @Inject public EMFactory (EntityManagerFactory emf, CloseableService closeService){ this.emf = emf; this.closeService = closeService; } public EntityManager provide() { final EntityManager em = emf.createEntityManager(); this.closeService.add(new Closeable(){ @Override public void close() { em.close(); } }); return em; } ...}这样,
EntityManager可以确保在请求结束时将其关闭。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)