Поддержка @Multitenant в Eclipselink 2.3 выглядит действительно интересной, но мне сложно понять, как использовать ее в JSF или EJB, который внедряет EntityManager с @PersistenceContext.В документах EclipseLink достаточно ясно, что внедрение @PersistenceContext в этом случае не работает, но вы можете вместо этого внедрить EntityManagerFactory через @PersistenceUunit.
Тем не менее, я не вижу, как управлять жизненным циклом EntityManager, который вы можете создать с помощью введенного EntityManagerFactory.createEntityManager () - в частности, когда закрывать получившийся EntityManager и как участвовать в транзакциях..
Кто-нибудь заставил это работать?Или я упускаю что-то очевидное?
См. Также: http://wiki.eclipse.org/EclipseLink/Examples/JPA/Multitenant
ОБНОВЛЕНИЕ
У меня был некоторый успех с внедрением @PersistenceContext (EntityManager) изатем передача параметров в EclipseLink через слушатель сеанса.Я не уверен на 100%, что это правильный ответ, и был бы признателен за подтверждение того, что это не создает неочевидное состояние гонки или проблему безопасности потока.
Например:
public static class TenantListener extends SessionEventAdapter {
@Override
public void postAcquireClientSession(SessionEvent event) {
long tenantId = **business logic**;
event.getSession().setProperty("eclipselink.tenant-id", tenantId);
}
}