Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
EclipseLink(JPA)基于表格的多租户与JTA,如何?_Jpa_Eclipselink_Multi Tenant_Jta - Fatal编程技术网

EclipseLink(JPA)基于表格的多租户与JTA,如何?

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不能工作),

我们的应用程序项目是一个OSGI捆绑包,使用JPA和EclipseLink和JTA,需要单表多租户,其中租户ID来自REST请求。从我的阅读和尝试来看,这几乎是不可能的:

  • 由于租户ID会根据请求而变化,因此每个具有新租户ID的请求都需要手动创建一个具有相应属性的新的
    PersistenceContext
    EntityManager

  • 但是当使用JTA时,不能手动创建持久性上下文(
    @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
    )。