Frage

Ich verwende JBoss [EAP] 5.0.0.GA und ich habe eine EAR, die ein EJB jar enthält, die einige MEB enthält, die auf die Existenz der JMS-Warteschlangen abhängen, die sie verwenden. Wenn ich die Warteschlangen in .../server/all/deploy/messaging/myqueues-service.xml konfiguriert war es kein Problem.

Aber ich wollte, dass die Warteschlangen in der EAR-Datei konfigurieren, um zu vermeiden, Änderungen an der JBoss Config direkt zu machen. Kein Problem, habe ich meine myqueues-service.xml-Datei in das Stammverzeichnis der EAR und den Verweis auf meine jboss-app.xml wie folgt hinzugefügt:

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

Allerdings, wenn ich das tun, JBoss lädt die EJB-JAR (enthalten in my-ear.ear) und dann konfiguriert die JMS Queues danach. Dies führt zu Fehlern, wenn die MDB geladen werden:

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

Es ist kein großes Problem, wie es später auf dem MEB erfolgreich JMS wieder:

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.

Aber ich möchte wirklich alle Fehler zu vermeiden, und um das zu tun, dass ich einen Weg brauche JBoss zu zwingen, die JMS-Warteschlangen zuerst zu konfigurieren, bevor Sie die EJB-JAR-Laden. Gibt es eine Möglichkeit, dies zu tun? Als Referenz ist hier der application.xml für die 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>

geschätzt Anregungen.

War es hilfreich?

Lösung

Ok, jaikiran pai auf dem community.jboss. org Foren half mir aus. Die Lösung ist die JMS-Queue als eine Abhängigkeit von der MDB hinzuzufügen. In meinem Fall habe ich die @Depends Anmerkung:

@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 {
    ...
}

Sie könnten das gleiche mit jboss.xml tun, wenn Sie nicht Anmerkungen verwenden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top