Développement d'une application d'entreprise en vue de l'utilisation de beans gérés par messages (MDB)

Les applications peuvent utiliser des beans gérés par messages en tant que consommateurs de messages asynchrones. Vous déployez un bean géré par message comme un programme d'écoute de messages d'une destination. Le bean géré par messages est appelé par une spécification d'activation ou un programme d'écoute JMS lorsqu'un message arrive à la destination que ce programme d'écoute surveille.

Pourquoi et quand exécuter cette tâche

Le développement d'une application d'entreprise utilisant un bean géré par message est similaire au développement de tout autre bean enterprise, mais un bean géré par message n'a pas d'interface locale ou éloignée.

Vous devez développer un bean géré par message pour déléguer le processus de gestion des messages entrants à un autre bean enterprise, afin d'assurer une séparation claire entre le traitement des messages et le traitement métier. Cela signifie également que le traitement métier peut être appelé soit par l'arrivée de messages entrants, ou soit, par exemple, à partir d'un client WebSphere. Les réponses peuvent être gérées par un autre bean enterprise faisant office de bean émetteur ou dans le bean géré par messages.

Les beans gérés par messages EJB 2.0 ne prennent en charge que la messagerie JMS (Java™ Message Service). Les beans gérés par messages EJB 2.1 et EJB 3 peuvent aussi prendre en charge d'autres types de messageries. Tous les beans gérés par message doivent implémenter l'interface MessageDrivenBean. Pour la messagerie JMS, un bean géré par messages doit également implémenter l'interface du programme d'écoute de messages javax.jms.MessageListener. D'autres adaptateurs de ressources compatibles JCA (Java EE Connector Architecture) peuvent fournir leur propre interface d'écoute de messages à mettre en oeuvre.

Vous pouvez utiliser l'assistant New Enterprise Bean de Rational Application Developer pour créer un bean enterprise de type Bean géré par messages. L'assistant crée des méthodes adaptées au type de bean.

Par convention, la classe de bean géré par message est nommée nomBean, nom étant le nom attribué au bean géré par message, par exemple :
la classe
publique MyJMSppMDBBean met en oeuvre MessageDrivenBean, javax.jms.MessageListener

Un bean géré par message peut être connecté au service de délai EJB pour les notifications d'événements basés sur le temps s'il implémente aussi l'interface javax.ejb.TimedObject et la méthode d'appel de temporisateur void ejbTimeout(Timer). A l'heure planifiée, le conteneur appelle la méthode ejbTimeout du bean géré par message.

La classe de bean géré par message doit définir et mettre en oeuvre les méthodes suivantes :
  • onMessage(message), qui doit respecter les conditions suivantes :
    • La méthode doit avoir un seul argument de type javax.jms.Message.
    • La clause throws ne doit pas définir des exceptions d'application.
    • Si le bean géré par message est configuré pour utiliser les transactions gérées par bean, il doit appeler l'interface javax.transaction.UserTransaction pour définir la portée des transactions. Parce que ces appels se produisent à l'intérieur de la méthode onMessage(), la portée de la transaction n'inclut pas la réception du message initial. Pour plus d'informations, voir la rubrique relative au support de transaction des beans gérés par message.

    Pour traiter le message à l'intérieur de la méthode onMessage() (par exemple, pour transmettre le message vers un autre bean enterprise), utilisez le JMS standard. Cette opération est appelée messagerie gérées par bean.

    Si vous utilisez un adaptateur de ressources compatible JCA avec une interface d'écoute de messages différente, une autre méthode peut se révéler nécessaire en plus de la méthode onMessage(). Pour plus d'informations sur l'interface d'écoute de messages requise, voir la documentation fournie avec l'adaptateur de ressources compatible JCA.

  • ejbCreate()

    Vous devez définir et mettre en oeuvre une méthode ejbCreate pour chaque moyen par lequel vous souhaitez créer une nouvelle instance de bean enterprise.

  • ejbRemove()

    Cette méthode est appelée par le conteneur lorsqu'un client appelle la méthode "remove" dont hérite l'interface locale du bean enterprise de l'interface javax.ejb.EJBHome. Cette méthode doit contenir le code que vous souhaitez exécuter avant qu'une instance de bean enterprise ne soit supprimée du conteneur (et que les données associées ne soient supprimées de la source de données).

  • ejbTimeout(Timer)

    Cette méthode n'est nécessaire que pour la prise en charge des notifications provenant du service temporisateur, et contient la logique métier qui traite les événements basés sur le temps reçus.

