5

JBoss [EAP] 5.0.0.GA を使用しています。使用する JMS キューの存在に依存する MDB をいくつか含む EJB jar を含む EAR があります。キューを構成したとき.../server/all/deploy/messaging/myqueues-service.xml、問題はありませんでした。

ただし、JBoss 構成を直接変更する必要がないように、EAR ファイルでキューを構成したいと考えました。問題ありません。myqueues-service.xmlファイルを EAR のルートに配置し、jboss-app.xml次のように my への参照を追加しました。

<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.

しかし、エラーが発生することは避けたいと考えています。そのためには、EJB jar をロードする前に JBoss に強制的に JMS キューを設定させる方法が必要です。これを行う方法はありますか?参考まで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>

任意の提案をいただければ幸いです。

4

1 に答える 1

6

わかりました、community.jboss.org フォーラムの jaikiran pai が私を助けてくれました解決策は、MDB への依存関係として JMS キューを追加することです。私の場合、 @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 を使用して同じことを行うことができます。

于 2011-01-06T15:53:29.243 に答える