Message-driven Beans für die Herstellung einer Verbindung zum integrierten Messaging-Server implementieren

Verwenden Sie die Message-driven Beans (MDB), um eine Verbindung zum integrierten Messaging-Server herzustellen.

Informationen zu dieser Task

MDB kann im Liberty -Server in den folgenden beiden Szenarios konfiguriert werden:
  • Wenn sich die MDB und die Messaging-Engine auf demselben Liberty -Server befinden
  • Wenn die MDB mit einer fernen Messaging-Engine verbunden ist, die in einem anderen Liberty -Server ausgeführt wird. Das folgende Diagramm stellt die zwei Konfigurationsszenarien für MDBs dar. Das erste Szenario ist, wenn sich Messaging-Engine und MDB auf demselben Liberty -Server befinden. Im zweiten Szenario stellt die MDB eine Verbindung zu einer Messaging-Engine in einem anderen Server her.
    Ablaufdiagramm für Konfiguration

Vorgehensweise

  1. MDB-Feature konfigurieren

    Aktivieren Sie die MDB-Unterstützung, indem Sie die Features jmsMdb-3.1 und wasJmsClient-2.0 in der Datei server.xml konfigurieren. Wenn Sie eine JNDI-Suche durchführen möchten, müssen Sie auch das Feature jndi-1.0 zusammen mit den anderen zwei Features hinzufügen.

    <featureManager>
         <feature>jmsMdb-3.1</feature>
         <feature>wasJmsClient-2.0</feature>
         <feature>jndi-1.0</feature>
    </featureManager>

    Wenn Sie das Feature wasJmsClient-2.0 konfigurieren, können Sie die erforderlichen JMS-Ressourcen definieren und die MDB für die Interaktion mit der Messaging-Engine aktivieren.

    Wichtig: Das Feature wasJmsClient-2.0 unterstützt die Features der Spezifikationen JMS 1.1 und JMS 2.0 . Sie können jedoch das Feature wasJmsClient-1.1 verwenden, wenn Sie nur die Features verwenden möchten, die mit der Spezifikation JMS 1.1 kompatibel sind.
  2. Konfigurieren Sie eine JCA-Aktivierungsspezifikation, die den JMS-Ressourcenadapter verwendet, sodass die MDB als Listener an einem bestimmten JMS-Ziel agiert.

    Wählen Sie eine der folgenden drei Optionen aus, um die MDB für die Interaktion mit der Messaging-Steuerkomponente zu konfigurieren:

    • Option 1: Definieren Sie Aktivierungsspezifikationseigenschaften in der Datei server.xml .

      Sie können die Eigenschaft in der Datei server.xml definieren, damit die MDB die Eigenschaft verwenden kann, um ein bestimmtes JMS-Ziel zu überwachen.
      <jmsActivationSpec id="JMSSample/JMSSampleMDB">
           <properties.wasJms destinationRef="jndi/MDBQ"  />
      </jmsActivationSpec>
      
      <jmsQueue id="jndi/MDBQ" jndiName="jndi/MDBQ">
           <properties.wasJms queueName="Q1"/>
      </jmsQueue>

      Das Attribut destinationRef bezieht sich auf die ID des Elements jmsQueue . Wenn für jmsQueue keine ID definiert ist, muss das Attribut destinationRef auf den Wert jndiName des Elements jmsQueue verweisen.

      Hinweis: Der ID-Wert muss das Format application name/module name/bean name aufweisen.
      • Anwendungsname ist der Name der Anwendung, die implementiert wird (z. B. JMSSample). Der Anwendungsname ist nur gültig, wenn die Bean in einer EAR-Datei gepackt wird. Für die Anwendung wird standardmäßig der Basisname der EAR-Datei ohne Dateinamenerweiterung verwendet, es sei denn, der Implementierungsdeskriptor application.xml enthält eine entsprechende Angabe.
      • Modulname ist der Name des Moduls, in dem die Bean gepackt wird. In einer eigenständigen Datei ejb-jar oder WAR wird als Wert für module-name standardmäßig der Basisname des Moduls mit allen entfernten Dateinamenerweiterungen verwendet. In einer Datei EAR wird als Wert für module-name standardmäßig der Pfadname des Moduls mit allen entfernten Dateinamenerweiterungen, jedoch mit allen enthaltenen Verzeichnisnamen verwendet. Sie können den Standardwert module-name überschreiben, indem Sie das Element module-name von ejb-jar.xml (für ejb-jar -Dateien) oder web.xml (für WAR -Dateien) verwenden.
      • Bean-Name ist der ejb-name der Enterprise-Bean. Für Enterprise-Beans, die durch Annotationen definiert werden, wird standardmäßig der nicht qualifizierte Name der Session-Bean-Klasse als Bean-Name verwendet, es sei denn, der Inhalt des Attributs "name()" der Annotation MessageDriven enthält eine entsprechende Angabe. Für Enterprise-Beans, die über ejb-jar.xmldefiniert werden, wird sie im Implementierungsdeskriptorelement ejb-name angegeben.
    • Option 2: Definieren Sie Ressourceninformationen in der EJB-Bindungsdatei ibm-ejb-jar-bnd.xml .

      Sie können auch diese Bindungsdatei verwenden, um die Ressourceninformationen zu definieren, die erforderlich sind, damit die MDB eine Verbindung zur Messaging-Engine herstellen kann. Wenn Sie die EJB-Bindungsdatei verwenden, muss die Eigenschafts-ID der Aktivierungsspezifikation nicht unbedingt das Format application name/module name/bean name aufweisen.

      Definieren Sie die Eigenschaften der Aktivierungsspezifikation in der Datei server.xml .
      <jmsActivationSpec id="PriceChangeAS">
           <properties.wasJms destinationRef="jms/TriggerQ" />
      </jmsActivationSpec>
      
      <jmsQueue id="jms/TriggerQ" jndiName="jms/TriggerQ">
           <properties.wasJms queueName="Q1"/>                  
       </jmsQueue>
      Fügen Sie die folgenden MDB-Bindungsinformationen zur Datei ibm-ejb-jar-bnd.xml hinzu.
      <ejb-jar-bnd
              xmlns="http://websphere.ibm.com/xml/ns/javaee"
              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
              xsi:schemaLocation="http://websphere.ibm.com/xml/ns/javaee http://websphere.ibm.com/xml/ns/javaee/ibm-ejb-jar-bnd_1_1.xsd" 
      	(http://websphere.ibm.com/xml/ns/javaee/ibm-ejb-jar-bnd_1_1.xsd%27) version="1.1">
          
      	<message-driven name="PriceChangeMDBBean">
              	<jca-adapter activation-spec-binding-name="PriceChangeAS" destination-binding-name="jms/TriggerQ" />
         	</message-driven>
      </ejb-jar-bnd>
      Hinweis: Bei Verwendung der EJB-Bindungsdatei muss das Attribut activation-spec-binding-name in der Datei ibm-ejb-jar-bnd.xml auf die ID der Aktivierungsspezifikationseigenschaft verweisen, die in der Datei server.xml angegeben ist.
    • Option 3: Definieren Sie Ressourceninformationen im Element application in der Datei server.xml .

      Sie können die server.xml -Konfigurationsdaten in derselben Form definieren wie die Informationen, die in der Datei ibm-ejb-jar-bnd.xml angegeben sind, wie im folgenden Beispiel gezeigt:

      <application location="PriceChangeApp.ear">
      	<ejb-jar-bnd moduleName="PriceChangeEJB">       
      	   <message-driven name="PriceChangeMDBBean">
              	<jca-adapter activation-spec-binding-name="PriceChangeAS" destination-binding-name="jms/TriggerQ" />
      	   </message-driven>
      	</ejb-jar-bnd>
      </application>
      Hinweis: Geben Sie das Attribut moduleName für das Element ejb-jar-bnd an. Der Wert ist der Name der JAR-Datei, die die MDB ohne die Dateierweiterung .jar enthält. Wenn zum Beispiel die MDB in der Datei PriceChangeEJB.jar enthalten ist, hat das Attribut moduleName den Wert PriceChangeEJB.
  3. Optional: Geben Sie Aktivierungskonfigurationseigenschaften für die ActivationSpec -Instanz an, indem Sie Annotationen in der MDB angeben.

    Liberty unterstützt die Definition von Annotationen für MDBs, die mit der Aktivierungsspezifikationseigenschaft verwendet werden können, die in der Datei server.xml definiert ist. Wenn Sie die Annotation verwenden möchten, definieren Sie zuerst die Aktivierungsspezifikationseigenschaft wie im vorherigen Schritt beschrieben. Für jede MDB können Sie die Annotationen definieren, wie im folgenden Beispiel gezeigt:

    @MessageDriven(
    		  name = "JMSSampleMDB",
    		  activationConfig = {
    		    @ActivationConfigProperty(propertyName  = "destinationType", 
    		                              propertyValue = "javax.jms.Queue"),
    		    @ActivationConfigProperty(propertyName  = "userName", 
    		                              propertyValue = "user1"),
    		    @ActivationConfigProperty(propertyName  = "password",
    		                              propertyValue = "user1pwd"),	
    		    @ActivationConfigProperty(propertyName  = "destination", 
    		                              propertyValue = "jndi_INPUT_Q")                         
    		  }
    		)
    public class JMSSampleMDB implements MessageListener{
    	
    	 @TransactionAttribute(value = TransactionAttributeType.REQUIRED)
    	  public void onMessage(Message message) {
    	 }
    }