<< 配置Weblogic 9.2 JMS (Configuring Weblogic JMS) | 首页 | 我收藏的链接(20) >>

JMS 代码示例

The previous post described how to setup a Queue in Weblogic Server. This post shows the code necessary to run a Simple Messaging example using a servlet and Message Driven Bean. You can always implement an message listener instead of using a Message Driven Bean, but using MDBs is much cleaner and easier. Follow these steps to run the example
  1. Setup XDoclet
    1. Download XDoclet from here, and extract it.
    2. In Eclipse->Window->preferences, select xdoclet and set the Xdoclet home to the appropriate directory.
  2. Create the Message Driven Bean
    1. Create an EJB project in Eclipse.
    2. In the J2EE perspective, right-click on the Deployment descriptor and create a new Message Driven Bean. Eclipse generates the required classes and the ejb-jar.xml file with the new MDB definition in it. Modify the Bean to look like this
      public class MessagingExampleBean implements javax.ejb.MessageDrivenBean, javax.jms.MessageListener {
      private javax.ejb.MessageDrivenContext messageContext = null;
      public void setMessageDrivenContext(javax.ejb.MessageDrivenContext messageContext) throws javax.ejb.EJBException {
       this.messageContext = messageContext;
      }
      public void ejbCreate() {
      }
      public void ejbRemove() {
         messageContext = null;
      }
      public MessagingExampleBean() {
      }
      public void onMessage(javax.jms.Message message) {
       System.out.println("Message Driven Bean got message " + message);
      }
      }
      Add the following definitions to the ejb-jar.xml
      <?xml version="1.0" encoding="UTF-8"?>
      <ejb-jar version="2.1" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/ejb-jar_2_1.xsd">
      <display-name>MessagingExample</display-name>
      <enterprise-beans>
       <message-driven>
         <display-name>MessagingExampleMDB</display-name>
         <ejb-name>MessagingExampleMDB</ejb-name>
         <ejb-class>jms.MessagingExampleMdb</ejb-class>
         <transaction-type>Bean</transaction-type>
         <message-destination-type>javax.jms.Queue</message-destination-type>
       </message-driven>
      </enterprise-beans>
      <assembly-descriptor>
       <container-transaction>
         <method>
           <ejb-name>MessagingExampleMDB</ejb-name>
           <method-name>*</method-name>
         </method>
         <trans-attribute>Required</trans-attribute>
       </container-transaction>
      </assembly-descriptor>
      </ejb-jar>
    3. Create a new file weblogic-ejb-jar.xml. This is required for Weblogic bindings.
      <?xml version="1.0" encoding="UTF-8"?>
      <!DOCTYPE weblogic-ejb-jar PUBLIC "-//BEA Systems, Inc.//DTD WebLogic 8.1.0 EJB//EN" "http://www.bea.com/servers/wls810/dtd/weblogic-ejb-jar.dtd">
      <weblogic-ejb-jar>
      <weblogic-enterprise-bean>
       <ejb-name>MessagingExampleMDB</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>jms/testQueue</destination-jndi-name>
         <initial-context-factory>weblogic.jndi.WLInitialContextFactory</initial-context-factory>
         <connection-factory-jndi-name>jms/connectionFactory</connection-factory-jndi-name>
         <jms-polling-interval-seconds>20</jms-polling-interval-seconds>
       </message-driven-descriptor>
       <transaction-descriptor>
         <trans-timeout-seconds>3600</trans-timeout-seconds>
       </transaction-descriptor>
      
      </weblogic-enterprise-bean>
      </weblogic-ejb-jar>
  3. Create the Client. For this example, I used a servlet that simply sends a "Hello" message to the MDB through the Queue. Here is the code for it
    public class MessaginClientServlet extends javax.servlet.http.HttpServlet implements javax.servlet.Servlet {
    public final static String JNDI_FACTORY = "weblogic.jndi.WLInitialContextFactory";
    public final static String JMS_FACTORY = "weblogic.examples.jms.QueueConnectionFactory";
    public final static String QUEUE = "weblogic.examples.jms.exampleQueue";
    public MessaginClientServlet() {
     super();
    }
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
     try {
       Context ctx = getInitialContext("t3://localhost:20001");
       QueueConnectionFactory qconFactory;
       QueueConnection connection;
       QueueSession session;
       QueueSender sender;
       Queue queue;
       TextMessage msg;
    
       qconFactory = (QueueConnectionFactory) ctx.lookup("jms/connectionFactory");
       connection = qconFactory.createQueueConnection();
       session = connection.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
       queue = (Queue) ctx.lookup("jms/testQueue");
       msg = session.createTextMessage();
       sender = session.createSender(queue);
       msg.setText("Hello World");
       connection.start();
       sender.send(msg);
       session.close();
       connection.close();
     } catch (Exception e) {
       e.printStackTrace();
     }
    }
    
    private InitialContext getInitialContext(String url) throws NamingException {
     Hashtable<String, String> env = new Hashtable<String, String>();
     env.put(Context.INITIAL_CONTEXT_FACTORY, JNDI_FACTORY);
     env.put(Context.PROVIDER_URL, url);
     return new InitialContext(env);
    }
    }
 
标签 : ,



发表评论 发送引用通报