2014-02-25 73 views
0

我必須實現具有下列要求多租戶使用Spring 3.2.X和EclipseLink/Hibernate?

多租戶Web應用程序
  1. 單桌多租戶:所有租戶對特定實體的數據將被存儲在一個單一的表TENANT_DISCRIMINATOR(TENANT_ID)爲每列表。

  2. 一些表格,例如Master Countries,Masters ...,我希望它對於所有租戶來說都是常見的,即在這些表格中,不會有像TENANT_DISCRIMINATOR(TENANT_ID)這樣的列,但我仍然想要無縫地訪問它。

  3. 由於要求或維護原因,我想通過一些管理配置和我的網絡應用程序將已經屬於Single Table Multi-Tenancy一部分的Tenant的數據移動到單獨的數據庫模式,反之亦然,在下一個請求中應該能夠與該更新的模式/數據源進行通信。

現在對於所有租戶的單個表。我已經使用

org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean 

,並插入一個

org.springframework.jdbc.datasource.DriverManagerDataSource 

成。我想在這裏有靈活性,可以讀取一些配置,並幫助我確定同一個表/數據源或一些不同的數據源。

前兩點,我可以用EclipseLink框架來實現。

我的問題是

  1. 是否有可能使用的EclipseLink實現3點?

  2. hibernate 3+或4+能幫我實現這些嗎?

任何幫助將不勝感激。

+0

您需要勾勒#3更詳細,如移動數據到另一個表,並具有用戶無縫地訪問它是一個艱難的命題。您對目前訪問舊錶格/應用程序的用戶有何期待? – Chris

回答

1

Eclipselink確實有一個遠程命令,強制在運行工廠刷新元數據,以便獲取的下一個EntityManager將使用新的元數據。這可能允許您使用定製工具和/或元數據存儲庫通過管理客戶端對租戶結構進行更改,然後將這些更改推送到正在運行的應用程序。見 http://wiki.eclipse.org/EclipseLink/DesignDocs/368490https://wiki.eclipse.org/EclipseLink/Examples/JPA/CacheCoordination

+0

感謝Chris,如果已經運行的租戶告訴我們更改任何信息(如新數據源或新數據庫),我想要做的是比我想在不重新啓動我的多租戶Web應用程序的情況下執行此管理應用程序。有沒有可能使用EclipseLink? – Ketan

+0

克里斯,如果你可以解釋一些例子,這將是很好的,如果可能的話 – Ketan

+0

你是否瀏覽過文檔並有具體問題? refreshMetadata和RCM命令允許您傳播新屬性以運行EntityManagerFactories,以便從它們獲得的下一個EM將使用新設置,而舊的將保持不變。在https://wiki.eclipse上有一個演示。org/EclipseLink/Examples/MySports,但需要對其進行調整以獲取所需內容。 – Chris