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

时间:2018-09-07 11:53:44

标签: jpa eclipselink multi-tenant jta

我们的应用程序项目是将JPA与EclipseLink和JTA结合使用的OSGI捆绑软件,并且需要单表多租户,其中租户ID来自REST请求。根据我的阅读和尝试,似乎几乎是不可能的:

  1. 由于租户ID根据请求而变化,因此每个具有新租户ID的请求都需要手动创建具有适当属性的新PersistenceContextEntityManager)。
  2. 但是根据http://tomee.apache.org/jpa-concepts.html,使用JTA时,无法手动创建持久性上下文({@PersistenceUnit无法注入,Persistence.createEntityManagerFactory不起作用)。

我想念什么吗?还是这实际上是不可能的?

1 个答案:

答案 0 :(得分:0)

您可以在实体管理器中为请求设置多租户/区分属性。但是,对于多线程和延迟初始化来说,这是不安全的。

我尝试了支持单表多租户的CMobileCom JPA。对于每个租户,应使用一个新的EntityManager。也就是说,不应共享EntityManager来访问多个租户的数据。 EclipseLink也是如此。

免责声明:我是CMobileCom JPA的开发人员,这是一种适用于Java和Android的轻量级JPA实现。