提问者:小点点

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


我们目前正在将我们的JEE应用程序迁移到WebSphere Liberty。它已经在WebSphere 8.5 FullProfile和其他一些应用程序服务器中运行良好。我们在Hibernate中使用了多租户功能。租户使用llveCurrentTenantIdfier()方法解析。这是在创建EntityManager时调用的。我们在无状态Bean中使用容器管理的EntityManager。但是在WebSphere中,无状态bean是从池中返回的。如果用户切换租户,容器将返回具有相同EntityManager(--

我已经尝试过自己重新创建EntityManager,但如果我这样做,我会得到一个应用程序管理的EntityManger(不是容器管理的),但这不是我想要的。我还尝试了Liberty的server. xml中的jpa设置entityManagerPool容量,这听起来很有希望,但没有任何效果:

<jpa entityManagerPoolCapacity="1" />

我们如何创建EntityManager:

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

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

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

JPA:2.0

冬眠:4.2.6


共1个答案

匿名用户

在处理配置时,EntityManagerPool容量被证明是正确的设置。但是您需要将其设置为0才能正确禁用缓存/池:

<jpa entityManagerPoolCapacity="0" />