如何在JBoss5中订购EJB和JMS队列配置的部署?

如何在JBoss5中订购EJB和JMS队列配置的部署?,jboss,jms,ejb,ear,jboss-messaging,Jboss,Jms,Ejb,Ear,Jboss Messaging,我正在使用JBoss[EAP]5.0.0.GA,我有一个EAR,它包含一个EJB jar,其中包含一些MDB,这些MDB取决于它们使用的JMS队列的存在。当我在../server/all/deploy/messaging/myqueues service.xml中配置队列时,没有问题 但是,我希望在EAR文件中配置队列,以避免直接更改JBoss配置。没问题,我将我的myqueues service.xml文件放入EAR的根目录中,并添加了对我的jboss app.xml的引用,如下所示: <

我正在使用JBoss[EAP]5.0.0.GA,我有一个EAR,它包含一个EJB jar,其中包含一些MDB,这些MDB取决于它们使用的JMS队列的存在。当我在
../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>
这不是什么大问题,因为稍后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.
但我确实希望避免出现任何错误,为了做到这一点,我需要一种方法,在加载ejbjar之前,首先强制JBoss配置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>

我的耳朵
my-ejb.jar
我的战争
我的根
感谢您的任何建议。

好的,在community.jboss.org论坛上帮助我。解决方案是将JMS队列作为MDB的依赖项添加。在我的例子中,我使用了@Depends注释:

@MessageDriven(activationConfig = {
        @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue"),
        @ActivationConfigProperty(propertyName = "destination", propertyValue = "queue/MyQueue") })
@Depends("jboss.messaging.destination:service=Queue,name=MyQueue")
public class MyMessageListener implements MessageListener {
    ...
}

如果不使用注释,您也可以使用jboss.xml执行同样的操作。

更有用的是:如果您不想将myqueues-service.xml文件放在…/server/all/deploy/messaging/文件夹中,也不想将其包含在EAR中,那么您可以将其放在…/server/all/deploy/(使用“Make Deployable”在Eclipse中,或者只是在那里复制它)。这消除了在MDB中声明显式依赖项的需要,同时不改变默认JBoss服务器配置。
@MessageDriven(activationConfig = {
        @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue"),
        @ActivationConfigProperty(propertyName = "destination", propertyValue = "queue/MyQueue") })
@Depends("jboss.messaging.destination:service=Queue,name=MyQueue")
public class MyMessageListener implements MessageListener {
    ...
}