2011-03-13 209 views
2

我想在集羣環境中設置Jboss 6,並使用它來託管集羣狀態單例EJB。Jboss 6集羣Singleton集羣

到目前爲止,我們成功地在羣集中安裝了一個Singleton EJB,在這裏我們的應用程序的不同入口點(通過部署在每個節點上的網站)指向一個承載EJB的單個環境(從而維護靜態變量的狀態)。我們實現了這個使用以下配置:

Bean的接口:

@Remote 
public interface IUniverse { 
    ... 
} 

Bean實現:

@Clustered @Stateful 
public class Universe implements IUniverse { 
    private static Vector<String> messages = new Vector<String>(); 
    ... 
} 

的jboss-beans.xml的配置:

<deployment xmlns="urn:jboss:bean-deployer:2.0"> 
    <!-- This bean is an example of a clustered singleton --> 
    <bean name="Universe" class="Universe"> 
    </bean> 
    <bean name="UniverseController" class="org.jboss.ha.singleton.HASingletonController"> 
     <property name="HAPartition"><inject bean="HAPartition"/></property> 
     <property name="target"><inject bean="Universe"/></property> 
     <property name="targetStartMethod">startSingleton</property> 
     <property name="targetStopMethod">stopSingleton</property> 
    </bean> 
</deployment> 

主要的問題這個實現是在主節點(包含狀態的節點)之後的單身EJB)優雅地關閉,Singleton的狀態丟失並重置爲默認值。請注意,一切都是在JBoss 5集羣文檔之後構建的,因爲在這個主題上沒有找到JBoss 6文檔。任何關於如何解決這個問題的信息,或者在哪裏可以找到有關集羣的JBoss 6文檔,都是值得讚賞的。

+0

羣集,有狀態的單身人士是一個難以解決的問題。我強烈建議你嘗試重新設計你的系統,這樣你就不需要擁有一個系統,因爲你需要一個犛牛剃鬚的世界。 – skaffman 2011-03-13 10:16:21

回答

1

我不認爲你實際上需要「singleton」有狀態會話bean,因爲調用有狀態會話bean的方式是保持對bean的獲取引用並調用引用的相同實例。應用程序服務器集羣將通過在羣集中維護ejb會話來維護有狀態會話bean的狀態。

但最後,我同意你可能想重新考慮你使用有狀態會話bean的必要性。