使用JPA 2和EJB 3的多租户支持

时间:2012-05-23 09:24:48

标签: java hibernate java-ee jpa glassfish

我正在尝试更改使用JPA2和EJB3支持多租户的Java EE Web应用程序。

我想在我的应用程序请求开始之前设置当前的租户ID,因此应用程序本身不必知道它在多租户环境中使用。

我尝试不使用供应商特定功能,允许自己将应用程序部署到本地容器和Google AppEngine。话虽如此,如果我可以使用来自外部位置的供应商特定功能,例如servlet过滤器,这将是很好的解决方案。

我目前使用Glassfish 3.1作为容器,Hibernate 4.0作为JPA2提供程序使用。

非常感谢示例代码。

谢谢你, IDO。

2 个答案:

答案 0 :(得分:1)

JPA没有定义任何特定的多租户支持。因此,如果不使用提供程序特定功能,可能很难实现。

您可以为每个租户使用相同的表,但使用不同的架构。然后,您可以拥有一个具有相同映射的不同持久性单元,但在另一个orm.xml文件中设置不同的默认架构。

对于通过EclipseLink在Glassfish中的多租户支持,请参阅

http://wiki.eclipse.org/EclipseLink/UserGuide/JPA/Advanced_JPA_Development/Single-Table_Multi-Tenancy

答案 1 :(得分:0)

我会使用两个数据库进行多租户。这样,维护更简单。您可以在线程本地存储指示符,并在运行时检查它以确定要使用的连接。