我正在使用一个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提前,
德国