EJB3.0部署消息驱动Bean抛javax.naming.NameNotFoundException异常
作者:WeekendLife
时间:2026-07-22
浏览:0
部署消息驱动Bean时抛出javax.naming.NameNotFoundException异常,原因是JMS消息队列未在JNDI命名服务中注册。其解决方法为:需要手动配置一个Queue对象,例如在JBoss服务器中修改mail-service.xml或新建-service.xml文件,将Queue绑定至queue/myqueue路径。完成上述操作并重新部
部署EJB的消息驱动Bean(MDB)时,如果遇到下面这个错误,十有八九是JMS队列没有在JNDI中注册导致的。先看看报错信息:
ERROR [org.jboss.resource.adapter.jms.inflow.JmsActivation] (WorkManager(2)-2) Unable to reconnect org.jboss.resource.adapter.jms.inflow.JmsActivationSpec@2705ea(ra=org.jboss.resource.adapter.jms. JmsResourceAdapter@737612 destination=queue/myqueue destinationType=ja vax.jms.Queue tx=true durable=false reconnect=10 provider=ja va:/DefaultJMSProvider user=null maxMessages=1 minSession=1 maxSession=15 keepAlive=60000 useDLQ=true DLQHandler=org.jboss.resource.adapter.jms.inflow.dlq.GenericDLQHandler DLQJndiName=queue/DLQ DLQUser=null DLQMaxResent=5) ja vax.naming.NameNotFoundException: myqueue not bound
错误直指核心——myqueue这个队列在JNDI中找不到。JBoss不会自动创建Queue对象,需要手动配置。下面给出两种常用的解决方案,任选其一即可。
解决方案一:修改mail-service.xml
在JBoss根目录下的 server\default\deploy\mail-service.xml 文件中,添加以下MBean定义:
queue/myqueue jboss.mq:service=DestinationManager
解决方案二:新建xxx-service.xml
在 server\default\deploy 目录下新建一个以 -service.xml 结尾的文件(比如 MDB-service.xml),可以放在子目录中。文件内容如下:
jboss.mq:service=DestinationManager
原因分析
消息驱动Bean的注解通常像这样:
@MessageDriven(
activationConfig = {
@ActivationConfigProperty(propertyName="destinationType", propertyValue="ja vax.jms.Queue"),
@ActivationConfigProperty(propertyName="destination", propertyValue="queue/myqueue")
}
)
注意 destination 属性的值 queue/myqueue 对应的是JNDI名称。JBoss不会自动创建这个队列,因此必须手动配置一个Queue对象,并将其绑定到 queue/myqueue 这个JNDI路径上。
OK,采用以上任意一种方案都能解决。只需重新部署消息驱动Bean,然后再运行客户端,你会发现调用已经成功——队列被正确绑定,MDB正常工作了。
作者最新文章
parallels desktop内存分配怎么更改
2026-10-09 15:31
photoshop钢笔工具抠图怎么用
2026-10-06 12:02
打印机暂停打印的解决方法及恢复正常打印步骤
2026-09-22 14:32
华强北手机全线涨价:涨幅400-1500元,存储成本推高售价
2026-09-08 19:22
PDF转XML操作步骤与在线工具使用指南
2026-09-03 10:06
下一篇:
JSP页面跳转方法大全
热门文章
更多
精品专题
更多
Mac软件
更多
WINDOWS
更多










































