Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

LES EJBS JMS


Information sur le tutorial

Catégorie :JavaBeans Date de création : 23/04/2007 11:10:45 Vu : 11 847 fois

Note :
Aucune note

Commentaire sur cette source (2)
Ajouter un commentaire et/ou une note

Description

ce tutorial donne un exemple d'implémentation des EBJs JMS

Introduction
Contenu de ejb-jar.xml
Contenu de weblogic-ejb-jar.xml
La classe messageManager
La classe ejb-JMS
configuration de la console WEBLOGIC

Tutorial

Introduction
Les Message-driven Beans fournissent des modes d'accès asynchrones comme spéfiédans les spécifications EJB 2.0.
De plus, il est possible pour tout les EJB ( session, entity, ou Message-driven ) d'envoyer ou recevoir de façon  synchrone des messages.Pour cela en plus de l'implémentation, il faut penser paramétrer ses Queues et Factory sur le serveur d'application ( ici : Weblogic 8.1) .

 

ejb-Jar contenu de ejb-jar.xml :

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE ejb-jar PUBLIC "-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 2.0//EN" "http://java.sun.com/dtd/ejb-jar_2_0.dtd">
<ejb-jar>
 <display-name>Clint EJB</display-name>
 <enterprise-beans>
  <message-driven>
   <display-name>AlerteMessageBean</display-name>
   <ejb-name>AlerteMessageBean</ejb-name>
   <ejb-class>fr.zieunoir.ejb.AlerteMessageBean</ejb-class>
   <transaction-type>Container</transaction-type>
   <message-driven-destination>
    <destination-type>javax.jms.Queue</destination-type> 
   </message-driven-destination>
  </message-driven>
 </enterprise-beans>
 <assembly-descriptor>
  <container-transaction>
            <method>
                <description />
                <ejb-name>AlerteMessageBean</ejb-name>
                <method-name>*</method-name>
            </method>
            <trans-attribute>NotSupported</trans-attribute>
        </container-transaction>
 </assembly-descriptor>
</ejb-jar>

weblogic-ejb-jar contenu de weblogic-ejb-jar.xml

<weblogic-enterprise-bean>
 <ejb-name>AlerteMessageBean</ejb-name>
 <message-driven-descriptor>
  <pool>
   <max-beans-in-free-pool>5</max-beans-in-free-pool>
   <initial-beans-in-free-pool>5</initial-beans-in-free-pool>
  </pool>
  <destination-jndi-name>AlerteInfoQueue</destination-jndi-name>
  <connection-factory-jndi-name>AlerteInfoFactory</connection-factory-jndi-name>
 </message-driven-descriptor>
</weblogic-enterprise-bean>

messageManager La classe messageManager fait l'envoi des messages.

package fr.zieunoir.ejb;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import java.util.Properties;

import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.Queue;
import javax.jms.QueueConnection;
import javax.jms.QueueConnectionFactory;
import javax.jms.QueueSender;
import javax.jms.QueueSession;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;


/**
 * Titre :
 * Description :
 * Copyright : Copyright (c) 2003
 * Soci? :
 * @author non attribuable
 * @version 1.0
 */

public final class MessageManager {
    protected Static Log log = LogFactory.getLog(
            "fr.zieunoir.ejb.MessageManager");

    /** services */
    private Static String alerteQueue = null;
    private Static String alerteFactory = null;
    private Static MessageManager instance = null;
    private QueueConnectionFactory fatyinst = null;

    /**
     * Constructeur privé    */

    private MessageManager() {
        alerteQueue = "AlerteInfoQueue";
        alerteFactory = "AlerteInfoFactory";
    }

    /**
     * Retourne l'instance unique du Manager
     * @return
     */

    public Static synchronized MessageManager getInstance() {
        if (instance == null) {
            instance = new MessageManager();
        }

        return instance;
    }

    /**
      * Envoi un message avec des param?es
      * @param typeAlerteAEnvoyer = sur/sous conso, depassement, energie reactive
      */

    public void sendMessage(String typeAlerteAEnvoyer) {
        QueueConnection cnx = null;
        QueueSession session = null;
        QueueSender sender = null;
        Queue queue = null;
        Message message = null;

        cnx = getConnexion();

        if (cnx != null) {
            try {
                session = getSession(cnx);
                queue = getQueue();
                sender = session.createSender(queue);
                message = session.createMessage();
                message.setStringProperty("TYPE_ALERTE", typeAlerteAEnvoyer);
                sender.send(message);
            } catch (JMSException ex) {
                log.error(ex);
            } finally {
                try {
                    if (sender != null) {
                        sender.close();
                    }

                    if (session != null) {
                        session.close();
                    }

                    if (cnx != null) {
                        cnx.close();
                    }
                } catch (JMSException ex) {
                    log.error(ex);
                }
            }
        }
    }

    /**
     * retrouve un Factory pour l'instance
     * @return QueueConnectionFactory 
     */

    private QueueConnectionFactory getFactory() {
        QueueConnectionFactory factory = null;
        Properties env = new Properties();
        env.put(Context.INITIAL_CONTEXT_FACTORY,
            "weblogic.jndi.WLInitialContextFactory");
        env.put(Context.PROVIDER_URL, "t3://localhost:7001");

        try {
            Context ctx = new InitialContext(env);
            factory = (QueueConnectionFactory) ctx.lookup(alerteFactory);
        } catch (NamingException ex) {
            log.error(ex);
        }

        return factory;
    }

    /**
     * Récupération de la connexion
     * @return QueueConnection 
     */

