EclipseLink(JPA)基于表格的多租户与JTA,如何?
我们的应用程序项目是一个OSGI捆绑包,使用JPA和EclipseLink和JTA,需要单表多租户,其中租户ID来自REST请求。从我的阅读和尝试来看,这几乎是不可能的:EclipseLink(JPA)基于表格的多租户与JTA,如何?,jpa,eclipselink,multi-tenant,jta,Jpa,Eclipselink,Multi Tenant,Jta,我们的应用程序项目是一个OSGI捆绑包,使用JPA和EclipseLink和JTA,需要单表多租户,其中租户ID来自REST请求。从我的阅读和尝试来看,这几乎是不可能的: 由于租户ID会根据请求而变化,因此每个具有新租户ID的请求都需要手动创建一个具有相应属性的新的PersistenceContext(EntityManager) 但是当使用JTA时,不能手动创建持久性上下文(@PersistenceUnit不能被注入,并且持久性。createEntityManagerFactory不能工作),
PersistenceContext
(EntityManager
)@PersistenceUnit
不能被注入,并且持久性。createEntityManagerFactory
不能工作),根据我错过什么了吗?或者这实际上是不可能做到的?您可以在实体管理器中为请求设置多租户/鉴别器属性。但对于多线程和延迟初始化来说,这是不安全的 我尝试了支持单表多租户的。对于每个租户,应使用新的EntityManager。也就是说,不应共享EntityManager来访问多个租户的数据。日食也是如此
免责声明:我是针对Java和Android的轻量级JPA实现的开发人员。您声明的文档是特定于特定用户的-大多数其他容器允许您在JTA环境中获取EntityManager Factory,EntityManager参与JTA事务。TomEE是否禁止使用事务类型为“JTA”的@PersistenceUnit?我不确定它是否是EE,我们使用ServiceMix作为平台(Apache Karaf OSGI),使用EclipseLink作为持久性的JPA实现。Blueprint是一个将所有这些联系在一起的依赖关系管理器。因此,请尝试添加一个@PersistenceUnit来获取EMF,并自己从中获取EntityManager。在事务方法中的某个地方调用em.flush,如果异常没有正确连接到JTA中,则应该立即抛出异常。您可能必须调用em.jointransation。
@PersistenceUnit
使用JTA时,不会注入带注释的字段(始终为null
)。