我注意到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);
}
我看到使用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
感谢您的反馈。