Отключить кэширование / пул EntityManager в WebSphere Liberty - PullRequest
0 голосов
/ 26 мая 2019

В настоящее время мы переносим наше приложение 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

1 Ответ

0 голосов
/ 20 июня 2019

Во время игры с конфигурацией, EntityManagerPoolCapacity оказалось правильным выбором для этого. Но вам нужно установить его на 0, чтобы правильно отключить кэширование / пул:

<jpa entityManagerPoolCapacity="0" />
...