我正在使用带有几个项目的 vanilla JBossAS 6 服务器来测试集群 JBoss 环境的功能。我遇到的问题是,如果我将 EJB 引用从节点中的一个 EJB(另一种类型)传输到另一个节点中相同类型的实例,则在方法调用时会引发异常,说明long_alphanumeric_key键指定的 bean 未在缓存中注册 (InfinispanStatefulCache)。
问题是,当在我需要传输的对象上使用单例注释而不是有状态注释时,传输的对象可以完美地工作,成功地在创建它的服务器上调用共享 EJB 的方法。问题是这种情况与 HA-Singleton 有相同的缺陷。之前通过在 HA-JNDI 树上查找获得的所有传输的引用。
关于我要实现的目标的一些见解:
我目前需要的是在节点之间共享有状态 EJB 的单个实例,例如 HA-Singleton。不使用 HA-Singleton 的原因是这种类型的单例的状态是专门维护在集群的主节点上的,所以如果节点关闭或失败,实例的状态就会丢失。
使用有状态 bean 可以让我维护集群上的状态,从而防止在节点故障时状态丢失。我还没有完全理解 JBoss 和 Infinispan 缓存是如何工作的,但据我所知,@Clustered 带注释的有状态 bean 的状态会自动复制到集群上。
我们已经被警告过在当前 JBoss 版本中使用 Singletons 和 HA-Singletons 的问题,所以任何类型的文档或模式来帮助解决这个设计变更都是受欢迎的。
另外,如果有任何文档可以让我深入了解 Infinispan 缓存和 JBoss 集群如何工作,我将不胜感激。到目前为止,我一直在阅读的材料与使用 JBossCache 而不是 Infinispan 的旧 JBoss 版本混合在一起。
提前致谢,
德语