Desarrollo de una aplicación de empresa para utilizar beans controlados por mensajes

Las aplicaciones pueden utilizar beans controlados por mensajes como consumidores de mensajes asíncronos. Despliegue un bean controlado por mensajes como escucha de mensajes de un destino. El bean controlado por mensajes se invoca mediante una especificación de activación o un escucha JMS cuando llega un mensaje en el destino de entrada que se está supervisando.

Acerca de esta tarea

Puede desarrollar aplicaciones de empresa para que utilicen beans controlados por mensajes, como cualquier otro enterprise bean, excepto que los beans controlados por mensajes no disponen de interfaz de factoría ni remota.

Debe desarrollar el bean controlado por mensajes para delegar el proceso de empresa de los mensajes de entrada a otro enterprise bean, con lo que se separa con claridad el proceso de manejo de mensajes del proceso de empresa. Esta separación también significa que el proceso de empresa se puede invocar mediante la llegada de mensajes de entrada o, por ejemplo, mediante un cliente WebSphere J2EE. Otro enterprise bean, actuando como bean emisor, puede manejar las respuestas, o se pueden manejar en el bean controlado por mensajes.

Los beans controlados por mensajes de EJB 2.0 sólo soportan la mensajería JMS (Java™ Message Service). Los beans controlados por mensajes de EJB 2.1 y EJB 3 pueden dar soporte a otros tipos de mensajes además de JMS. Todos los beans controlados por mensajes deben implementar la interfaz MessageDrivenBean. Para la mensajería JMS, un bean controlado por mensajes debe implementar también la interfaz de escucha de mensajes javax.jms.MessageListener. Otros adaptadores de recursos compatibles con JCA (Java EE Connector Architecture) pueden proporcionar una interfaz propia de escucha de mensajes que tenga que implementarse.

Puede utilizar el asistente Nuevo Enterprise Bean de Rational Application Developer para crear un enterprise bean con un bean del tipo Bean controlado por mensajes. El asistente creará los métodos adecuados para el tipo de bean.

Por convención, la clase bean controlada por mensaje se llama nombreBean, donde nombre es el nombre que asigna al bean controlado por mensaje; por ejemplo:
public class MyJMSppMDBBean implements MessageDrivenBean, javax.jms.MessageListener

Se puede registrar un bean controlado por mensajes con el servicio de temporizador de EJB para notificaciones de sucesos basados en el tiempo si también implementa la interfaz javax.ejb.TimedObject e invoca el método de retorno de llamada de temporizador con la llamada siguiente: void ejbTimeout(Timer). A una hora planificada el contenedor llama al método ejbTimeout del bean controlado por mensajes.

La clase bean controlado por mensajes debe definir e implementar los métodos siguientes:
  • onMessage(message), que debe cumplir los requisitos siguientes:
    • El método debe tener un solo argumento de tipo javax.jms.Message.
    • La cláusula throws no debe definir ninguna excepción de aplicación.
    • Si se ha configurado el bean controlado por mensajes para utilizar transacciones controladas por beans, debe llamar a la interfaz javax.transaction.UserTransaction del ámbito de las transacciones. Dado que estas llamadas se producen dentro del método onMessage(), el ámbito de la transacción no incluye la recepción del mensaje inicial. Si desea más información, consulte el tema sobre el soporte de transacción de beans controlados por mensaje.

    Para gestionar el mensaje dentro del método onMessage() (por ejemplo, para transferir el mensaje a otro enterprise bean), puede utilizar JMS estándar. Esto se conoce como mensajería gestionada por bean.

    Si va a utilizar un adaptador de recursos compatible con JCA con otra interfaz de escucha de mensajes, puede que necesite otro método además de onMessage(). Para obtener información sobre la interfaz de escucha de mensajes necesaria, consulte la documentación que se ha proporcionado con el adaptador de recursos compatible con JCA.

  • ejbCreate()

    Debe definir e implementar un método ejbCreate para cada modo en que desea crear una nueva instancia de enterprise bean.

  • ejbRemove()

    El contenedor invoca este método cuando el cliente invoca el método remove heredado por la interfaz de factoría del enterprise bean de la interfaz javax.ejb.EJBHome. Este método debe contener todo el código que desee ejecutar antes de que se elimine del contenedor una instancia de enterprise bean (y los datos asociados se eliminan del origen de datos).

  • ejbTimeout(Timer)

    Este método sólo es necesario para dar soporte a las notificaciones del servicio de temporizador y contiene la lógica empresarial que maneja los sucesos de tiempo recibidos.

