IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Java EE Discussion :

[2.1] EJB Driven Message et TimedObject [EJB MDB]


Sujet :

Java EE

  1. #1
    Membre confirmé Avatar de anitshka
    Inscrit en
    Mai 2004
    Messages
    624
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 624
    Points : 605
    Points
    605
    Par défaut [2.1] EJB Driven Message et TimedObject
    bonjour,

    j'essaye d'implémenter un petit exemple de MD EJB (en 2.1) trouvé dans ma bibliothèque ( -> J2EE 1.4 chap 11):

    En gros j'ai un ejbSession qui instancie un timer qui m'envoie 5 secondes apres le démarrage (puis toutes les 10 secondes) un message. J'ai un MD EJB de l'autre coté qui est censé recevoir et m'afficher dans ma console le message envoyé.

    mon ejb session :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public interface TimeIt extends EJBObject {
        public void startTimer() throws RemoteException;                
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public interface TimeItHome extends EJBHome {
        public TimeIt create() throws CreateException, RemoteException;
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    public class TimeItBean implements SessionBean, TimedObject {
     
        public void ejbCreate() throws CreateException {
            System.out.println("ejbCreate");
        }
     
        private SessionContext ctx;
     
        public void startTimer() {
            System.out.println("start Timer");
            TimerService timerService = ctx.getTimerService();
            Timer timer = timerService.createTimer(5000, 10000, "timer");
        }
     
        public void ejbActivate() throws EJBException {
            System.out.println("ejbActivate");
        }
     
        public void ejbPassivate() throws EJBException {
            System.out.println("ejbPassivate");
        }
     
        public void ejbRemove() throws EJBException {
            System.out.println("ejbRemove");
        }
     
        public void setSessionContext(SessionContext sessionContext) throws EJBException {
            System.out.println("setContext");
            ctx = sessionContext;
        }
     
        public void ejbTimeout(Timer timer) {
            System.out.println("ejbTimeout");
            QueueConnection queueConnection = null;
            try {
                InitialContext jndiContext = new InitialContext();
                QueueConnectionFactory queueConnectionFactory = (QueueConnectionFactory) jndiContext.lookup("jms/QueueConnectionFactory");
                Queue queue = (Queue) jndiContext.lookup("jms/LogWriterQueue");
                queueConnection = queueConnectionFactory.createQueueConnection();
                QueueSession queueSession = queueConnection.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
                QueueSender queueSender = queueSession.createSender(queue);
                TextMessage message = queueSession.createTextMessage();
                SimpleDateFormat sdf = new SimpleDateFormat("yyyy.MM.dd 'a' HH:mm:ss.SSS");
                message.setText("entree log, date heure : " + sdf.format(new Date()));
                queueSender.send(message);
            }
            catch (Exception e) {
                System.out.println("Exception dans le msg : " + e.toString());
                e.printStackTrace();
            }
            finally {
                if (queueConnection != null) {
                    try {
                        queueConnection.close();
                    }
                    catch (Exception e) {
                    }
                }
            }
        }
    }
    et mon ejb Message Driven :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    public class MessageWriterBean implements MessageDrivenBean, MessageListener {
     
        public void onMessage(Message message) {
            System.out.println("onMessage");
            TextMessage msg = null;
     
            try {
                if (message instanceof TextMessage) {
                    msg = (TextMessage) message;
                    System.out.println("Message reçu : " + msg.getText());
                } else {
                    System.out.println("Message reçu de type : "
                            + message.getClass().getName() + " ==> ignore !");
                }
            }
            catch (Throwable te) {
                te.printStackTrace();
            }
        }
     
        public void ejbCreate() {}
     
        public void ejbRemove() {}
     
        public void setMessageDrivenContext(MessageDrivenContext mdContext) {}
    }
    Or je n'arrive pas a faire mes fichiers de configurations pour mon MessageWriterBean:

    ejb-xml.jar:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    <ejb-jar>
        <enterprise-beans>
     
            <session>
                <ejb-name>TimeItBean</ejb-name>
                <home>bean.timer.TimeItHome</home>
                <remote>bean.timer.TimeIt</remote>
                <ejb-class>bean.timer.TimeItBean</ejb-class>
                <session-type>Stateless</session-type>
                <transaction-type>Bean</transaction-type>
            </session>
     
            <message-driven>
                <ejb-name>MessageWriterBeanEJB</ejb-name>
                <ejb-class>bean.msg.MessageWriterBean</ejb-class>
                <transaction-type>Container</transaction-type>
                <resource-ref>
                    <res-ref-name>QueueConnectionFactory</res-ref-name>
                    <res-type>javax.jms.QueueConnectionFactory</res-type>
                    <res-auth>Container</res-auth>
                    <res-sharing-scope>Shareable</res-sharing-scope>
                </resource-ref>
                <resource-ref>
                    <res-ref-name>PhysicalQueue</res-ref-name>
                    <res-type>javax.jms.Queue</res-type>
                    <res-auth>Container</res-auth>
                    <res-sharing-scope>Shareable</res-sharing-scope>
                </resource-ref>
            </message-driven>
     
        </enterprise-beans>
    </ejb-jar>
    mon jboss.xml :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    <jboss>
        <enterprise-beans>
     
            <session>
                <ejb-name>TimeItBean</ejb-name>
                <jndi-name>ejb/timer.TimeIt</jndi-name>
            </session>
     
            <message-driven>
                <ejb-name>MessageWriterBeanEJB</ejb-name>
                <destination-jndi-name>jms/LogWriterQueue</destination-jndi-name>
                <resource-ref>
                    <res-ref-name>QueueConnectionFactory</res-ref-name>
                    <jndi-name>jms/QueueConnectionFactory</jndi-name>
                </resource-ref>
                <resource-ref>
                    <res-ref-name>PhysicalQueue</res-ref-name>
                    <jndi-name>jms/LogWriterQueue</jndi-name>
                </resource-ref>
            </message-driven>
     
     
        </enterprise-beans>
    </jboss>
    et j'ai un problème de jndi quelque part... sauf que je ne sais pas ou ...
    quelqu'un aurai une idée ?

    d'avance !
    Ni Dieu, ni maître, mais des frites bordel!

  2. #2
    Membre confirmé Avatar de anitshka
    Inscrit en
    Mai 2004
    Messages
    624
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 624
    Points : 605
    Points
    605
    Par défaut
    j'ai changer mon ejb-jar.xml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
            <message-driven>
                <ejb-name>MessageWriterBeanEJB</ejb-name>
                <ejb-class>bean.msg.MessageWriterBean</ejb-class>
                <transaction-type>Container</transaction-type>
                <message-destination-type>javax.jms.Queue</message-destination-type>
                <message-destination-link></message-destination-link>
                <resource-ref>
                    <res-ref-name>jms/QCF</res-ref-name>
                    <res-type>javax.jms.QueueConnectionFactory</res-type>
                    <res-auth>Container</res-auth>
                </resource-ref>
            </message-driven>
    et mon jboss.xml :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
            <message-driven>
                <ejb-name>MessageWriterBeanEJB</ejb-name>
                <destination-jndi-name>queue/Queue</destination-jndi-name>
                <resource-ref>
                    <res-ref-name>jms/QCF</res-ref-name>
                    <jndi-name>QueueConnectionFactory</jndi-name>
                </resource-ref>
            </message-driven>
    mon ejbTimout ressembla mainteannt a ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
        public void ejbTimeout(Timer timer) {
            System.out.println("ejbTimeout");
            QueueConnection queueConnection = null;
            try {
                InitialContext jndiContext = new InitialContext();
                QueueConnectionFactory queueConnectionFactory = (QueueConnectionFactory) jndiContext.lookup("QueueConnectionFactory");
                Queue queue = (Queue) jndiContext.lookup("queue/Queue");
                queueConnection = queueConnectionFactory.createQueueConnection();
                QueueSession queueSession = queueConnection.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
                QueueSender queueSender = queueSession.createSender(queue);
                TextMessage message = queueSession.createTextMessage();
                SimpleDateFormat sdf = new SimpleDateFormat("yyyy.MM.dd 'a' HH:mm:ss.SSS");
                message.setText("entree log, date heure : " + sdf.format(new Date()));
                queueSender.send(message);
            }
            catch (Exception e) {
                System.out.println("Exception dans le msg : " + e.toString());
                e.printStackTrace();
            }
            finally {
                if (queueConnection != null) {
                    try {
                        queueConnection.close();
                    }
                    catch (Exception e) {
                    }
                }
            }
        }
    Et tout fonctionne

    Ni Dieu, ni maître, mais des frites bordel!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. EJB Message Driven Bean
    Par Malatok dans le forum Java EE
    Réponses: 4
    Dernier message: 29/06/2012, 18h00
  2. JBoss et Message Driven Bean - ConnectionFactory
    Par GrooveRage dans le forum Wildfly/JBoss
    Réponses: 11
    Dernier message: 04/02/2009, 18h26
  3. JSP+JMS+EJB Envoie de Message .
    Par ForHuman dans le forum Servlets/JSP
    Réponses: 0
    Dernier message: 16/01/2009, 16h51
  4. Réponses: 2
    Dernier message: 21/02/2007, 23h31
  5. [EJB] [JBoss] EJB ne se déploie pas - pas de message d'erreur
    Par Sapience dans le forum Wildfly/JBoss
    Réponses: 1
    Dernier message: 10/01/2006, 16h41

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo