Как использовать Eclipselink @Multitenant в JSF / EJB? - PullRequest
1 голос
/ 30 сентября 2011

Поддержка @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);
    }
}

1 Ответ

0 голосов
/ 17 октября 2011

Использование событий нормально.

Вы также можете внедрить EntityManager и установить свойство или внедрить EntityManagerFactory и использовать joinTransaction () для присоединения к активной транзакции JTA.

...