Procédure

  1. Créez le projet Application d'entreprise.
  2. Créez la classe de beans gérés par messages. Vous pouvez utiliser l'assistant New Enterprise Bean de Rational Application Developer pour créer le bean enterprise de type Bean géré par messages.

    Par un exemple de création de classe de beans gérés par message, voir la section Exemple de cette rubrique. Pour plus d'informations, voir Création de beans gérés par messages dans le centre de documentation de Rational Application Developer.

    Cette étape a pour résultat un bean géré par message qui peut être assemblé dans un fichier EAR en vue du déploiement.
  3. Facultatif : Utilisez l'éditeur du descripteur de déploiement d'EJB pour revoir et, au besoin, modifier les attributs de déploiement. Vous pouvez utiliser l'éditeur de descripteur de déploiement EJB pour vérifier les attributs de déploiement que vous avez définis dans l'assistant de création d'EJB (tels que le type de transaction et le sélecteur de message) et d'autres attributs de déploiement par défaut.

    Si nécessaire, vous pouvez remplacer les valeurs de ces attributs ultérieurement, une fois l'application d'entreprise exportée dans un fichier EAR pour déploiement, tel que décrit dans Configuration d'attributs de déploiement pour un bean géré par message sur des ressources compatibles JCA 1.5 et Configuration d'attributs de déploiement pour un bean géré par message sur un port d'écoute.

    1. Dans le panneau des propriétés, sélectionnez l'onglet Bean.
    2. Dans le panneau principal, configurez l'attribut Type de transaction.
      Type de transaction
      Cet attribut indique si le bean géré par messages gère ses propres transactions ou si le conteneur gère les transactions pour le compte du bean.
      Bean
      Le bean géré par messages gère ses propres transactions.
      Conteneur
      Le conteneur gère les transactions pour le compte du bean.
    3. Sous Configuration d'activation, vérifiez les attributs suivants :
      acknowledgeMode
      Cet attribut définit la manière dont la session accuse réception des messages qu'elle reçoit.
      Reconnaissance automatique
      La session accuse réception automatiquement des messages.
      Doubles autorisés
      La session accuse réception en différé à la distribution des messages. Ce paramètre risque de distribuer des messages en double en cas de défaillance de JMS. Par conséquent, il ne doit être utilisé que par les utilisateurs qui acceptent les messages en double.

      Conformément à la spécification EJB, les clients ne peuvent pas utiliser la méthode Message.acknowledge() pour accuser réception des messages. Si une valeur CLIENT_ACKNOWLEDGE est transmise dans l'appel createxxxSession, le serveur d'applications accuse automatiquement réception des messages et la méthode Message.acknowledge() n'est pas utilisée.

      Remarque :

      L'accusé de réception est envoyé quand le message est supprimé.

      Dans le cas d'un bean géré par message non transactionnel, le système supprime le message au démarrage ou à la fin du bean géré par message. Si le bean géré par message génère une exception et ne se termine pas, le système exécute l'une des actions suivantes :
      • Si le système est configuré pour supprimer le message à la fin du bean, le message est envoyé à une nouvelle instance du bean géré par message en vue de son traitement.
      • Si le système est configuré pour supprimer le message lors du démarrage du bean géré par message, le message est perdu.

      Le message est supprimé au démarrage du bean géré par message si la qualité de service est définie sur Non persistant - Tentatives. Pour toutes les autres qualités de service, le message est supprimé à la fin de l'exécution du bean géré par message.

      destinationType
      Cet attribut indique si le bean géré par message utilise une file d'attente ou une rubrique comme destination.
      File d'attente
      Le bean géré par message utilise une destination de type file d'attente.
      Rubrique
      Le bean géré par message utilise une destination de type rubrique.
      subscriptionDurability
      Cet attribut indique si un abonnement à une rubrique JMS est durable ou non.
      Durable
      Un abonné enregistre un abonnement durable avec une identité unique qui est retenue par JMS. Les objets abonnés suivants ayant la même identité reprennent l'abonnement dans l'état où l'abonné précédent l'a laissé. S'il n'existe aucun abonné actif pour un abonnement durable, JMS conserve les messages d'abonnement jusqu'à leur réception par l'abonnement ou jusqu'à leur expiration.
      Non durable
      Les abonnements non durables ont la durée de leur objet abonné. Un client voit uniquement les messages publiés dans une rubrique lorsque l'abonné est actif. Si l'abonné n'est pas actif, le client manque des messages publiés dans cette rubrique.

      Un abonné non durable ne peut être utilisé que dans le contexte de transaction (par exemple, une transaction globale ou un contexte de transaction non indiqué) qui existait lors de la création de l'abonné.

      messageSelector
      Cet attribut indique le sélecteur de messages JMS à utiliser pour déterminer les messages que reçoit le bean géré par message. Par exemple :
      JMSType='car' AND color='blue' AND weight>2500

      La chaîne du sélecteur peut faire référence aux zones de l'en-tête du message JMS et aux zones des propriétés du message. Les sélecteurs de messages ne peuvent pas faire référence à des valeurs liées au corps du message.

    4. Spécifiez les attributs de déploiement des liaisons.

      Sous Liaisons WebSphere, sélectionnez l'option Adaptateur JCA et spécifiez les attributs de déploiement des liaisons :

      Nom JNDI de la spécification d'activation
      Cet attribut définit le nom JNDI de la spécification d'activation utilisée pour déployer le bean géré par messages. Ce nom doit correspondre au nom d'une spécification d'activation que vous définissez dans WebSphere Application Server.
      Alias d'autorisation de la spécification d'activation
      Cet attribut définit le nom d'un alias d'authentification utilisé pour l'authentification des connexions auprès de l'adaptateur de ressource JCA. Un alias d'authentification indique l'ID utilisateur et le mot de passe utilisés pour authentifier la création d'une connexion auprès de l'adaptateur de ressources JCA.
      Nom JNDI de destination
      Cet attribut définit le nom JNDI utilisé par le bean géré par messages pour rechercher la destination JMS dans l'espace de nom JNDI.
    5. Facultatif : Indiquez Destination Link pour activer Message Linking.

      Message Linking permet le routage des messages vers un bean géré par message spécifique dans un déploiement. Il permet d'orchestrer le flux des messages entre les composants dans une même application.

      Pour qu'un message puisse être consommé et traité par un bean géré par message, l'élément <message-destination-link> doit être défini dans le descripteur de déploiement associé au bean géré par message. La destination identifiée par l'élément <message-destination-link> correspond à la destination logique.

      Lorsque <message-destination-ref> inclut un élément <message-destination-link>,les messages sont consommés à cette destination.

      Pour que le bean géré par message utilise des messages envoyés à une destination, vous pouvez déclarer un élément <message-destination-link> dans le descripteur de déploiement ou le définir dans la spécification d'activation.

  4. Assemblage et mise en forme de l'application en vue de son déploiement.

