﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-csusky-随笔分类-J2EE</title><link>http://www.blogjava.net/csusky/category/29494.html</link><description /><language>zh-cn</language><lastBuildDate>Tue, 19 Feb 2008 04:15:08 GMT</lastBuildDate><pubDate>Tue, 19 Feb 2008 04:15:08 GMT</pubDate><ttl>60</ttl><item><title>JMS基础</title><link>http://www.blogjava.net/csusky/archive/2008/02/18/180473.html</link><dc:creator>晓宇</dc:creator><author>晓宇</author><pubDate>Mon, 18 Feb 2008 07:36:00 GMT</pubDate><guid>http://www.blogjava.net/csusky/archive/2008/02/18/180473.html</guid><wfw:comment>http://www.blogjava.net/csusky/comments/180473.html</wfw:comment><comments>http://www.blogjava.net/csusky/archive/2008/02/18/180473.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/csusky/comments/commentRss/180473.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/csusky/services/trackbacks/180473.html</trackback:ping><description><![CDATA[<div class="postTitle"><a class="postTitle2" id="viewpost1_TitleUrl" href="http://www.blogjava.net/tbest/articles/174378.html">转载一篇jms的文章</a> </div>
<p>
<table class="border_LeftRightTop" cellspacing="0" cellpadding="0" width="780" align="center" border="0">
    <tbody>
        <tr>
            <td align="center" colspan="2">
            <h1>JMS简介</h1>
            <hr color="#ff9600" size="1" />
            <div></div>
            </td>
        </tr>
        <tr>
            <td height="15"></td>
        </tr>
    </tbody>
