当发布我的应用到 JBoss 5 ,将对应的xxx-servlet.xml放到deplay目录下,然后将对应的jar包也放到deplay目录下,发布正常
但是重新启动JBoss时出现下面 错误
17
:
11
:
29
,
151
INFO [EJBContainer] STARTED EJB: .....
17 : 11 : 29 , 266 INFO [JndiSessionRegistrarBase] Binding the following Entries in Global JNDI:
..
..
17 : 11 : 29 , 928 WARN [JmsActivation] Failure in jms activation org.jboss.resource.adapter.jms.inflow.JmsActivationSpec@11694c ...
javax.naming.NameNotFoundException: ... not bound
at org.jnp.server.NamingServer.getBinding(NamingServer.java: 771 )
at org.jnp.server.NamingServer.getBinding(NamingServer.java: 779 )
at org.jnp.server.NamingServer.getObject(NamingServer.java: 785 )
at org.jnp.server.NamingServer.lookup(NamingServer.java: 443 )
at org.jnp.server.NamingServer.lookup(NamingServer.java: 399 )
at org.jnp.interfaces.NamingContext.lookup(NamingContext.java: 722 )
at org.jnp.interfaces.NamingContext.lookup(NamingContext.java: 682 )
at javax.naming.InitialContext.lookup(InitialContext.java: 392 )
at org.jboss.util.naming.Util.lookup(Util.java: 222 )
at org.jboss.resource.adapter.jms.inflow.JmsActivation.setupDestination(JmsActivation.java: 464 )
at org.jboss.resource.adapter.jms.inflow.JmsActivation.setup(JmsActivation.java: 352 )
at org.jboss.resource.adapter.jms.inflow.JmsActivation$SetupActivation.run(JmsActivation.java: 729 )
at org.jboss.resource.work.WorkWrapper.execute(WorkWrapper.java: 213 )
at org.jboss.util.threadpool.BasicTaskWrapper.run(BasicTaskWrapper.java: 260 )
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java: 886 )
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java: 908 )
17 : 11 : 29 , 266 INFO [JndiSessionRegistrarBase] Binding the following Entries in Global JNDI:
..
..
17 : 11 : 29 , 928 WARN [JmsActivation] Failure in jms activation org.jboss.resource.adapter.jms.inflow.JmsActivationSpec@11694c ...
javax.naming.NameNotFoundException: ... not bound
at org.jnp.server.NamingServer.getBinding(NamingServer.java: 771 )
at org.jnp.server.NamingServer.getBinding(NamingServer.java: 779 )
at org.jnp.server.NamingServer.getObject(NamingServer.java: 785 )
at org.jnp.server.NamingServer.lookup(NamingServer.java: 443 )
at org.jnp.server.NamingServer.lookup(NamingServer.java: 399 )
at org.jnp.interfaces.NamingContext.lookup(NamingContext.java: 722 )
at org.jnp.interfaces.NamingContext.lookup(NamingContext.java: 682 )
at javax.naming.InitialContext.lookup(InitialContext.java: 392 )
at org.jboss.util.naming.Util.lookup(Util.java: 222 )
at org.jboss.resource.adapter.jms.inflow.JmsActivation.setupDestination(JmsActivation.java: 464 )
at org.jboss.resource.adapter.jms.inflow.JmsActivation.setup(JmsActivation.java: 352 )
at org.jboss.resource.adapter.jms.inflow.JmsActivation$SetupActivation.run(JmsActivation.java: 729 )
at org.jboss.resource.work.WorkWrapper.execute(WorkWrapper.java: 213 )
at org.jboss.util.threadpool.BasicTaskWrapper.run(BasicTaskWrapper.java: 260 )
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java: 886 )
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java: 908 )
at java.lang.Thread.run(Thread.java: 619)
分析得JBOSS在读xxx-servlet.xml产生队列之前就去使用队列,所以报错
解决办法:
在消息Bean中增加以下注解,让消息Bean依赖于 XxxxTopic队列,在队列产生之后才创建消息Bean
@Depends({"jboss.messaging.destination:service=Topic,name=XxxxTopic"})