【问题标题】:Multi-Tenancy with Spring 3.2.X and EclipseLink/Hibernate?Spring 3.2.X 和 EclipseLink/Hibernate 的多租户?
【发布时间】:2014-02-25 07:31:24
【问题描述】:

我必须实现具有以下要求的多租户 Web 应用程序

  1. 单表多租户:特定实体的所有租户数据将存储在单个表中,其中 TENANT_DISCRIMINATOR (TENANT_ID) 作为每个表中的一列。

  2. 某些表,例如 Master Country, Masters...,我希望它对所有租户都通用,即在这些表中,不会有像 TENANT_DISCRIMINATOR (TENANT_ID) 这样的列,但我仍然想访问它无缝衔接。

  3. 根据请求或维护原因,我想通过某些管理员配置和我的 Web 应用程序将已经是单表多租户的一部分的租户的数据移动到单独的数据库架构,反之亦然,在下一次请求时应该能够与更新的架构/数据源进行通信。

现在为所有租户提供一张桌子。我用过

org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean 

并插入一个

org.springframework.jdbc.datasource.DriverManagerDataSource

进入那个。我想在这里有灵活性,可以读取一些配置并帮助我决定相同的表/数据源或一些不同的数据源。

前两点,我可以用 EclipseLink 框架来实现。

我的问题是

  1. 是否可以使用 EclipseLink 实现第 3 点?

  2. hibernate 3+ 或 4+ 可以帮我实现这些吗?

任何帮助将不胜感激。

【问题讨论】:

  • 您需要更详细地概述#3,因为将数据移动到另一个表并让用户无缝访问它是一个困难的提议。您预计对当前访问旧表/应用程序的用户有何影响?

标签: hibernate eclipselink multi-tenant


【解决方案1】:

Eclipselink 确实有一个远程命令,它强制在运行的工厂上刷新元数据,以便获得的下一个 EntityManager 将使用新的元数据。这可能允许您使用定制器和/或元数据存储库通过管理客户端对租户结构进行更改,然后将这些更改推送到正在运行的应用程序。看 http://wiki.eclipse.org/EclipseLink/DesignDocs/368490https://wiki.eclipse.org/EclipseLink/Examples/JPA/CacheCoordination

【讨论】:

  • 谢谢 Chris,如果已经在运行的租户告诉我们更改任何信息,例如新数据源或新数据库,我想做什么,而不是在不重新启动我的多租户 Web 的情况下执行一些管理应用程序应用程序。是否可以使用 EclipseLink?
  • 克里斯,如果可能的话,最好用一些例子来解释一下
  • 您是否浏览过文档并有具体问题? refreshMetadata 和 RCM 命令允许您向正在运行的 EntityManagerFactories 传播新属性,以便从它们获得的下一个 EM 将使用新设置,而旧的将继续保持不变。 wiki.eclipse.org/EclipseLink/Examples/MySports 有一个演示,但需要对其进行调整才能满足您的需求。
猜你喜欢
  • 1970-01-01
  • 2014-02-07
  • 2014-12-22
  • 1970-01-01
  • 2021-06-07
  • 2019-06-23
  • 2014-02-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多