CreateEntityManagerFactory увеличивается в размерах. Это утечка памяти? - PullRequest
0 голосов
/ 10 сентября 2010
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.

Любая помощь в устранении этой утечки приветствуется.

1 Ответ

1 голос
/ 10 сентября 2010

Я не думаю, что вы закрываете ни 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 экземпляров?

Используете ли вы какой-либо каркас внедрения зависимости?Это сделает вашу жизнь намного проще.

...