【发布时间】:2011-09-30 01:58:58
【问题描述】:
Eclipselink 2.3 中的@Multitenant 支持看起来非常有趣,但我很难理解如何在使用@PersistenceContext 注入EntityManager 的JSF 或EJB 中使用它。 EclipseLink 文档非常清楚 @PersistenceContext 注入在这种情况下不起作用,但您可以通过 @PersistenceUunit 注入 EntityManagerFactory 。
不过,我还没有看到如何管理您可能通过注入的 EntityManagerFactory.createEntityManager() 创建的 EntityManager 的生命周期 - 特别是何时关闭生成的 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);
}
}
【问题讨论】:
标签: java jpa eclipselink