如何在JBoss 5中订购EJB和JMS队列配置?

时间:2011-01-06 14:40:55

标签: jboss jms ejb ear jboss-messaging

我正在使用JBoss [EAP] 5.0.0.GA,我有一个包含EJB jar的EAR,它包含一些依赖于它们使用的JMS队列的存在的MDB。当我在.../server/all/deploy/messaging/myqueues-service.xml中配置队列时没有问题。

但是,我想在EAR文件中配置队列,以避免直接对JBoss配置进行更改。没问题,我将myqueues-service.xml文件放入EAR的根目录,并将引用添加到我的jboss-app.xml,如下所示:

<jboss-app>
    <module-order>strict</module-order>
    <loader-repository>
        seam.jboss.org:loader=my-ear.ear
    </loader-repository>
    <module>
        <service>myqueues-service.xml</service>
    </module>
</jboss-app>

然而,当我这样做时,JBoss首先加载EJB jar(包含在my-ear.ear中),然后再配置JMS队列。加载MDB时会导致错误:

12:16:02,714 WARN  [JmsActivation] Failure in jms activation org.jboss.resource.adapter.jms.inflow.JmsActivationSpec@13a59e .....
javax.naming.NameNotFoundException: MyQueue not bound

这不是一个大问题,因为后来MDB成功重新连接到JMS:

12:16:12,698 INFO  [JmsActivation] Attempting to reconnect org.jboss.resource.adapter.jms.inflow.JmsActivationSpec@f91ad5
12:16:12,823 INFO  [JmsActivation] Reconnected with messaging provider.

但我真的想避免出现任何错误,为了做到这一点,我需要一种方法来强制JBoss在加载EJB jar之前首先配置JMS队列。有没有办法做到这一点?作为参考,这里是EAR的application.xml

<application xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:application="http://java.sun.com/xml/ns/javaee/application_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/application_5.xsd" version="5">
  <display-name>my-ear</display-name>
  <module>
    <ejb>my-ejb.jar</ejb>
  </module>
  <module>
    <web>
      <web-uri>my.war</web-uri>
      <context-root>myroot</context-root>
    </web>
  </module>
</application>

任何建议表示赞赏。

1 个答案:

答案 0 :(得分:6)