2011-03-13 219 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的必要性。