Java JPA2和EJB3支持多租户

Java JPA2和EJB3支持多租户,java,hibernate,jakarta-ee,jpa,glassfish,Java,Hibernate,Jakarta Ee,Jpa,Glassfish,我正在尝试更改使用JPA2和EJB3来支持多租户的JavaEEWeb应用程序 我想在应用程序请求启动之前设置当前租户id,这样应用程序本身就不必知道它在多租户环境中使用 我尽量不使用特定于供应商的功能来允许自己将应用程序部署到on-prem容器和google AppEngine。也就是说,如果我可以从外部使用特定于供应商的特性,比如servlet过滤器,这将是一个很好的解决方案 我目前使用GlassFish3.1作为容器,Hibernate4.0作为JPA2提供程序 示例代码将不胜感激 谢谢,,

我正在尝试更改使用JPA2和EJB3来支持多租户的JavaEEWeb应用程序

我想在应用程序请求启动之前设置当前租户id,这样应用程序本身就不必知道它在多租户环境中使用

我尽量不使用特定于供应商的功能来允许自己将应用程序部署到on-prem容器和google AppEngine。也就是说,如果我可以从外部使用特定于供应商的特性,比如servlet过滤器,这将是一个很好的解决方案

我目前使用GlassFish3.1作为容器,Hibernate4.0作为JPA2提供程序

示例代码将不胜感激

谢谢,,
Ido.

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

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

有关通过EclipseLink在Glassfish中提供的多租户支持,请参见


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

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

有关通过EclipseLink在Glassfish中提供的多租户支持,请参见


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

我将使用两个数据库进行多租户。这样,维护就更简单了。您可以将一个指示符存储在本地线程中,并在运行时检查它,以决定使用哪种连接。

什么是“多租户”?部署到不同的数据存储?还是将多个租户部署到一个数据存储?显然,“多租户”只是(未发布的)JPA2的一个特性。1@DataNucleus我认为Ido指的是Hibernate对多租户的支持,这种支持已经存在了很长一段时间了。正确的Ido?我的意思是部署一个应用程序和一个数据库供多个不相关的客户使用。每个客户都需要看到应用程序和数据库是他自己的,是他自己的。好的,谢谢澄清。只是你提到GAE,还有Hibernate。。。因此有两种不同类型的数据存储。显然,DataNucleus JPA(GAE JPA使用的)也提供了多租户支持(对于BigTable以及所有其他受支持的数据存储)是的,这是两种不同的数据访问。看起来EclipseLink和Hibernate都实现了多租户支持,但JPA标准落后了。在标准更新之前,我必须使用vedor特定的解决方案。J2EE 7也许。。。谢谢,“多租户”是什么意思?部署到不同的数据存储?还是将多个租户部署到一个数据存储?显然,“多租户”只是(未发布的)JPA2的一个特性。1@DataNucleus我认为Ido指的是Hibernate对多租户的支持,这种支持已经存在了很长一段时间了。正确的Ido?我的意思是部署一个应用程序和一个数据库供多个不相关的客户使用。每个客户都需要看到应用程序和数据库是他自己的,是他自己的。好的,谢谢澄清。只是你提到GAE,还有Hibernate。。。因此有两种不同类型的数据存储。显然,DataNucleus JPA(GAE JPA使用的)也提供了多租户支持(对于BigTable以及所有其他受支持的数据存储)是的,这是两种不同的数据访问。看起来EclipseLink和Hibernate都实现了多租户支持,但JPA标准落后了。在标准更新之前,我必须使用vedor特定的解决方案。J2EE 7也许。。。谢谢,谢谢。我已经阅读并理解了分离数据库、分离模式和鉴别器列的3种策略。我想使用鉴别器,因为它是最具伸缩性的。我同意,似乎我必须使用特定于提供商的方法。因为我使用的是Hibernate,所以我会尝试让它工作,只有当我失败了,我才会去EclipseLink。谢谢,谢谢。我已经阅读并理解了分离数据库、分离模式和鉴别器列的3种策略。我想使用鉴别器,因为它是最具伸缩性的。我同意,似乎我必须使用特定于提供商的方法。因为我使用的是Hibernate,所以我会尝试让它工作,只有当我失败了,我才会去EclipseLink。非常感谢。