我正在尝试让应用程序在 JBoss 集群上运行。它在内部使用队列,开发人员声称它应该在集群环境中正常工作。我在集群上将 jbossmq 设置为 ha-singleton。该应用程序在当前运行队列的任何节点上都能正常工作,但在其他节点上失败,并出现“javax.naming.NameNotFoundException:QueueConnectionFactory 未绑定”错误。我可以从 jmx-console 查看 JNDIview,发现 QueueConnectionFactory 类确实只出现在全局上下文中的主节点上。有没有办法查看集群的 JNDI 列表而不是每个服务器?
我从默认的 Jboss 4.2.3.GA 安装中采取的步骤是使用“全部”配置。然后删除 /server/all/deploy/hsqldb-ds.xml 和 /deploy-hasingleton/jms/hsqldb-jdbc2-service.xml,将 example/jms/mysq-jdbc2-service.xml 文件复制到其位置(编辑该文件以使用 DefaultDS 而不是 MySqlDS)。最后,我在 deploy 目录中创建了一个 mysql-ds.xml 文件,将“DefaultDS”指向一个空数据库。我在 deploy 目录中创建了一个带有队列定义的 -services.xml 文件。如下所示:
<server>
<mbean code="org.jboss.mq.server.jmx.Queue"
name="jboss.mq.destination:service=Queue,name=myfirstqueue">
<depends optional-attribute-name="DestinationManager">
jboss.mq:service=DestinationManager
</depends>
</mbean>
</server>
集群的其他所有功能均正常运行,服务器在视图中相互列出,并且会话来回复制。JBoss 文档在这方面有些单薄,我可能错过了其他设置吗?或者这可能是代码问题(在集群环境中执行 JNDI 查找是否有不同的代码?)
谢谢
答案1
问题出在代码上。@resource 语法显然不符合集群要求。开发人员尝试了另一种方法,但运行正常。