You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WildFly 18 JMS客户端报NameNotFoundException求助

解决WildFly JMS客户端的javax.naming.NameNotFoundException异常

嘿,我看到你作为JMS和WildFly的新手,在运行自定义客户端时遇到了javax.naming.NameNotFoundException,这种问题在刚接触远程JMS访问时确实很常见,我来帮你一步步排查解决!

问题根源分析

从你的异常信息和代码、配置来看,核心问题出在远程客户端无法访问WildFly的本地JNDI资源:

  • 你客户端代码里的队列JNDI名是java:/jms/queue/test,这个前缀属于WildFly的本地JNDI上下文,只有服务器内部的应用才能访问,远程客户端无权直接获取。
  • 你的standalone-full.xml中,Test队列只配置了本地条目,没有导出到远程可访问的JNDI上下文(java:jboss/exported/前缀)。

具体解决步骤

1. 更新WildFly的JMS队列配置(standalone-full.xml)

找到你配置里的Test队列节点,添加一个远程导出的JNDI条目,这样远程客户端就能lookup到它:

<jms-queue name="Test" entries="java:/jms/queue/test java:jboss/exported/jms/queue/test"/>

这里新增的java:jboss/exported/jms/queue/test就是供远程客户端使用的JNDI路径。

2. 修正客户端代码中的JNDI名称

把客户端里的DEFAULT_DESTINATION修改为远程可访问的名称:

// 简化写法(远程InitialContext会自动在java:jboss/exported下查找)
private static final String DEFAULT_DESTINATION = "jms/queue/test";

// 或者写全路径也可以
// private static final String DEFAULT_DESTINATION = "java:jboss/exported/jms/queue/test";

另外,你的连接工厂名称DEFAULT_CONNECTION_FACTORY可以简化为jms/RemoteConnectionFactory,和队列名称保持一致的风格,不过你当前的jboss/exported/jms/RemoteConnectionFactory写法也能正常工作。

3. 确保用户拥有JMS操作权限

从你的配置里看到,security-setting给guest角色开放了发送、消费等权限,所以需要把你的adminuser加入到guest角色中:

  • 打开WildFly管理控制台(默认地址:http://localhost:9990)
  • 进入Configuration > Users and Roles > Roles
  • 编辑guest角色,将adminuser添加到成员列表,保存配置。

4. 重启WildFly

修改完配置后,务必重启WildFly服务器,让新的JNDI导出配置生效。


完成以上步骤后,重新运行你的JMS客户端,应该就能成功连接到WildFly、lookup到队列和连接工厂,正常发送和接收消息了!

内容的提问来源于stack exchange,提问作者Naresh V

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 22:22:48