</table>
<table class="border_LeftRightBottom" style="table-layout: fixed" cellspacing="0" cellpadding="0" width="780" align="center" border="0">
    <tbody>
        <tr>
            <td style="font-weight: bold; font-size: 14px; text-decoration: underline"></td>
        </tr>
        <tr>
            <td class="NewsContent">1. JMS基本概念 <br />
            JMS(Java Message Service)是访问企业消息系统的标准API,它便于消息系<br />
            统中的Java应用程序进行消息交换,并且通过提供标准的产生、发送、接收消息的接口简化企业应用的开发。<br />
            <table cellspacing="0" cellpadding="0" width="160" align="left" border="0">
                <tbody>
                    <tr>
                        <td id="newbooks1"></td>
                    </tr>
                </tbody>
            </table>
            <br />
            <img height="167" alt="" src="http://www.newbooks.com.cn/infos/pic/200707/140284/20070715012143463.gif" width="318" /><br />
            <strong>2. JMS基本功能</strong><br />
            JMS是用于和面向消息的中间件相互通信的应用程序接口。它既支持点对点(point-to-point)的域，又支持发布/订阅(publish/subscribe)类型的域，并且提供对下列类型的支持：经认可的消息传递,事务型消息的传递，一致性消息和具有持久性的订阅者支持。JMS还提供了另一种方式来对您的应用与旧的后台系统相集成。<br />
            <strong>3. WebLogic JMS Server介绍</strong><br />
            WebLogic Server8.1符合JAVA规范,并通过Sun Microsystems J2EE 1.3认<br />
            证.作为WebLogic的一部分,当然WebLogic JMS Server也完全遵从JMS规范,还支持集群,并可以应用于实际企业系统.下图是WebLogic JMS Server体系结构.图中可以看到WebLogic JMS Server主要组件有: WebLogic JMS servers(用于消息通信),Java客户端,JNDI(用于域名查找), 后备存储(用于持久消息存储,基于文件或者JDBC数据库).<br />
            <img height="400" alt="" src="http://www.newbooks.com.cn/infos/pic/200707/140284/20070715012143627.jpg" width="448" /><br />
            <strong>二. WebLogic JMS特性</strong><br />
            1. 消息通信模型<br />
            JMS 支持两种消息通信模型：点到点（point-to-point）（PTP）模型和发布/订阅（Pub/Sub）模型。除了下列不同之外，这两种消息通信模型非常地相似：<br />
            PTP 模型规定了一个消息只能有一个接收者;Pub/Sub 模型允许一个消息可以有多个接收者。<br />
            2. 消息组成<br />
            消息传递系统的中心就是消息。<br />
            一条 Message 分为三个组成部分： <br />
            &#183; 头（header）是个标准字段集，客户机和供应商都用它来标识和路由消息。<br />
            &#183; 属性（property）支持把可选头字段添加到消息。如果您的应用程序需要不使用标准头字段对消息编目和分类，您就可以添加一个属性到消息以实现这个编目和分类。提供 set&lt;Type&gt;Property(...) 和 get&lt;Type&gt;Property(...) 方法以设置和获取各种 Java 类型的属性，包括 Object。JMS 定义了一个供应商选择提供的标准属性集。<br />
            &#183; 消息的主体（body）包含要发送给接收应用程序的内容。每个消息接口特定于它所支持的内容类型。 <br />
            JMS 为不同类型的内容提供了它们各自的消息类型，但是所有消息都派生自 Message 接口。<br />
            &#183; StreamMessage：包含 Java 基本数值流，用标准流操作来顺序的填充和读取。<br />
            &#183; MapMessage：包含一组名/值对；名称为 string 类型，而值为 Java 的基本类型。<br />
            &#183; TextMessage：包含一个 String。<br />
            &#183; ObjectMessage：包含一个 Serializable Java 对象；能使用 JDK 的集合类。<br />
            &#183; BytesMessage：包含未解释字节流: 编码主体以匹配现存的消息格式。<br />
            &#183; XMLMessage: 包含XML内容。扩展TextMessage,XMLMessage 类型的使用，使得消息过滤非常便利。<br />
            3. 消息确认模式<br />
            非事务性会话中，应用程序创建的会话有5 种确认模式,而在事务性会话中，确认模式被忽略。<br />
            五种确认模式说明:<br />
            &#183; AUTO_ACKNOWLEDGE：自动确认模式。一旦接收方应用程序的方法调用从处理消息处返回，会话对象就会确认消息的接收。<br />
            &#183; CLIENT_ACKNOWLEDGE：客户端确认模式。会话对象依赖于应用程序对被接收的消息调用一个acknowledge()方法。一旦这个方法被调用，会话会确认最后一次确认之后所有接收到的消息。这种模式允许应用程序以一个调用来接收，处理并确认一批消息。注意：在管理控制台中，如果连接工厂的Acknowledge Policy（确认方针）属性被设置为"Previous"（提前），但是你希望为一个给定的会话确认所有接收到的消息，那么就用最后一条消息来调用acknowledge()方法。<br />
            &#183; DUPS_OK_ACKNOWLEDGE：允许副本的确认模式。一旦接收方应用程序的方法调用从处理消息处返回，会话对象就会确认消息的接收；而且允许重复确认。在需要考虑资源使用时，这种模式非常有效。注意：如果你的应用程序无法处理重复的消息的话，你应该避免使用这种模式。如果发送消息的初始化尝试失败，那么重复的消息可以被重新发送。<br />
            &#183; NO_ACKNOWLEDGE：不确认模式。不确认收到的消息是需要的。消息发送给一个NO_ACKNOWLEDGE 会话后，它们会被WebLogic 服务器立即删除。在这种模式下，将无法重新获得已接收的消息，而且可能导致下面的结果：1. 消息可能丢失；和（或者）另一种情况：2. 如果发送消息的初始化尝试失败，会出现重复消息被发送的情况。<br />
            &#183; MULTICAST_NO_ACKNOWLEDGE：IP组播下的不确认模式，同样无需确认。发送给一个MULTICAST_NO_ACKNOWLEDGE会话的消息， 会共享之前所述的NO_ACKNOWLEDGE 确认模式一样的特征。这种模式支持希望通过IP 组播方式进行消息通信的应用程序，而且无需依赖会话确认提供的服务质量。注意：如果你的应用程序无法处理消息的丢失或者重复，那么你应该避免使用这种模式。如果发送消息的初始化尝试失败的话，重复的消息可能会被再次发送。<br />
            注：在上表的5 种确认模式中，AUTO_ACKNOWLEDGE ，DUPS_OK_ACKNOWLEDGE 和<br />
            CLIENT_ACKNOWLEDGE 是JMS 规范定义的，NO_ACKNOWLEDGE 和MULTICAST_NO_ACKNOWLEDGE是WebLogic JMS 提供的。<br />
            <strong>三. 配置JMS</strong><br />
            1. 创建连接工厂<br />
            (1) 启动WebLogic Server8.1,登录控制台,选中JMS Connection Factories节点,点击右边的" Configure a new JMS Connection Factory...";<br />
            <img height="415" alt="" src="http://www.newbooks.com.cn/infos/pic/200707/140284/20070715012143184.jpg" width="554" /><br />
            (2) 填写连接工厂的名称SendJMSFactory和JNDI名称SendJMSFactory,点击"Create";<br />
            <img height="415" alt="" src="http://www.newbooks.com.cn/infos/pic/200707/140284/20070715012143425.jpg" width="554" /><br />
            (3) 勾上"myserver",将SendJMSFactory应用到myserver;<br />
            <img height="415" alt="" src="http://www.newbooks.com.cn/infos/pic/200707/140284/20070715012143305.jpg" width="554" /><br />
            2. 定义后备存储<br />
            (1) 选中JMS Stores节点,点击右边的" Configure a new JMS Connection Factory...";<br />
            <img height="415" alt="" src="http://www.newbooks.com.cn/infos/pic/200707/140284/20070715012143276.jpg" width="554" /><br />
            (2) 填写文件后备存储的名称SendFileStore和目录Directionary E:\BEA\user_projects\domains\mydomain\sendfilestore,点击"Create".<br />
            <img height="415" alt="" src="http://www.newbooks.com.cn/infos/pic/200707/140284/20070715012143401.jpg" width="554" /><br />
            3. 创建JMS服务器<br />
            (1) 选中JMS Servers节点,点击右边的" Configure a new JMSServer...";<br />
            <img height="415" alt="" src="http://www.newbooks.com.cn/infos/pic/200707/140284/20070715012143896.jpg" width="554" /><br />
            (2) 填写JMS服务器的名称SendJMSServer和Paging Store设为" SendFileStore",点击"Create"; <br />
            <img height="415" alt="" src="http://www.newbooks.com.cn/infos/pic/200707/140284/20070715012143644.jpg" width="554" /><br />
            (3) Target选中"myserver",将SendJMSServer应用到myserver.<br />
            <img height="415" alt="" src="http://www.newbooks.com.cn/infos/pic/200707/140284/20070715012143931.jpg" width="554" /><br />
            4. 创建消息队列<br />
            (1) 展开"SendJMSServer"节点,点击" Configure a new JMS Queue...";<br />
            <img height="415" alt="" src="http://www.newbooks.com.cn/infos/pic/200707/140284/20070715012143466.jpg" width="554" /><br />
            (2) 填写消息队列的名称SendJMSQueue和JNDI名称SendJMSQueue,点击"Create"; <br />
            <img height="415" alt="" src="http://www.newbooks.com.cn/infos/pic/200707/140284/20070715012143264.jpg" width="554" /><br />
            四. JMS应用程序<br />
            一个 JMS 应用程序由下列元素组成： <br />
            &#183; JMS 客户机。 用 JMS API 发送和接收消息的 Java 程序。<br />
            &#183; 非 JMS（Non-JMS）客户机。 认识到这一点很重要 - 旧的程序经常成为整个 JMS 应用程序的一部分，而且它们的包含应该在设计时预先考虑。<br />
            &#183; 消息。 在 JMS 和非 JMS 客户机之间交换的消息的格式和内容是 JMS 应用程序设计所必须考虑的部分。<br />
            &#183; JMS 供应商。供应商必须提供特定于其 MOM 产品的具体的实现。<br />
            &#183; 受管对象。 消息传递系统供应商的管理员创建了一个对象，它独立于供应商专有的技术。包括连接工厂ConnectionFactory和目的Destination。<br />
            一种典型的 JMS 程序需要经过下列步骤才能开始消息产生和使用:<br />
            &#183; 通过 JNDI 查找 ConnectionFactory。<br />
            &#183; 通过 JNDI 查找一个或多个 Destination。 <br />
            &#183; 用 ConnectionFactory 创建一个 Connection。 <br />
            &#183; 用 Connection 创建一个或多个 Session。 <br />
            &#183; 用 Session 和 Destination 创建所需的 MessageProducer 和 MessageConsumer。 <br />
            &#183; 启动 Connection。 <br />
            下面利用上面配置的JMS资源演示点对点消息发送和接收的过程。<br />
            五. 设计消息发送端<br />
            1. 使用的JMS资源<br />
            服务器URL: t3://localhost:80<br />
            连接工厂: SendJMSFactory<br />
            队列: SendJMSQueue<br />
            2. 设计步骤<br />
            &#183; 初始化JNDI Tree<br />
            Hashtable env = new Hashtable();<br />
            env.put(Context.INITIAL_CONTEXT_FACTORY, JNDI_FACTORY);<br />
            env.put(Context.PROVIDER_URL, PROVIDER_URL);<br />
            return new InitialContext(env);<br />
            &#183; lookup ConnectionFactory<br />
            qconFactory = (QueueConnectionFactory) ctx.lookup(JMS_FACTORY);<br />
            &#183; lookup Destination<br />
            queue = (Queue) ctx.lookup(queueName);<br />
            &#183; 用 ConnectionFactory 创建Connection <br />
            qcon = qconFactory.createQueueConnection();<br />
            &#183; 用 Connection 创建一个Session<br />
            qsession = qcon.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);<br />
            &#183; 用 Session 和 Destination 创建MessageProducer<br />
            qsender = qsession.createSender(queue);<br />
            &#183; 启动 Connection。<br />
            qcon.start();<br />
            &#183; 发送消息<br />
            msg = qsession.createTextMessage();<br />
            msg.setText(message);<br />
            qsender.send(msg);<br />
            3. 源代码<br />
            package jmssample;
            <p>import java.util.Hashtable;<br />
            import javax.jms.*;<br />
            import javax.naming.Context;<br />
            import javax.naming.InitialContext;<br />
            import javax.naming.NamingException;<br />
            import java.io.BufferedReader;<br />
            import java.io.IOException;<br />
            import java.io.InputStreamReader;</p>
            <p>/** This example shows how to establish a connection<br />
            * and send messages to the JMS queue. The classes in this<br />
            * package operate on the same JMS queue. Run the classes together to<br />
            * witness messages being sent and received, and to browse the queue<br />
            * for messages. The class is used to send messages to the queue.<br />
            *<br />
            * @author Copyright (c) 1999-2003 by BEA Systems, Inc. All Rights Reserved.<br />
            */<br />
            public class QueueSend<br />
            {<br />
            // Defines the JNDI context factory.<br />
            public final static String JNDI_FACTORY="weblogic.jndi.WLInitialContextFactory";</p>
            <p>// Defines the JNDI provider url.<br />
            public final static String PROVIDER_URL=" t3://localhost:80";</p>
            <p>// Defines the JMS connection factory for the queue.<br />
            public final static String JMS_FACTORY="SendJMSFactory";</p>
            <p>// Defines the queue.<br />
            public final static String QUEUE="SendJMSQueue";</p>
            <p><br />
            private QueueConnectionFactory qconFactory;<br />
            private QueueConnection qcon;<br />
            private QueueSession qsession;<br />
            private QueueSender qsender;<br />
            private Queue queue;<br />
            private TextMessage msg;</p>
            <p>/**<br />
            * Creates all the necessary objects for sending<br />
            * messages to a JMS queue.<br />
            *<br />
            * @param ctx JNDI initial context<br />
            * @param queueName name of queue<br />
            * @exception NamingException if operation cannot be performed<br />
            * @exception JMSException if JMS fails to initialize due to internal error<br />
            */<br />
            public void init(Context ctx, String queueName)<br />
            throws NamingException, JMSException<br />
            {<br />
            qconFactory = (QueueConnectionFactory) ctx.lookup(JMS_FACTORY);<br />
            qcon = qconFactory.createQueueConnection();<br />
            qsession = qcon.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);<br />
            queue = (Queue) ctx.lookup(queueName);<br />
            qsender = qsession.createSender(queue);<br />
            msg = qsession.createTextMessage();<br />
            qcon.start();<br />
            }</p>
            <p>/**<br />
            * Sends a message to a JMS queue.<br />
            *<br />
            * @param message message to be sent<br />
            * @exception JMSException if JMS fails to send message due to internal error<br />
            */<br />
            public void send(String message) throws JMSException {<br />
            msg.setText(message);<br />
            qsender.send(msg);<br />
            }</p>
            <p>/**<br />
            * Closes JMS objects.<br />
            * @exception JMSException if JMS fails to close objects due to internal error<br />
            */<br />
            public void close() throws JMSException {<br />
            qsender.close();<br />
            qsession.close();<br />
            qcon.close();<br />
            }<br />
            /** main() method.<br />
            *<br />
            * @param args WebLogic Server URL<br />
            * @exception Exception if operation fails<br />
            */<br />
            public static void main(String[] args) throws Exception {<br />
            InitialContext ic = getInitialContext();<br />
            QueueSend qs = new QueueSend();<br />
            qs.init(ic, QUEUE);<br />
            readAndSend(qs);<br />
            qs.close();<br />
            }</p>
            <p>private static void readAndSend(QueueSend qs)<br />
            throws IOException, JMSException<br />
            {<br />
            BufferedReader msgStream = new BufferedReader(new InputStreamReader(System.in));<br />
            String line=null;<br />
            boolean quitNow = false;<br />
            do {<br />
            System.out.print("Enter message (\"quit\" to quit): ");<br />
            line = msgStream.readLine();<br />
            if (line != null &amp;&amp; line.trim().length() != 0) {<br />
            qs.send(line);<br />
            System.out.println("JMS Message Sent: "+line+"\n");<br />
            quitNow = line.equalsIgnoreCase("quit");<br />
            }<br />
            } while (! quitNow);</p>
            <p>}</p>
            <p>private static InitialContext getInitialContext()<br />
            throws NamingException<br />
            {<br />
            Hashtable env = new Hashtable();<br />
            env.put(Context.INITIAL_CONTEXT_FACTORY, JNDI_FACTORY);<br />
            env.put(Context.PROVIDER_URL, PROVIDER_URL);<br />
            return new InitialContext(env);<br />
            }</p>
            <p>}</p>
            <p>六. 设计消息接收端<br />
            1. 使用的JMS资源<br />
            服务器URL: t3://localhost:80<br />
            连接工厂: SendJMSFactory<br />
            队列: SendJMSQueue<br />
            2. 设计步骤<br />
            &#183; 初始化JNDI Tree<br />
            Hashtable env = new Hashtable();<br />
            env.put(Context.INITIAL_CONTEXT_FACTORY, JNDI_FACTORY);<br />
            env.put(Context.PROVIDER_URL, PROVIDER_URL);<br />
            return new InitialContext(env);<br />
            &#183; lookup ConnectionFactory<br />
            qconFactory = (QueueConnectionFactory) ctx.lookup(JMS_FACTORY);<br />
            &#183; lookup Destination<br />
            queue = (Queue) ctx.lookup(queueName);<br />
            &#183; 用 ConnectionFactory 创建Connection <br />
            qcon = qconFactory.createQueueConnection();<br />
            &#183; 用 Connection 创建一个Session<br />
            qsession = qcon.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);<br />
            &#183; 用 Session 和 Destination 创建MessageConsumer<br />
            qreceiver = qsession.createReceiver(queue);<br />
            &#183; 设置监听<br />
            qreceiver.setMessageListener(this);<br />
            &#183; 启动 Connection<br />
            qcon.start();<br />
            3. 源代码<br />
            package jmssample;</p>
            <p>import java.util.Hashtable;<br />
            import javax.jms.*;<br />
            import javax.naming.Context;<br />
            import javax.naming.InitialContext;<br />
            import javax.naming.NamingException;<br />
            import java.util.Hashtable;<br />
            import javax.jms.*;<br />
            import javax.naming.Context;<br />
            import javax.naming.InitialContext;<br />
            import javax.naming.NamingException;</p>
            <p>/**<br />
            * This example shows how to establish a connection to<br />
            * and receive messages from a JMS queue. The classes in this<br />
            * package operate on the same JMS queue. Run the classes together to<br />
            * witness messages being sent and received, and to browse the queue<br />
            * for messages. This class is used to receive and remove messages<br />
            * from the queue.<br />
            *<br />
            * @author Copyright (c) 1999-2003 by BEA Systems, Inc. All Rights Reserved.<br />
            */<br />
            public class QueueReceive implements MessageListener<br />
            {<br />
            // Defines the JNDI context factory.<br />
            public final static String JNDI_FACTORY="weblogic.jndi.WLInitialContextFactory";</p>
            <p>// Defines the JNDI provider url.<br />
            public final static String PROVIDER_URL=" t3://localhost:80";</p>
            <p>// Defines the JMS connection factory for the queue.<br />
            public final static String JMS_FACTORY="SendJMSFactory";</p>
            <p>// Defines the queue.<br />
            public final static String QUEUE="SendJMSQueue";</p>
            <p>private QueueConnectionFactory qconFactory;<br />
            private QueueConnection qcon;<br />
            private QueueSession qsession;<br />
            private QueueReceiver qreceiver;<br />
            private Queue queue;<br />
            private boolean quit = false;</p>
            <p>/**<br />
            * Message listener interface.<br />
            * @param msg message<br />
            */<br />
            public void onMessage(Message msg)<br />
            {<br />
            try {<br />
            String msgText;<br />
            if (msg instanceof TextMessage) {<br />
            msgText = ((TextMessage)msg).getText();<br />
            } else {<br />
            msgText = msg.toString();<br />
            }</p>
            <p>System.out.println("Message Received: "+ msgText );</p>
            <p>if (msgText.equalsIgnoreCase("quit")) {<br />
            synchronized(this) {<br />
            quit = true;<br />
            this.notifyAll(); // Notify main thread to quit<br />
            }<br />
            }<br />
            } catch (JMSException jmse) {<br />
            jmse.printStackTrace();<br />
            }<br />
            }</p>
            <p>/**<br />
            * Creates all the necessary objects for receiving<br />
            * messages from a JMS queue.<br />
            *<br />
            * @param ctx JNDI initial context<br />
            * @param queueName name of queue<br />
            * @exception NamingException if operation cannot be performed<br />
            * @exception JMSException if JMS fails to initialize due to internal error<br />
            */<br />
            public void init(Context ctx, String queueName)<br />
            throws NamingException, JMSException<br />
            {<br />
            qconFactory = (QueueConnectionFactory) ctx.lookup(JMS_FACTORY);<br />
            qcon = qconFactory.createQueueConnection();<br />
            qsession = qcon.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);<br />
            queue = (Queue) ctx.lookup(queueName);<br />
            qreceiver = qsession.createReceiver(queue);<br />
            qreceiver.setMessageListener(this);<br />
            qcon.start();<br />
            }</p>
            <p>/**<br />
            * Closes JMS objects.<br />
            * @exception JMSException if JMS fails to close objects due to internal error<br />
            */<br />
            public void close()throws JMSException<br />
            {<br />
            qreceiver.close();<br />
            qsession.close();<br />
            qcon.close();<br />
            }<br />
            /**<br />
            * main() method.<br />
            *<br />
            * @param args WebLogic Server URL<br />
            * @exception Exception if execution fails<br />
            */</p>
            <p>public static void main(String[] args) throws Exception {</p>
            <p>InitialContext ic = getInitialContext();<br />
            QueueReceive qr = new QueueReceive();<br />
            qr.init(ic, QUEUE);</p>
            <p>System.out.println("JMS Ready To Receive Messages (To quit, send a \"quit\" message).");</p>
            <p>// Wait until a "quit" message has been received.<br />
            synchronized(qr) {<br />
            while (! qr.quit) {<br />
            try {<br />
            qr.wait();<br />
            } catch (InterruptedException ie) {}<br />
            }<br />
            }<br />
            qr.close();<br />
            }</p>
            <p>private static InitialContext getInitialContext()<br />
            throws NamingException<br />
            {<br />
            Hashtable env = new Hashtable();<br />
            env.put(Context.INITIAL_CONTEXT_FACTORY, JNDI_FACTORY);<br />
            env.put(Context.PROVIDER_URL, PROVIDER_URL);<br />
            return new InitialContext(env);<br />
            }</p>
            <p><br />
            }<br />
            七. 测试消息发送和接收<br />
            1. 设置WebLogic Classpath;<br />
            </p>
            <img height="600" alt="" src="http://www.newbooks.com.cn/infos/pic/200707/140284/20070715012143914.png" width="664" /> <br />
            2. 转到发送接收程序目录编译文件;<br />
            <img height="431" alt="" src="http://www.newbooks.com.cn/infos/pic/200707/140284/20070715012143423.png" width="668" /><br />
            3. 执行接受程序;<br />
            4. 打开另一窗口,执行发送程序;<br />
            <p><img height="431" alt="" src="http://www.newbooks.com.cn/infos/pic/200707/140284/20070715012143302.png" width="668" /><br />
            5. 输入发送消息"quit",接收程序结束. <br />
            <img height="431" alt="" src="http://www.newbooks.com.cn/infos/pic/200707/140284/20070715012143451.png" width="668" /><br />
            <br />
            <strong>总结</strong><br />
            本文先简要介绍了JMS的一些基本概念,继而引入了WebLogic JMS Server的体系结构和相关特性。在此基础之上,图文并茂地讲述了JMS在WebLogic Server 8.1上的配置。最后在解剖JMS应用程序框架的同时,以点对点为例演示了JMS的发送接收消息流程。&nbsp;</p>
            </td>
        </tr>
    </tbody>
