begin process at 2008 07 21 01:46:00
1 213 544 membres
13 nouveaux aujourd'hui
14 167 membres club

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 : 6 683 fois

Note :
Aucune note

Commentaire sur cette source (0)
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
    Aucun commentaire pour le moment.

Ajouter un commentaire

Pub



Appels d'offres

Dessins techniques
Budget : 60€
Animation Flash - Doma...
Budget : 370€
Application flash medi...
Budget : 1 000€

CalendriCode

Juillet 2008
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

VS Express FR Gratuit !

VS Express en français et 100% gratuit !

Boutique

Boutique de goodies CodeS-SourceS