0
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调用被调用时,会泄漏内存吗?CreateEntityManagerFactory的大小正在增加。它泄漏内存吗?
所以我想到了制作EntityManager和EntityManagerFactory静态类成员。这会解决问题吗?
这里需要一些帮助。当我运行JProfiler时。它说这个区域是一个热点。尤其是createEntityManagerFactory。
任何帮助解决此泄漏表示赞赏。
SOAPMessageProcessor被调用为来自Jboss扩展的异步调用。所以当用户提出请求时。为了记录目的,SOAP消息处理器正在被调用。 Jboss扩展创建并发线程来访问消息处理器。 – 2010-09-10 16:32:34
@Vanchinathan:好的,听起来你只有一个'SoapMessageProcessor'实例。在这种情况下,在类的'create()'方法中创建EMF,并在'destroy()'方法中'关闭()'EMF。在您的日志记录方法中创建(并且不要忘记关闭!)EM。创建和关闭一个EM是一个便宜的操作,所以你应该没问题。 – 2010-09-10 16:57:44
嗨,我宣布EMF为静态并在静态块中初始化它。所以只要班级生活就可以使用。出于某种原因,代码没有生命周期方法。所以我遵循了这个方法。 – 2010-09-10 20:39:18