[jboss-cvs] jboss-docs/jbossas/j2ee/examples/src/main/org/jboss/book/jms/ex2 ...

Norman Richards norman.richards at jboss.com
Wed Nov 1 13:14:14 EST 2006


  User: nrichards
  Date: 06/11/01 13:14:14

  Added:       jbossas/j2ee/examples/src/main/org/jboss/book/jms/ex2    
                        SendRecvClient.java TextMDB.java ejb-jar.xml
                        jboss.xml
  Log:
  modified for j2ee guide
  
  Revision  Changes    Path
  1.1      date: 2006/11/01 18:14:14;  author: nrichards;  state: Exp;jboss-docs/jbossas/j2ee/examples/src/main/org/jboss/book/jms/ex2/SendRecvClient.java
  
  Index: SendRecvClient.java
  ===================================================================
  package org.jboss.book.jms.ex2;
  
  import javax.jms.JMSException;
  import javax.jms.Message;
  import javax.jms.MessageListener;
  import javax.jms.Queue;
  import javax.jms.QueueConnection;
  import javax.jms.QueueConnectionFactory;
  import javax.jms.QueueReceiver;
  import javax.jms.QueueSender;
  import javax.jms.QueueSession;
  import javax.jms.TextMessage;
  import javax.naming.InitialContext;
  import javax.naming.NamingException;
  
  import EDU.oswego.cs.dl.util.concurrent.CountDown;
  
  /** 
   * A complete JMS client example program that sends N TextMessages to
   * a Queue B and asynchronously receives the messages as modified by
   * TextMDB from Queue A.
   * 
   * @author  Scott.Stark at jboss.org
   * @version $Revision: 1.1 $
   */
  public class SendRecvClient
  {
      static final int N = 10;
      static CountDown done = new CountDown(N);
      QueueConnection conn;
      QueueSession session;
      Queue queA;
      Queue queB;
      
      public static class ExListener 
          implements MessageListener
      {
          public void onMessage(Message msg)
          {
              done.release();
              TextMessage tm = (TextMessage) msg;
              try {
                  System.out.println("onMessage, recv text=" + 
                                     tm.getText());
              } catch(Throwable t) {
                  t.printStackTrace();
              }
          }
      }
      
      public void setupPTP()
          throws JMSException, 
                 NamingException
      {
          InitialContext iniCtx = new InitialContext();
          Object tmp = iniCtx.lookup("UIL2ConnectionFactory");
          QueueConnectionFactory qcf = (QueueConnectionFactory) tmp;
          
          conn = qcf.createQueueConnection();
          queA = (Queue) iniCtx.lookup("queue/A");
          queB = (Queue) iniCtx.lookup("queue/B");
          session = conn.createQueueSession(false,
                                            QueueSession.AUTO_ACKNOWLEDGE);
          conn.start();
      }
      
      public void sendRecvAsync(String textBase)
          throws JMSException,
                 NamingException,
                 InterruptedException
      {
          System.out.println("Begin sendRecvAsync");
          // Setup the PTP connection, session
          setupPTP();
  
          // Set the async listener for queA
          QueueReceiver recv = session.createReceiver(queA);
          recv.setMessageListener(new ExListener());
  
          // Send a few text msgs to queB
          QueueSender send = session.createSender(queB);
          for(int m = 0; m < N; m ++) {
              TextMessage tm = session.createTextMessage(textBase + "#" + m);
              tm.setJMSReplyTo(queA);
              send.send(tm);
              System.out.println("sendRecvAsync, sent text=" + tm.getText());
          }
          System.out.println("End sendRecvAsync");
      }
      
      public void stop()
          throws JMSException
      {
          conn.close();
      }
    
      public static void main(String args[]) 
          throws Exception
      {
          System.out.println("Begin SendRecvClient, now="+System.currentTimeMillis());
          SendRecvClient client = new SendRecvClient();
          client.sendRecvAsync("A text msg");
          client.done.acquire();
          client.stop();
          System.exit(0);
          System.out.println("End SendRecvClient");
      }
  }
  
  
  
  1.1      date: 2006/11/01 18:14:14;  author: nrichards;  state: Exp;jboss-docs/jbossas/j2ee/examples/src/main/org/jboss/book/jms/ex2/TextMDB.java
  
  Index: TextMDB.java
  ===================================================================
  package org.jboss.book.jms.ex2;
  
  import javax.ejb.MessageDrivenBean;
  import javax.ejb.MessageDrivenContext;
  import javax.ejb.EJBException;
  import javax.jms.JMSException;
  import javax.jms.Message;
  import javax.jms.MessageListener;
  import javax.jms.Queue;
  import javax.jms.QueueConnection;
  import javax.jms.QueueConnectionFactory;
  import javax.jms.QueueSender;
  import javax.jms.QueueSession;
  import javax.jms.TextMessage;
  import javax.naming.InitialContext;
  import javax.naming.NamingException;
  
  import org.apache.log4j.Logger;
  
  /**
   * An MDB that transforms the TextMessages it receives and send the
   * transformed messages to the Queue found in the incoming message
   * JMSReplyTo header.
   *
   * @author  Scott.Stark at jboss.org
   * @version $Revision: 1.1 $
   */
  public class TextMDB 
      implements MessageDrivenBean, 
                 MessageListener
  {
      private static Logger log = Logger.getLogger(TextMDB.class);
      
      private MessageDrivenContext ctx = null;
      private QueueConnection conn;
      private QueueSession session;
      
      public TextMDB()
      {
          log.info("TextMDB.ctor, this=" + hashCode());
          log.debug("ctor.StackTrace", new Throwable("ctor"));
      }
      
      public void setMessageDrivenContext(MessageDrivenContext ctx)
      {
          this.ctx = ctx;
          log.info("TextMDB.setMessageDrivenContext, this=" + hashCode());
      }
   
      public void ejbCreate()
      {
          log.info("TextMDB.ejbCreate, this="+hashCode());
          try {
              setupPTP();
          } catch(Exception e) {
              log.error("Failed to init TextMDB", e);
              throw new EJBException("Failed to init TextMDB", e);
          }
      }
  
      public void ejbRemove()
      {
          log.info("TextMDB.ejbRemove, this=" + hashCode());
          ctx = null;
          try {
              if (session != null) {
                  session.close();
              }
              if (conn != null) {
                  conn.close();
              }
          } catch(JMSException e) {
              log.error("ejbRemove error", e);
          }
      }
      
      public void onMessage(Message msg)
      {
          log.info("TextMDB.onMessage, this="+hashCode());
          try {
              TextMessage tm = (TextMessage) msg;
              String text = tm.getText() + "processed by: " + hashCode();
              Queue dest = (Queue) msg.getJMSReplyTo();
              sendReply(text, dest);
          } catch(Throwable t) {
              log.error("onMessage error", t);
          }
      }
  
      private void setupPTP()
          throws JMSException, 
                 NamingException
      {
          InitialContext iniCtx = new InitialContext();
          Object tmp = iniCtx.lookup("java:comp/env/jms/QCF");
          QueueConnectionFactory qcf = (QueueConnectionFactory) tmp;
          conn = qcf.createQueueConnection();
          session = conn.createQueueSession(false,
                                            QueueSession.AUTO_ACKNOWLEDGE);
          conn.start();
      }
      
      private void sendReply(String text, Queue dest)
          throws JMSException
      {
          log.info("TextMDB.sendReply, this=" + hashCode() +
                   ", dest=" + dest);
  
          QueueSender sender = session.createSender(dest);
          TextMessage tm     = session.createTextMessage(text);
  
          sender.send(tm);
          sender.close();
     }
  
  }
  
  
  
  1.1      date: 2006/11/01 18:14:14;  author: nrichards;  state: Exp;jboss-docs/jbossas/j2ee/examples/src/main/org/jboss/book/jms/ex2/ejb-jar.xml
  
  Index: ejb-jar.xml
  ===================================================================
  <?xml version="1.0"?>
  <!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>
      <enterprise-beans>
          <message-driven>
              <ejb-name>TextMDB</ejb-name>
              <ejb-class>org.jboss.book.jms.ex2.TextMDB</ejb-class>
              <transaction-type>Container</transaction-type>
              <acknowledge-mode>AUTO_ACKNOWLEDGE</acknowledge-mode>
              <message-driven-destination>
                  <destination-type>javax.jms.Queue</destination-type>
              </message-driven-destination>
              <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>
      </enterprise-beans>
  </ejb-jar>
  
  
  
  1.1      date: 2006/11/01 18:14:14;  author: nrichards;  state: Exp;jboss-docs/jbossas/j2ee/examples/src/main/org/jboss/book/jms/ex2/jboss.xml
  
  Index: jboss.xml
  ===================================================================
  <?xml version="1.0"?>
  <jboss>
      <enterprise-beans>
          <message-driven>
              <ejb-name>TextMDB</ejb-name>
              <destination-jndi-name>queue/B</destination-jndi-name>
              <resource-ref>
                  <res-ref-name>jms/QCF</res-ref-name>
                  <jndi-name>ConnectionFactory</jndi-name>
              </resource-ref>
          </message-driven>
      </enterprise-beans>
  </jboss>
  
  
  



More information about the jboss-cvs-commits mailing list