我正在寻找一种针对我的Web应用程序的 Multi-Tenancy 解决方案。
我想用单独的模式模型实现一个应用程序。我正在考虑每个会话有一个数据源。为了做到这一点,我将数据源和entitymanger放在会话范围内,但是那是行不通的。当用户输入用户名,密码和tenantId时,我正在考虑加载data-access-context.xml(包括数据源和其他存储库bean)文件。我想知道这是否是一个好的解决方案?
最佳答案
Multi-Tenancy 是一个棘手的主题,必须在JPA提供程序端进行处理,以便从客户端代码的角度来看,几乎没有任何变化。 eclipselink支持 Multi-Tenancy (请参阅:EclipseLink/Development/Indigo/Multi-Tenancy),hibernate最近才添加了它。
另一种方法是使用AbstractRoutingDataSource
,请参阅:Multi tenancy in Hibernate。
使用session-scope的风险太大(同样,您将获得数千个数据库连接,每个会话/用户很少。最后EntityManager
和基础数据库连接不可序列化,因此您无法迁移会话并适当扩展应用程序。