public class SoapMessageProcessor {
private EntityManager em;
private static final Logger logger = Logger.getLogger(SoapMessageProcessor.class);
public SoapMessageProcessor() {
try {
EntityManagerFactory emFactory = Persistence.createEntityManagerFactory("Auditing");
em = emFactory.createEntityManager();
} catch (Exception ex) {
throw new RuntimeException(ex.getMessage());
}
}
当从异步EJB调用中调用此类时,这会泄漏内存吗?
所以我想到了制作EntityManager和EntityManagerFactory的静态类成员。这会解决问题吗?
这里需要一些帮助。当我运行JProfiler时。它说这个区域是热点。特别是createEntityManagerFactory。
我们非常感谢您解决这个问题。
答案 0 :(得分:1)
我认为你不会关闭EMF或EM。
try {
EntityManagerFactory emFactory = Persistence.createEntityManagerFactory("Auditing");
em = emFactory.createEntityManager();
// do whatever you need to do
em.close();
emFactory.close();
} catch (Exception ex) {
throw new RuntimeException(ex.getMessage());
}
您不应该将实体经理留在某个字段中。它是一种“使用一次然后扔掉”的物体。但是,您可以保留EMF参考。
您多久创建一次SoapMessageProcessor
个实例?
您使用的是任何类型的依赖注入框架吗?它会让你的生活变得更加简单。