begin process at 2010 03 22 05:21:35
  Trouver un code source :
 
dans
 
Accueil > 

Tutoriels

 > 

JavaBeans

 > LES EJBS JMS

LES EJBS JMS


 Information sur le tutoriel

Note :
Aucune 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

 Historique

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

Commentaires

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.

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

Commentaire de lutfi2 le 19/02/2010 17:52:46

rein de specification

 Ajouter un commentaire




Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mars 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

 
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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,125 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales