2012-08-08 70 views
0

我有一種情況,在我的web層中,我執行遠程EJB查找並緩存初始上下文。現在遠程EJB部署在WAS集羣中。所以如果遠程ejb部署在服務器1,服務器2和服務器3之間,並讓我們第一次說,指向服務器1的初始上下文被緩存。緩存初始上下文時ejb的遠程查找失敗

此server1發生故障但其他服務器仍然運行。但是由於初始上下文被緩存,ejb調用失敗。

現在簡單的解決方案是刪除緩存並每次都進行全新的查找。但是這會降低性能。有沒有辦法讓這裏兩全其美?可靠性和性能?

+0

您有獨立的Web和EJB服務器。 Web服務器如何創建InitialContext()?如果您針對本地服務器進行引導並查找集羣上下文,則應在所有集羣成員中WLM處理所產生的上下文。 – 2012-08-08 21:48:42

+0

在創建InitialContext時,我們提供provider_url,provider_url是以逗號分隔的在集羣中部署的主機名字符串。你如何創建一個「集羣上下文」?還有什麼是WLM? – Victor 2012-08-08 22:17:00

+0

如果您已經指定了逗號分隔的主機/帖子列表,那麼我認爲您的InitialContext應該已經失效。否則,我認爲你可以執行'new InitialContext()。lookup(「cell/clusters/xyz」)',我認爲這與指定集羣中所有服務器的主機/端口是一樣的。 WLM是工作負載管理,即執行路由/故障轉移的技術。 – 2012-08-09 12:26:31

回答

0

corbaloc:供應商URL中的引導程序服務器列表僅在構建InitialContext時使用。在構建上下文的過程中,客戶端獲取可以回答該上下文查找的服務器列表,並且只有該列表隨後纔會使用。如果提供者URL中的引導服務器是集羣成員,那麼只要至少有一個集羣成員正在運行,InitialContext就會繼續工作。因此,InitialContext可以安全地緩存。

請注意,如果提供程序URL中的引導程序服務器不是集羣成員,而是節點代理程序,則情況會有所不同。在這種情況下,InitialContext表示特定於單個節點代理程序的上下文,當該節點代理程序關閉時,查找將失敗。即使在提供商URL中指定了多個節點代理,情況也是如此:在構建InitialContext期間選擇了其中一個節點代理,並且選擇不會在之後改變。

+0

集羣成員和節點代理不一樣?當provider_url是以逗號分隔的主機名和端口號列表時,如何判斷它們是集羣成員還是節點代理? – Victor 2012-08-09 20:21:22

+0

通過識別在端口上偵聽的進程。您可以在系統級別執行此操作(例如,使用'netstat -ltnp')或通過檢查WebSphere管理控制檯中的端口。 – 2012-08-10 16:39:29

相關問題