Despliegue de beans controlados por mensajes para conectarse con el servidor de mensajería incorporado

Utilice beans controlados por mensajes (MDB) para conectarse con el servidor de mensajería incorporado.

Acerca de esta tarea

Se pueden configurar los MDB en Liberty en los dos escenarios siguientes:
  • Si los MDB y el motor de mensajería están en el mismo servidor Liberty.
  • Si un MDB se conecta a un motor de mensajería remoto que se ejecuta en otro servidor Liberty distinto.
    El diagrama muestra los dos escenarios de configuración para los MDB. El primer escenario muestra el motor de mensajería y el MDB en el mismo servidor Liberty. El segundo escenario muestra un MDB que se conecta a un motor de mensajería que reside en otro servidor.

Procedimiento

  1. Configure la característica MDB:

    Habilite el soporte de MDB en el servidor Liberty configurando las características jmsMdb-3.1 y wasJmsClient-2.0 en el archivo server.xml. Si desea realizar una búsqueda JNDI, también debe añadir la característica jndi-1.0 junto con las otras dos características.

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

    La configuración de la característica wasJmsClient-2.0 permite a los usuarios definir los recursos JMS necesarios y permite que el MDB interactúe con el motor de mensajería.

    Importante: La característica wasJmsClient-2.0 admite las características de las especificaciones JMS 1.1 y JMS 2.0. Sin embargo, puede decidir utilizar la característica wasJmsClient-1.1 si desea utilizar solamente las características que son compatibles con la especificación JMS 1.1.
  2. Configure una especificación de activación JCA que utilice el adaptador de recursos JMS de modo que el MDB actúe como escucha en un destino JMS específico. A continuación se muestran distintas formas en que se puede configurar un MDB para interactuar con el motor de mensajería.
    1. Configure MDB mediante la propiedad de especificación de activación.
      Puede definir la propiedad en el archivo server.xml, de modo que el MDB puede utilizar la propiedad para escuchar en un destino JMS específico.
      <jmsActivationSpec id="JMSSample/JMSSampleMDB">
           <properties.wasJms destinationRef="jndi/MDBQ"  />
      </jmsActivationSpec>
      
      <jmsQueue id="jndi/MDBQ" jndiName="jndi/MDBQ">
           <properties.wasJms queueName="Q1"/>
      </jmsQueue>

      <destinationRef> hace referencia al ID de <jmsQueue>. Si no se menciona un ID en <jmsQueue>, <destinationRef> debe apuntar al <jndiName> de <jmsQueue>.

      Nota: El valor del ID debe tener el formato nombre de aplicación/nombre de módulo/nombre de bean, donde
      • nombre de aplicación es el nombre de la aplicación que se despliega (por ejemplo, JMSSample). El nombre de aplicación sólo se aplica si el bean está empaquetado dentro de un archivo EAR. La aplicación toma el valor predeterminado del nombre base del archivo EAR sin extensión de nombre de archivo a menos que se haya especificado en el descriptor de despliegue de application.xml.
      • nombre de módulo es el nombre del módulo en el que se ha empaquetado el bean. En un archivo ejb-jar autónomo o en un archivo WAR, <module-name> toma el valor predeterminado del nombre base del módulo con la extensión de nombre de archivo eliminada. En un archivo EAR, <module-name> toma como valor predeterminado el nombre de vía de acceso del módulo con la extensión de nombre de archivo eliminada, pero con los nombres de directorio incluidos. El <module-name> predeterminado se puede alterar utilizando el elemento ejb-jar.xml (para archivos ejb-jar) o web.xml (para archivos WAR).
      • nombre de bean es el nombre ejb del enterprise bean. Para los enterprise beans definidos mediante anotación, el nombre de bean toma el valor predeterminado del nombre no calificado de la clase de bean de sesión, a menos que se especifique en el contenido del atributo name() de la anotación MessageDriven. Para los enterprise beans definidos mediante ejb-jar.xml, se especifica en el elemento del descriptor de despliegue de <ejb-name>.
    2. Utilice anotaciones junto con la propiedad de especificación de activación definida en el archivo server.xml.

      Liberty admite la definición de anotaciones para los MDB que se pueden utilizar con la propiedad de especificación de activación definida en el archivo server.xml. Para poder utilizar la anotación, primero defina la propiedad de especificación de activación como se menciona en el paso anterior. Y para cada uno de los MDB, el usuario puede definir las anotaciones como se muestra en el ejemplo siguiente:

      @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) {
      	 }
      }
    3. Use el archivo de enlaces EJB (ibm-ejb-jar-bnd.xml).

      También puede utilizar este archivo de enlaces para definir la información de recursos que es necesaria para que el MDB se conecte con el motor de mensajería. Cuando utiliza el archivo de enlaces EJB, el ID de propiedad de especificación de activación no necesariamente necesita tener en el formato nombre de aplicación/nombre de módulo/nombre de bean como se ha mencionado en el paso 1.

      Añada la información de la propiedad de especificación de activación en server.xml.
      <jmsActivationSpec id="PriceChangeAS">
           <properties.wasJms destinationRef="jms/TriggerQ" />
      </jmsActivationSpec>
      
      <jmsQueue id="jms/TriggerQ" jndiName="jms/TriggerQ">
           <properties.wasJms queueName="Q1"/>                  
       </jmsQueue>
      Añada la siguiente información de enlaces de MDB en el archivo ibm-ejb-jar-bnd.xml.
      <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>
      Nota: Cuando utiliza el archivo de enlaces EJB, el atributo activation-spec-binding-name del archivo ibm-ejb-jar-bnd.xml debe apuntar al valor del ID de la propiedad de especificación de activación que se ha especificado en el archivo server.xml.
    4. [17.0.0.1 and later]La información de recursos también puede especificarse en el archivo server.xml bajo el elemento <application>. La información de configuración de server.xml tiene la misma forma que la información especificada en el archivo ibm-ejb-jar-bnd.xml. Por ejemplo:
      <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>
      Nota: Debe especificar el atributo moduleName para el elemento <ejb-jar-bnd>. El valor es el nombre del archivo JAR que contiene el MDB sin la extensión .jar. Por ejemplo, si el MDB está contenido en PriceChangeEJB.jar, el atributo moduleName es PriceChangeEJB.

Icono que indica el tipo de tema Tema de tarea

Nombre de archivo: twlp_dep_msg_mdbsib.html