Procedimiento

  1. Cree el proyecto de aplicación de empresa.
  2. Cree la clase de beans controlados por mensajes. Puede utilizar el asistente Nuevo enterprise bean de Rational(r) Application Developer para crear el enterprise bean con el tipo de bean Bean controlado por mensajes.

    Para obtener un ejemplo de cómo crear la clase de bean controlado por mensajes, consulte la sección de ejemplos de este tema. Para obtener más información, consulte la sección Creación de beans controlados por mensajes del Information Center de Rational Application Developer.

    El resultado de este paso es un bean controlado por mensajes que se puede ensamblar en archivos EAR para despliegue.
  3. Opcional: Utilice el editor del descriptor de despliegue EJB para revisar y, si fuera necesario, cambiar los atributos de despliegue. Puede utilizar el editor del descriptor de despliegue EJB para revisar los atributos de despliegue que ha especificado en el asistente de creación de EJB (como Tipo de transacción y Selector de mensajes) y otros atributos de despliegue predeterminados.

    Si es necesario, puede alterar temporalmente los valores de esos atributos más adelante, después de que la aplicación ya haya exportado a un archivo EAR para su despliegue, tal como se describe en Configuración de los atributos de despliegue para un bean controlado por mensajes con recursos compatibles con JCA 1.5 y Configuración de los atributos de despliegue para beans controlados por mensajes en puertos de escucha.

    1. En el panel de la propiedad, seleccione el separador Bean.
    2. En el panel principal, configure el atributo Tipo de transacción.
      Tipo de transacción
      Este atributo determina si el bean controlado por mensajes gestiona sus propias transacciones o si el contenedor gestiona las transacciones en nombre del bean.
      Bean
      El bean controlado por mensajes gestiona sus propias transacciones.
      Contenedor
      El contenedor gestiona transacciones en nombre del bean.
    3. En Configuración de activación, revise los atributos siguientes:
      acknowledgeMode
      Este atributo determina la forma en que la sesión reconoce los mensajes que recibe.
      Reconocimiento automático
      La sesión reconoce automáticamente la entrega de cada mensaje.
      Reconocimiento correcto de duplicados
      La sesión reconoce vagamente la entrega de mensajes. Es probable que este valor produzca como resultado la entrega de algunos mensajes duplicados si JMS falla, por lo que sólo deben utilizarlo las aplicaciones de consumidor que toleren mensajes duplicados.

      Tal como se define en la especificación de EJB, los clientes no pueden utilizar el método Message.acknowledge() para reconocer mensajes. Si se pasa un valor CLIENT_ACKNOWLEDGE en la llamada a createxxxSession, se reconocerán automáticamente los mensajes en el servidor de aplicaciones y el método Message.acknowledge() no se utiliza.

      Nota:

      El reconocimiento se envía cuando se suprime el mensaje.

      Si tiene un bean controlado por mensaje no transaccional, el sistema puede suprimir el mensaje cuando el bean controlado por mensajes se inicia, o cuando el bean controlado por mensajes finaliza. Si el bean controlado por mensaje genera una excepción y, por consiguiente, no se completa, el sistema realiza una de las acciones siguientes:
      • Si el sistema se ha configurado para que se suprima el mensaje cuando se completa el bean controlado por mensaje, el mensaje se envía a una instancia nueva del bean controlado por mensaje, de modo que el bean tiene otra oportunidad de ser procesado.
      • Si el sistema se configura para suprimir el mensaje cuando se inicia el bean controlado por mensaje, se pierde el mensaje.

      El mensaje se suprime cuando el bean controlado por mensaje se inicia si la calidad de servicio se establece en Mejor esfuerzo no persistente. Para todas las otras calidades de servicio, se suprime el mensaje cuando se completa el bean controlado por mensaje.

      destinationType
      Este atributo determina si el bean de mensaje utiliza un destino de cola o de tema.
      Cola
      El bean controlado por mensajes utiliza un destino de cola.
      Tema
      El bean controlado por mensajes utiliza un destino de tema.
      subscriptionDurability
      Este atributo determina si una suscripción de tema JMS es duradera o no.
      Duradera
      Un suscriptor registra una suscripción duradera con una identidad exclusiva que JMS conserva. Los objetos de suscriptores posteriores con la misma identidad reanudan la suscripción en el estado en que la dejó el suscriptor anterior. Si no hay un suscriptor activo para una suscripción duradera, JMS conserva los mensajes de la suscripción hasta que la suscripción los recibe o hasta que caducan.
      No duradera
      Las suscripciones no duraderas duran el tiempo que dure el objeto del suscriptor. Esto significa que un cliente ve mensajes publicados sobre un tema sólo cuando su suscriptor esté activo. Si el suscriptor no está activo, el cliente no verá los mensajes publicados sobre ese tema.

      Sólo se puede utilizar el suscriptor no duradero en el mismo contexto transaccional (por ejemplo, una transacción global o un contexto de transacción no especificado) que existía cuando se ha creado el suscriptor.

      messageSelector
      Este atributo determina el selector de mensajes JMS que se utiliza para seleccionar qué mensajes recibe el bean de mensaje. Por ejemplo:
      JMSType='car' AND color='blue' AND weight>2500

      La serie del selector puede hacer referencia a campos de la cabecera del mensaje JMS y a campos de las propiedades del mensaje. Los selectores de mensajes no pueden hacer referencia a valores del cuerpo del mensaje.

    4. Especifique los atributos generales de enlace.

      Bajo Enlaces de WebSphere, seleccione la opción Adaptador JCA y especifique los atributos de despliegue de enlaces:

      Nombre JNDI de ActivationSpec
      Este atributo especifica el nombre JNDI de la especificación de activación que se utilice para desplegar este bean controlado por mensajes. Este nombre debe coincidir con el nombre de una especificación de activación que se define en WebSphere Application Server.
      Alias de autorización de ActivationSpec
      Este atributo especifica el nombre de un alias de autenticación utilizado para la autenticación de conexiones con el adaptador de recursos JCA. Un alias de autenticación especifica el ID de usuario y la contraseña que se utiliza para autenticar la creación de una nueva conexión con el adaptador de recursos de JCA.
      Nombre JNDI de destino
      Este atributo especifica el nombre JNDI que utiliza el bean controlado por mensajes para buscar el destino JMS en el espacio de nombres JNDI.
    5. Opcional: Especifique Enlace de destino para habilitar el enlace de mensajes.

      El enlace de mensajes permite el direccionamiento de mensajes a un bean controlado por mensaje específico de un despliegue. El enlace de mensajes permite orquestar el flujo de mensajes entre los componentes de la misma aplicación.

      Para que un bean controlado por mensaje consuma y procese un mensaje, el elemento <message-destination-link> debe definirse en el descriptor de despliegue asociado con el bean controlado por mensaje. El destino identificado por el elemento <message-destination-link> corresponde al destino lógico.

      Cuando <message-destination-ref> incluye un elemento <message-destination-link>, los mensajes se consumen en el destino.

      Para obtener el bean controlado por mensaje a fin de consumir mensajes que se envían a un destino, puede declarar un elemento <message-destination-link> en el descriptor de despliegue o, como alternativa, establézcalo en la especificación de activación.

  4. Ensamble y empaquete la aplicación para el despliegue.

Resultados

El resultado de esta tarea es un archivo EAR, que contiene un bean controlado por mensajes, de la aplicación de empresa que se puede desplegar en WebSphere Application Server.

Ejemplo

En el ejemplo siguiente se muestra cómo crear la clase de beans controlados por mensajes. El código de ejemplo muestra cómo acceder al texto y al MessageID JMS, desde un mensaje JMS de tipo TextMessage. En este ejemplo, en primer lugar, el método onMessage() de un bean controlado por mensajes se utiliza para desempaquete el mensaje de texto entrante y para extraer el texto y el identificador del mensaje; a continuación, se utiliza un método putMessage privado (definido dentro de la misma clase de bean de mensaje) para coloar el mensaje en otra cola.

public void onMessage(javax.jms.Message msg)
{
        String text      = null;
        String  messageID                 = null;

        try
        {
                text = ((TextMessage)msg).getText();

                System.out.println("senderBean.onMessage(), msg text2: "+text);

                //
                // Almacena el ID de mensaje para utilizarlo como valor de correlación
                //
                messageID = msg.getJMSMessageID();

                // Llama a un método privado para transferir el mensaje a otra cola
                putMessage(messageID, text);
        }
        catch  (Exception err)
        {
                err.printStackTrace();
        }
        return;
}

Qué hacer a continuación

Después de desarrollar una aplicación de empresa para utilizar beans controlados por mensaje, configure y despliegue la aplicación. Por ejemplo, defina las especificaciones de activación para los beans controlados por mensajes y, opcionalmente, cambie los atributos de descriptor de despliegue para la aplicación. Para obtener más información, consulte Despliegue de una aplicación de empresa para utilizar beans controlados por mensajes con recursos compatibles con JCA 1.5 y Despliegue de una aplicación de empresa para utilizar beans controlados por mensajes con puertos de escucha.

Icon that indicates the type of topic Task topic



Timestamp icon Last updated: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=tmb_devap
File name: tmb_devap.html