在WebSphere Liberty中禁用EntityManager的缓存/池化

时间:2019-05-26 19:19:13

标签: hibernate jpa websphere-liberty

我们当前将JEE应用程序迁移到WebSphere Liberty。它已经在WebSphere 8.5 Full Profile和其他一些应用服务器中运行良好。我们正在使用Hibernate中的多租户功能。使用resolveCurrentTenantIdentifier()方法解决租户。创建EntityManager时将调用此方法。我们在无状态Bean中使用容器管理的EntityManager。但是在WebSphere中,无状态Bean是从池中返回的。如果用户切换承租人,则容器将返回具有相同EntityManager的相同无状态Bean(对于旧承租人,将返回->)。在WebSphere完整概要文件中,EntityManger由容器重新创建,但在Liberty中不重新创建。有没有人知道如何避免对EntityManager进行缓存/池化?

我已经尝试自己重新创建EntityManager,但是如果这样做,我会找回应用程序管理的EntityManger(而不是容器管理的),但这不是我想要的。 我还尝试了Liberty entityManagerPoolCapacity中的jpa设置server.xml(将其设置为0或1),这听起来很有希望,但没有任何效果:

<jpa entityManagerPoolCapacity="0" />

我们如何创建EntityManager:

@PersistenceContext(unitName = "PU")
private EntityManager entityManager;

我如何尝试手动重新创建EntityManager:

EntityManagerFactory entityManagerFactory = entityManager.getEntityManagerFactory();
entityManager = entityManagerFactory.createEntityManager();

JPA:2.0

休眠:4.2.6

1 个答案:

答案 0 :(得分:0)

在进行配置时,EntityManagerPoolCapacity才是正确的设置。但是您需要将其设置为0才能正确禁用缓存/池化:

<jpa entityManagerPoolCapacity="0" />