    private QueueConnection getConnexion() {
        QueueConnection cnx = null;

        if (fatyinst == null) {
            fatyinst = getFactory();
        }

        if (fatyinst != null) {
            try {
                cnx = fatyinst.createQueueConnection();

                //cnx = fatyinst.();
            } catch (JMSException ex) {
                log.error(ex);
            }
        }

        return cnx;
    }

    /**
     * Récupération d'une session
     * @return QueueSession 
     */

    private QueueSession getSession(QueueConnection pcnx) {
        QueueSession session = null;

        if (pcnx != null) {
            try {
                session = pcnx.createQueueSession(false,
                        QueueSession.AUTO_ACKNOWLEDGE);
            } catch (JMSException ex) {
                log.error(ex);
            }
        }

        return session;
    }

    /**
     * Récuréation d'une queue dans l'annuaire
     * @return Queue
     */

    private Queue getQueue() {
        Queue queue = null;
        Properties env = new Properties();

        env.put(Context.INITIAL_CONTEXT_FACTORY,
            "weblogic.jndi.WLInitialContextFactory");
        env.put(Context.PROVIDER_URL, "t3://localhost:7001");

        try {
            Context ctx = new InitialContext(env);
            queue = (Queue) ctx.lookup(alerteQueue);
        } catch (NamingException ex) {
            log.error(ex);
        }

        return queue;
    }
}

ejb-JMS La classe JMS qui fait le traitement des messages.

package fr.zieunoir.ejb;

import fr.zieunoir.dao.valerte.ValerteBean;
import fr.zieunoir.dao.valerte.ValerteManager;
import fr.zieunoir.service.ServiceLocatorException;

import org.apache.log4j.Logger;

import weblogic.ejb.GenericMessageDrivenBean;

import java.sql.SQLException;

import javax.ejb.MessageDrivenBean;
import javax.ejb.MessageDrivenContext;

import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageListener;


//to be done creer une queue jms et la configurer

/**
 * @ejbgen:message-driven
 *   ejb-name = AlerteMessageBean
 *   destination-jndi-name = jms.DepecheJMSDestination
 *   destination-type = javax.jms.Queue
 *
 * @ejbgen:ejb-ref type="Session"        remote="DataManipSession"
 *     home="DataManipSessionHome"
 *     jndi-name="ejb.DataManipSessionRemoteHome"
 *     name="DataManipSession"
 *
 */

public class AlerteMessageBean extends GenericMessageDrivenBean
    implements MessageDrivenBean, MessageListener {


    private Static final long serialVersionUID = 1L;
    private transient Logger log = Logger.getLogger(AlerteMessageBean.class);
    private MessageDrivenContext messageDrivenContext = null;

    /**
     * Mode appell??a r?ption d'un message JMS,
     * d?enche la mise ?our du canal de d?che spacifi?ans le message JMS
     * @param Message le message JMS re?
     */

    public void onMessage(Message msg) {
        ValerteManager man = null;

        try {
            man = ValerteManager.getInstance();
        } catch (ServiceLocatorException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }

        ValerteBean[] listeUser = null;
        String sujetMail = null;
        String urlJsp = null;

        try {
            final String typeAlerteAEnvoyer = msg.getStringProperty(
                    "TYPE_ALERTE");

            if ("1".equals(typeAlerteAEnvoyer)) {
                listeUser = man.loadDetailAlerte1();
                sujetMail = "ZieunoirJMS : ";
                urlJsp = "/jsp/externe/mail_mailAlerte.jsp";
            } else if ("2".equals(typeAlerteAEnvoyer)) {
                listeUser = man.loadDetailAlerte2();
                sujetMail = "ZieunoirJMS : ";
                urlJsp = "/jsp/externe/mail_mailPenalite.jsp";
            } else if ("3".equals(typeAlerteAEnvoyer)) {
                listeUser = man.loadDetailAlerte3();
                sujetMail = "ZieunoirJMS : ";
                urlJsp = "/jsp/externe/mail_mailEnergie.jsp";
            }

            log.debug("sujetmail =" + sujetMail + "url JSP =" + urlJsp);
        } catch (JMSException e) {
            log.error("Bad message type " + e);
            log.error(e);
        } catch (SQLException e) {
            log.error("Bad message type " + e);
            log.error(e);
        }
    }

    public void ejbCreate() {
    }

    /**
     * récupérattion du contexte jndi et message driven
     * Methode de callback
     */

    public void setMessageDrivenContext(
        MessageDrivenContext messageDrivenContext) {
        this.messageDrivenContext = messageDrivenContext;
    }
}

weblogic Configuration de la console WEBLOGIC

penser à déclarer une Factory et une Queue sur la console weblogic dans les services

23 avril 2007 11:14:18 :
probleme d'accent sur le texte désolé.
23 avril 2007 11:27:30 :
désolé encore un probleme d'indentation
signaler à un administrateur
Commentaire de verdy_p le 26/04/2009 16:58:14

Aucun intérêt pratique. C'est du code brut sans commentaire, sans même une démo utilisable et certainement pas un tutoriel...
Rien ne démontre l'intérêt des JMS ici. C'est juste une collections d'appels d'API sans que rien ne vienne expliquer l'organisation ni même ce que c'est sensé faire.

signaler à un administrateur
Commentaire de anadeveloppeur le 10/06/2009 16:51:33

C'est bizarre que je ne trouve rien d'intéressant à propos de javabean dans ce site :(

SimO TM

Ajouter un commentaire



Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,109 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.