商城首页欢迎来到中国正版软件门户

您的位置: 首页 > 文章列表 > 编程开发 > EJB3.0部署消息驱动Bean抛javax.naming.NameNotFoundException异常

EJB3.0部署消息驱动Bean抛javax.naming.NameNotFoundException异常

  发布于2026-07-22 阅读(0)

扫一扫,手机访问

部署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正常工作了。

本文转载于:https://www.jb51.net/article/128947.htm 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。

热门关注