发布于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对象,需要手动配置。下面给出两种常用的解决方案,任选其一即可。
在JBoss根目录下的 server\default\deploy\mail-service.xml 文件中,添加以下MBean定义:
queue/myqueue jboss.mq:service=DestinationManager
在 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正常工作了。
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
8