В настоящее время мы переносим наше приложение JEE на WebSphere Liberty.Он уже работает в полном профиле WebSphere 8.5 и некоторых других серверах приложений.Мы используем функцию многопользовательского режима в Hibernate.Арендатор разрешается с использованием метода resolveCurrentTenantIdentifier()
.Это вызывается при создании EntityManager
.Мы используем управляемый контейнером EntityManager
в компоненте без сохранения состояния.Но в WebSphere компонент без сохранения состояния возвращается из пула.Если пользователь переключает арендатора, контейнер возвращает тот же компонент без сохранения состояния с тем же EntityManager
(-> со старым арендатором).В полном профиле WebSphere EntityManger
воссоздается контейнером, но не в Liberty.Кто-нибудь имеет представление о том, как избежать кэширования / пула EntityManager
?
Я уже пытался воссоздать EntityManager
сам, но если я это сделаю, я получаю обратно управляемый приложением EntityManger
(не управляемый контейнером), но это не то, что я хочу.Я также попробовал установить параметр jpa entityManagerPoolCapacity
в Liberty's server.xml
, который звучит многообещающе, но не имеет никакого эффекта:
<jpa entityManagerPoolCapacity="1" />
Как мы создаем EntityManager:
@PersistenceContext(unitName = "PU")
private EntityManager entityManager;
Как япопытался вручную воссоздать EntityManager:
EntityManagerFactory entityManagerFactory = entityManager.getEntityManagerFactory();
entityManager = entityManagerFactory.createEntityManager();
JPA: 2,0
Hibernate: 4.2,6