Domanda

Sto usando JBoss [EAP] 5.0.0.GA e ho un EAR che contiene un vaso EJB che contiene alcuni MDB che dipendono l'esistenza delle code JMS che usano. Quando ho configurato le code in .../server/all/deploy/messaging/myqueues-service.xml non c'era alcun problema.

Tuttavia, ho voluto per configurare le code nel file EAR per evitare di dover apportare modifiche alla configurazione di JBoss direttamente. Nessun problema, ho messo il mio file myqueues-service.xml nella radice dell'orecchio e aggiunto il riferimento alla mia jboss-app.xml nel seguente modo:

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

Tuttavia, quando lo faccio, JBoss carica il jar EJB (contenuta nel mio-ear.ear) e poi configura le code JMS dopo. Questo si traduce in errori quando il MDB sono caricati:

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

Non è un problema enorme, come più tardi le MDBs riconnettersi con successo per 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.

Ma mi piacerebbe molto per evitare di dover eventuali errori, e per farlo ho bisogno di un modo per forzare JBoss per configurare le code JMS prima, prima di caricare il vaso EJB. C'è un modo per fare questo? Per avere un riferimento, ecco la application.xml per l'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>

Tutti i suggerimenti apprezzato.

È stato utile?

Soluzione

Ok, jaikiran pai sul community.jboss. org forum mi hanno aiutato. La soluzione è quella di aggiungere alla coda JMS come una dipendenza sul MDB. Nel mio caso ho usato l'annotazione @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 {
    ...
}

Si potrebbe fare lo stesso utilizzando jboss.xml se non si utilizza annotazioni.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top