Résultats

Le résultat de cette tâche est un fichier EAR contenant le bean géré par message de l'application d'entreprise pouvant être déployé dans WebSphere Application Server.

Exemple

L'exemple suivant montre comment créer la classe de beans gérés par message. L'extrait de code suivant montre comment accéder au texte et au JMS MessageID, à partir d'un message JMS de type TextMessage. Dans cet exemple, tout d'abord, la méthode onMessage() d'un bean géré par message décomprime le message texte entrant et extrait le texte et l'identificateur de message, puis appelle une méthode putMessage privée (définie dans la même classe de bean message) pour placer le message dans une autre file d'attente:

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

                //
                // store the message id to use as the Correlator value
                //
                messageID = msg.getJMSMessageID();

                // Call a private method to put the message onto another queue
                putMessage(messageID, text);
        }
        catch  (Exception err)
        {
                err.printStackTrace();
        }
        return;
}

Que faire ensuite

Après avoir développé une application d'entreprise pour utiliser des beans gérés par messages, configurez et déployez l'application. Par exemple, définissez les spécifications d'activation des beans gérés par messages et, éventuellement, changez les attributs de descripteur de déploiement de l'application. Pour plus d'informations, voir Déploiement d'une application d'entreprise pour utiliser des beans gérés par messages avec des ressources compatibles JCA 1.5 et Déploiement d'une application d'entreprise pour utiliser des beans gérés par message avec des ports d'écoute.

Icône indiquant le type de rubrique Rubrique de tâche



Icône d'horodatage Dernière mise à jour: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=tmb_devap
Nom du fichier : tmb_devap.html