</table>
</p>
<img src ="http://www.blogjava.net/csusky/aggbug/180473.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/csusky/" target="_blank">晓宇</a> 2008-02-18 15:36 <a href="http://www.blogjava.net/csusky/archive/2008/02/18/180473.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JMS</title><link>http://www.blogjava.net/csusky/archive/2008/02/18/180413.html</link><dc:creator>晓宇</dc:creator><author>晓宇</author><pubDate>Mon, 18 Feb 2008 03:35:00 GMT</pubDate><guid>http://www.blogjava.net/csusky/archive/2008/02/18/180413.html</guid><wfw:comment>http://www.blogjava.net/csusky/comments/180413.html</wfw:comment><comments>http://www.blogjava.net/csusky/archive/2008/02/18/180413.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/csusky/comments/commentRss/180413.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/csusky/services/trackbacks/180413.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 一、初始化&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String&nbsp;CTX_FACTORY="com.sun.fscontext.RefContextFactory";&nbsp;&nbsp;&nbsp;&nb...&nbsp;&nbsp;<a href='http://www.blogjava.net/csusky/archive/2008/02/18/180413.html'>阅读全文</a><img src ="http://www.blogjava.net/csusky/aggbug/180413.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/csusky/" target="_blank">晓宇</a> 2008-02-18 11:35 <a href="http://www.blogjava.net/csusky/archive/2008/02/18/180413.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>