2012-02-20 70 views
1

幾個月後,我將不得不水平分割我的應用程序。我的應用程序中有某些服務需要大量的CPU和內存,爲了擴展性,我打算把它分成多個JVM。水平分割,Java EE和JNDI

我有一個EAR封裝了我需要分區的服務。當我這樣做時,服務的客戶端(如UI)需要能夠解決特定的服務實例。例如,假設我有一個名爲Account的服務,但實際上有三個該服務在三個不同的JVM中運行(但都在同一個Java EE域中)。假設我有一個可以從帳戶ID映射到特定虛擬機的服務定位器,我將如何訪問可以爲該特定帳戶提供服務的EJB?

我可以看到一個潛在的解決方案是採取JNDI名的應用程序容器給人以EJB的單獨的應用程序的優勢。如果我三個不同的時期有不同的名稱部署模塊,我可以做JNDI查找來獲得對他們說:

的java:全球/ AccountServer1/AccountFacade

的java:全球/ AccountServer2/AccountFacade

的java:全球/ AccountServer3/AccountFacade

爲了這個工作,我永遠不能使用依賴注入來訪問AccountFacade,我將不得不使用AccountLocator EJB來獲取AccountID並將其映射到其中一個Account應用程序。如果我想變得棘手,我大概可以實現一個沒有查找透明假設參數的方法可以識別使用哪個服務器「本地」帳戶門面...

是這種做法是否可行?有更好的選擇嗎?

回答

0

你可以看看Hibernate Shards作爲你的架構藍圖或直接使用框架。簡而言之,它們隱藏分片後面的Session接口(JPA情況下爲EntityManager)。