2012-03-15 193 views
3

我正在四處尋找我的Web應用程序的多租戶解決方案。 我想用獨立的架構模型來實現應用程序。我想每個會話都有一個數據源。爲了做到這一點,我把數據源和entitymanger放在會話範圍內,但那不起作用。我想在用戶輸入用戶名和密碼以及tenantId時加載data-access-context.xml文件(包括數據源和其他存儲庫bean)文件。我想知道這是否是一個好的解決方案?多彈簧與彈簧JPA

回答

2

多租戶是一個棘手的主題,它必須在JPA提供商一方處理,以便從客戶端代碼的角度來看沒有或幾乎沒有變化。 支持多租戶(請參閱:EclipseLink/Development/Indigo/Multi-Tenancy),剛剛添加它。

另一種方法是使用AbstractRoutingDataSource,參見:Multi tenancy in Hibernate

使用會話範圍風險太大(同時你最終會得到數千個數據庫連接,每個會話/用戶都會得到很少的連接,最後EntityManager和底層數據庫連接是不可序列化的,所以你不能遷移你的會話並擴展你的應用程序正常。

+2

當您使用SessionFactory(即Hibernate native)而不是JPA(@ PersistenceContext/EntityManager)時,Hibernate僅支持多租戶。 – pap 2012-03-15 11:07:30

+0

嗨,謝謝你的回答。這真的很有幫助。而你說得對。它不支持JPA。但我選擇使用'AbstractRoutingDataSource'。但問題是現在數據源和實體管理器bean在啓動時初始化。有沒有辦法在春季配置這種方式,它將在用戶認證後初始化? – mettok 2012-03-15 12:59:39

+0

@ user1057347:請打開一個新問題,這太複雜了,不能在評論中解釋(並且在將來不會有足夠的支持)。還請發佈一個新問題的鏈接,以便我可以跟進。 – 2012-03-15 13:02:39

0

我曾與一些多租戶系統的工作。這裏的挑戰是如何保持

  1. 開放式架構和
  2. 提供與您的業務發展的解決方案。

讓我們先看看第二個挑戰。多租戶系統有發展的趨勢,您需要支持多個擁有不同容量的租戶可訪問同一數據(記錄)的用例(例如https://bugs.eclipse.org/bugs/show_bug.cgi?id=355458)。所以,系統最終需要訪問控制列表。

爲了保持開放式體系結構,您可以編碼爲標準(如JPA)。編碼到EclipseLink或Hibernate讓我感到不舒服。

Spring Security ACL爲這些挑戰提供了非常靈活的社區支持解決方案。試試看。我對它的表現感到滿意。但是,我必須告誡你,我花了一些時間來探索它。