我正在使用一個vanilla JBossAS 6服務器和幾個項目來測試羣集JBoss環境的功能。我遇到的問題是,如果我將EJB引用從節點中的一個EJB(另一種類型的EJB)轉移到另一個節點中相同類型的實例,則在調用方法時拋出異常,指出 long_alphanumeric_key指定bean的密鑰未在緩存中註冊(InfinispanStatefulCache)。Singleton vs羣集中狀態遠程EJB引用
問題是,當我需要傳輸的對象上使用Singleton註釋而不是Stateful註釋時,傳輸的對象完美地工作,併成功地在共享EJB創建的服務器上調用共享EJB的方法。問題在於這種情況與HA-Singleton具有相同的缺陷。所有傳輸的引用都是通過HA-JNDI樹上的查找獲得的。
什麼我想要實現的一些見解:
我現在需要的是共享節點之間的有狀態EJB的單個實例,如HA-辛格爾頓。不使用HA-Singleton的原因是這種單例的狀態僅在集羣的主節點上進行,因此如果節點關閉或失敗,實例的狀態將丟失。
使用Stateful bean將允許我維護集羣上的狀態,從而防止節點上發生故障時的狀態丟失。我還沒有完全理解JBoss和Infinispan緩存如何工作,但據我所知,@Clustered註釋的有狀態bean的狀態會自動複製到羣集中。
我們已經警告過在當前JBoss版本中使用Singletons和HA-Singletons的問題,因此任何形式的文檔或模式都可以幫助解決這個設計變更。
此外,我將不勝感激任何文檔,可以提供我深入瞭解Infinispan緩存和JBoss羣集如何工作。到目前爲止,我一直在閱讀的內容與使用JBossCache而不是Infinispan的舊JBoss版本混合使用。
感謝IND提前,
德國