Как заказать развертывание конфигурации EJB и очереди JMS в JBoss 5? - PullRequest
5 голосов
/ 06 января 2011

Я использую JBoss [EAP] 5.0.0.GA, и у меня есть EAR, который содержит JJ-файл EJB, который содержит некоторые 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>

Однако, когда я это делаю, JBoss сначала загружает EJB-файл (содержится в 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 сначала настроить JMS-очереди перед загрузкой EJB-файла. Есть какой-либо способ сделать это? Для справки вот application.xml для EAR:

<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 Ответ

6 голосов
/ 06 января 2011

Хорошо, jaikiran pai на форумах 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, если вы не используете аннотации.

...