使用REQUIRES_NEW时,JPA Eclipselink EntityManager保留在内存中

时间:2017-04-27 13:33:45

标签: jpa eclipselink glassfish-3

我注意到Eclipselink版本2.5.2中存在内存泄漏。 当我使用TransactionAttributeType.REQUIRES_NEW时,要在自己的事务中运行子任务,Eclipselink的一些实例正在内存中累积。

例如,从其他无状态bean调用此方法:

@Stateless
@TransactionManagement(TransactionManagementType.CONTAINER)
...
@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
public void removeFromQueue(Long id) {
    DelayedUpdateQueue item = em.getReference(DelayedUpdateQueue.class, id);
    em.remove(item);
}

Netbeans Profiler

我看到使用REQUIRES_NEW必须创建另一个EntityManager实例,并打开第二个连接到PostgreSQL数据库。但为什么它永远不会被清除?

如果我在不使用REQUIRES_NEW的情况下调用该方法,则EntityManagerImpl的数量将保持非常低。 < 3

在Profiler中单击垃圾收集也不会删除它们。

更新

使用较新版本的jdbc驱动程序并将数据源从XADataSource(项目中不需要)切换到ConnectionPoolDatasource后,问题就消失了。

Old driver version: postgresql-9.4-1201-jdbc4.jar
New driver version: postgresql-9.4.1212.jre7.jar

感谢您的反馈。

0 个答案:

没有答案