<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
  <channel>
    <title>cctvx1</title>
    <description>致力于iBatis,ActiveMQ的应用推广
关注MDP,异步结构.</description>
    <link>http://cctvx1.javaeye.com</link>
    <language>UTF-8</language>
    <copyright>Copyright 2003-2008, JavaEye.com</copyright>
    <docs>http://blogs.law.harvard.edu/tech/rss</docs>
    <generator>JavaEye - 做最棒的软件开发交流社区</generator>
      <item>
        <title>最近更新下ActiveMQ 4.1.1与spring  2.0.6 配置所使用的xsd</title>
        <author>cctvx1</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://cctvx1.javaeye.com">cctvx1</a>&nbsp;
          链接：<a href="http://cctvx1.javaeye.com/blog/117158" style="color:red;">http://cctvx1.javaeye.com/blog/117158</a>&nbsp;
          发表时间: 2007年08月27日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 因为4.1.1修复了不少bug,是当前的稳定版本,因此我更新了下,主要还是&lt;xs:any&gt;和&lt;xs:element&gt;的问题,看来ActiveMQ开发团队,对于spring new schema配置,测试还是比较少。附件包括我部分修改的(broker,transportConnector)xsd,和spring.schema.</p>
<p>&nbsp;</p>
          <br/>
          <span style="color:red;">
            <a href="http://cctvx1.javaeye.com/blog/117158#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 27 Aug 2007 14:06:12 +0800</pubDate>
        <link>http://cctvx1.javaeye.com/blog/117158</link>
        <guid>http://cctvx1.javaeye.com/blog/117158</guid>
      </item>
      <item>
        <title>乱弹 SOA </title>
        <author>cctvx1</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://cctvx1.javaeye.com">cctvx1</a>&nbsp;
          链接：<a href="http://cctvx1.javaeye.com/blog/81980" style="color:red;">http://cctvx1.javaeye.com/blog/81980</a>&nbsp;
          发表时间: 2007年05月22日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>&nbsp;&nbsp;&nbsp; 突然之间SOA成了IT的话题,一夜之间遍地SOA开。以往的EAI厂商再也按捺不住,EAI这个概念已经很多年,热度明显不够了,于</p>
<p>是纷纷上马SOA平台,TIBCO,VITRIA,IONA 纷纷将推出了自己的SOA基础平台,而BEA,IBM这些本来就是J2EE的实践者更是把</p>
<p>SOA推向了极致,其他的国内外厂商像SONIC,普元也纷纷加入, 现在人人必谈SOA,谈SOA必谈ESB, 早年的workflow 又换了个更</p>
<p>时髦的名字BPM (business process management), 基本上现在提供ESB的,就会提供自己的BPM 产品, 有点当年EJB一统天下</p>
<p>的感觉， 不过有所不同的是EJB还有SUN来定规则,(不过当时各个J2EE AS 也是在ejb.xml上面加上了jboss-ejb.xm,weblog-</p>
<p>ejb.xml各自搭台唱各自的戏), 而今现在SOA 各个厂商更是我的地盘我做主, 一副信我者的永生的模样, SOA究竟是为了降低成本</p>
<p>还是增加成本, 如何实施SOA才能够体现它的价值?&nbsp; 本来就浮躁的国内技术市场现在就如同股市一样, 我不禁问自己 4500点究</p>
<p>竟是终点还是另外一个起点，同样SUN对于java 统治力的下降究竟是好事还是坏事。反而m$ 却不声不响的和novell联盟,给sun</p>
<p>一大笔和解费。</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
          <br/>
          <span style="color:red;">
            <a href="http://cctvx1.javaeye.com/blog/81980#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 22 May 2007 23:03:48 +0800</pubDate>
        <link>http://cctvx1.javaeye.com/blog/81980</link>
        <guid>http://cctvx1.javaeye.com/blog/81980</guid>
      </item>
      <item>
        <title>Open Message Queue 项目和特性概要</title>
        <author>cctvx1</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://cctvx1.javaeye.com">cctvx1</a>&nbsp;
          链接：<a href="http://cctvx1.javaeye.com/blog/80164" style="color:red;">http://cctvx1.javaeye.com/blog/80164</a>&nbsp;
          发表时间: 2007年05月15日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p><font size="3">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Open Message Queue is the community version of Sun Java System Message Queue. Source code for the project is available as a single .zip archive file. Complete binary copies are available for Solaris Sparc, Solaris x86, Linux, and Windows. These copies are unsupported, though you may post questions to the Message Queue Forum, as well as use e-mail feedback lists.</font></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font size="3">Open Message Queue is a full featured Message Oriented Middleware, queuing server. Open MQ implements the Java Message Service (JMS) API and provides enterprise class features such as, </font></p>
<ul>
    <li>
    <p><font size="3">Message buffering between enterprise system components</font></p>
    </li>
    <li>
    <p><font size="3">Scalable distribution of message servers (broker clustering) </font></p>
    </li>
    <li>
    <p><font size="3">Integrated SOAP / HTTP messaging</font></p>
    </li>
    <li>
    <p><font size="3">Java and C Client API</font></p>
    </li>
    <li>
    <p><font size="3">Scalable JCA 1.5 compliant Resource Adapter</font></p>
    </li>
    <li>
    <p><font size="3">Enterprise Administration Features</font></p>
    </li>
    <li>
    <p><font size="3">Extensive JMX support </font></p>
    </li>
</ul>
<p><font size="3">The components of Open Message Queue are sho</font>wn in the following diagram</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <img src="https://mq.dev.java.net/to_MQService.jpg" alt="" /></p>
          <br/>
          <span style="color:red;">
            <a href="http://cctvx1.javaeye.com/blog/80164#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 15 May 2007 21:28:41 +0800</pubDate>
        <link>http://cctvx1.javaeye.com/blog/80164</link>
        <guid>http://cctvx1.javaeye.com/blog/80164</guid>
      </item>
      <item>
        <title>工作.</title>
        <author>cctvx1</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://cctvx1.javaeye.com">cctvx1</a>&nbsp;
          链接：<a href="http://cctvx1.javaeye.com/blog/74759" style="color:red;">http://cctvx1.javaeye.com/blog/74759</a>&nbsp;
          发表时间: 2007年04月25日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 到了新公司,已经上班了3天了,挺有些感触。严格的来说我现在的岗位已经不是研发岗位了,这个也是已经过考虑自己做出的选择.转过头来看自己做研发都作了5年了,不过算不得什么大牛,因为自己毕竟不是科班出身,可能在算法和其他底层上面还有所欠缺,这次有机会转作售前,也是希望自己能够往技术顾问方向转。不过现在才发现售前要做好也是挺难的,首先是我们做的是J2EE售前,而在这个领域里面太多的大厂商,五花八门的规范,不仅要熟悉自己公司的产品同时也要了解对手的产品。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 售前在很多人眼里都是只是会吹水的职位,其实那些高级技术顾问又有几个要亲自动手开发程序呢? 我倒觉得这个是社会分工的事情,顾问更多的是提供解决问题的方法。我希望能够通过售前锻炼自己的沟通能力,让自己能够在技术顾问的道路越走越远。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 同时我相信自己也是不会放弃开发的,多参与开源社区,继续提供自己的动手能力。</p>
          <br/>
          <span style="color:red;">
            <a href="http://cctvx1.javaeye.com/blog/74759#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 25 Apr 2007 23:10:24 +0800</pubDate>
        <link>http://cctvx1.javaeye.com/blog/74759</link>
        <guid>http://cctvx1.javaeye.com/blog/74759</guid>
      </item>
      <item>
        <title>爷爷......</title>
        <author>cctvx1</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://cctvx1.javaeye.com">cctvx1</a>&nbsp;
          链接：<a href="http://cctvx1.javaeye.com/blog/68916" style="color:red;">http://cctvx1.javaeye.com/blog/68916</a>&nbsp;
          发表时间: 2007年04月07日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>&nbsp;&nbsp;&nbsp;&nbsp;......<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp; 确切的说,我说的爷爷是我的外公,只是由于我未曾记事的时候,爷爷就去世了,伴随我记忆的就只有现在的&quot;爷爷&quot;了,爷爷是当过兵的人,吃了不少苦,据说当初给国民党抓壮丁,后来跑了出来,加入了解放军,当了个班长,后来转业,也从河南到了重庆。<br />
&nbsp;<br />
&nbsp;&nbsp;&nbsp; 说实话记不得爷爷年轻的样子了,我家里人不太喜欢照相,包括我自己,我的父母,一转眼,孙子们都长大了,而且也有了曾孙,但是爷爷确实老了,加上一次意外,爷爷的一只腿行动不太方便,活动也越来越少了,那套房子成了爷爷仅有的活动空间,平时由于经常生病的原因,爷爷笑得越来越少了,家里孩子很多,我有4个阿姨,从小就靠着爷爷一个人在某个国企里面烧锅炉,把家里的孩子拉扯大,可是他从来没有回报什么,甚至每次过春节都是很固执的弄点冷饭,冷菜,总是说&ldquo;倒了可惜,倒了可惜...&quot;,最开心的时候就是儿孙们聚在一起,围着他,仿佛我们就是他一生中最大的财富。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; 爷爷与儿孙们当然有隔阂,每当我们吃着洋快餐的时候,每当我们讨论某某牌子服饰的时候,爷爷总是很惊讶,&quot;这个怎么这么贵&quot;,爷爷那辈自然不能理解儿孙们的想法,可是我们又何尝去理解父辈,祖辈的想法,一转眼,儿孙们都该成家了,爷爷总是关心自己的曾孙问题,毕竟四世同堂是很多老人的愿望。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; 爷爷生病了,而且病的很重,这次病得那么重,孙回来了,却不敢看您,因为您现在分辨不出来很多东西,却仍然记得孙的名字,记得嘱咐孙&quot;好好的工作,爷爷不能起身和你聊天了。&quot;,<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;后面我已经不知道怎么写下去了,就让他用......开始&nbsp; 又用......结束吧</p>
          <br/>
          <span style="color:red;">
            <a href="http://cctvx1.javaeye.com/blog/68916#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sat, 07 Apr 2007 22:47:07 +0800</pubDate>
        <link>http://cctvx1.javaeye.com/blog/68916</link>
        <guid>http://cctvx1.javaeye.com/blog/68916</guid>
      </item>
      <item>
        <title>ActiveMQ 实践之路(四) ActiveMQ 4.x +JBoss 4.x MDP实战篇</title>
        <author>cctvx1</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://cctvx1.javaeye.com">cctvx1</a>&nbsp;
          链接：<a href="http://cctvx1.javaeye.com/blog/58690" style="color:red;">http://cctvx1.javaeye.com/blog/58690</a>&nbsp;
          发表时间: 2007年03月09日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <font face="Arial">
<p class="code_title"><font face="Arial">ActiveMQ 实践之路(四) ActiveMQ 4.x +JBoss 4.x MDP实战篇</font></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在&lt;&lt;<a href="http://cctvx1.javaeye.com/admin/show/58056">ActiveMQ 实践之路(三) ActiveMQ 4.x +JBoss 4.x 整合篇</a> &gt;&gt;里面我们比较详细的讲解了ActiveMQ与JBoss的整合,<br />
既然选择了JBoss,那么项目里面或多或少都会使用到EJB,下面我们就详细地介绍如何在ActiveMQ 4.x+JBOSS 4.x环境下开发<br />
Message Driven Bean,并且与使用jbossMQ在配置上作了比较详细地比较。这里的OrderMessage 仅仅是一个自动生成的Message Driven Bean,在onMessage方法里面,作日志输入。</p>
<p><font face="Arial">&nbsp;<font face="Arial">一. 配置ejb-jar.xml<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1.&nbsp; ejb-jar.xml 不能使用<font color="#ff0000">XML DTD</font>,需要使用<font color="#ff0000">XML Schema(XSD)<br />
</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font><font face="Arial"><font face="Arial">很多朋友可能使用XDoclet来生成ejb-jar.xml,我这里直接使用XDoclet生成的ejb-jar.xml是</font></font><br />
</font><br />
</p>
<font face="Arial">
<div class="code_title"><font face="Arial"><!--CTYPE ejb-jar PUBLIC "-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 2.0//EN" "http://java.sun.com/dtd/ejb-jar_2_0.dt--></font></div>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font face="Arial">但是在ActiveMQ+JBoss配置中间需要使用新的XML Schema才能完成对ra的定义,如下.<br />
</font></p>
<div class="code_title">xml 代码</div>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-xml">
    <li class="alt"><span><span class="tag">&lt;</span><span class="tag-name">ejb-jar</span><span>&nbsp;</span><span class="attribute">xmlns</span><span>=</span><span class="attribute-value">&quot;http://java.sun.com/xml/ns/j2ee&quot;</span><span>&nbsp;</span><span class="attribute">xmlns:xsi</span><span>=</span><span class="attribute-value">&quot;http://www.w3.org/2001/XMLSchema-instance&quot;</span><span>&nbsp;</span><span class="attribute">xsi:schemaLocation</span><span>=</span><span class="attribute-value">&quot;http://java.sun.com/xml/ns/j2ee&nbsp;http://java.sun.com/xml/ns/j2ee/ejb-jar_2_1.xsd&quot;</span><span>&nbsp;</span><span class="attribute">version</span><span>=</span><span class="attribute-value">&quot;2.1&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span> </li>
</ol>
</div>
<p>&nbsp;</p>
<p><font face="Arial">2. ejb-jar.xml 直接使用JBossMQ的Message DriverBean 和使用ActiveMQ RA配置的区别</font></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (1) .<font face="Arial">使用JBossMQ的MessageDrivenBean的 <font color="#ff0000">ejb-jar.xml</font>配置</font></p>
<font face="Arial">
<div class="code_title">xml 代码</div>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-xml">
    <li class="alt"><span><span class="comments"><!-- Message Driven Beans --></span><span>&nbsp;&nbsp;</span></span> </li>
    <li class=""><span></span><span class="tag">&lt;</span><span class="tag-name">message-driven</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">description</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="cdata"></span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag"><span class="tag-name">description</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">display-name</span><span class="tag">&gt;</span><span>Name&nbsp;for&nbsp;OrderMessage</span><span class="tag"><span class="tag-name">display-name</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">ejb-name</span><span class="tag">&gt;</span><span>OrderMessage</span><span class="tag"><span class="tag-name">ejb-name</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">ejb-class</span><span class="tag">&gt;</span><span>com.mostone.ejb.OrderMessage</span><span class="tag"><span class="tag-name">ejb-class</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">transaction-type</span><span class="tag">&gt;</span><span>Container</span><span class="tag"><span class="tag-name">transaction-type</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">acknowledge-mode</span><span class="tag">&gt;</span><span>Auto-acknowledge</span><span class="tag"><span class="tag-name">acknowledge-mode</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">message-driven-destination</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">destination-type</span><span class="tag">&gt;</span><span>javax.jms.Queue</span><span class="tag"><span class="tag-name">destination-type</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag"><span class="tag-name">message-driven-destination</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
    <li class=""><span></span><span class="tag"><span class="tag-name">message-driven</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
</ol>
</div>
<p><font face="Arial">&nbsp;&nbsp;&nbsp;&nbsp; (2). 使用ActiveMQ RA配置的MessageDrivenBean的<font color="#ff0000">ejb-jar.xml</font>配置 </font></p>
<div class="code_title">xml 代码</div>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-xml">
    <li class="alt"><span><span class="comments"><!-- Message Driven Beans --></span><span>&nbsp;&nbsp;</span></span> </li>
    <li class=""><span></span><span class="tag">&lt;</span><span class="tag-name">message-driven</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">description</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="cdata"></span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag"><span class="tag-name">description</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">display-name</span><span class="tag">&gt;</span><span>Name&nbsp;for&nbsp;OrderMessage</span><span class="tag"><span class="tag-name">display-name</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">ejb-name</span><span class="tag">&gt;</span><span>OrderMessage</span><span class="tag"><span class="tag-name">ejb-name</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">ejb-class</span><span class="tag">&gt;</span><span>com.mostone.ejb.OrderMessage</span><span class="tag"><span class="tag-name">ejb-class</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">transaction-type</span><span class="tag">&gt;</span><span>Container</span><span class="tag"><span class="tag-name">transaction-type</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">acknowledge-mode</span><span class="tag">&gt;</span><span>Auto-acknowledge</span><span class="tag"><span class="tag-name">acknowledge-mode</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comments"><!--使用了activetion-config--></span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">activation-config</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">activation-config-property</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">activation-config-property-name</span><span class="tag">&gt;</span><span>destination</span><span class="tag"><span class="tag-name">activation-config-property-name</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">activation-config-property-value</span><span class="tag">&gt;</span><span>queue.outbound</span><span class="tag"><span class="tag-name">activation-config-property-value</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag"><span class="tag-name">activation-config-property</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">activation-config-property</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">activation-config-property-name</span><span class="tag">&gt;</span><span>destinationType</span><span class="tag"><span class="tag-name">activation-config-property-name</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">activation-config-property-value</span><span class="tag">&gt;</span><span>javax.jms.Queue</span><span class="tag"><span class="tag-name">activation-config-property-value</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag"><span class="tag-name">activation-config-property</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag"><span class="tag-name">activation-config</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
    <li class=""><span></span><span class="tag"><span class="tag-name">message-driven</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
</ol>
</div>
<p><font face="Arial">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 其中destination,destinationType是ra.xml里面提供的配置属性,(这里官方的文档是Destination,DestinationType, 而实际上activemq-ra.rar里面的ra.xml是destination,destinationType，注意大小写区别)</font></p>
<font face="Arial">
<p>二<font face="Arial">. <font face="Arial">配置jboss.xml<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font face="Arial">大部分配置都是在jboss.xml里面.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font face="Arial">1.使用JBossMQ 和使用ActiveMQ RA配置Message Driven Bean的区别<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1.) 使用JBossMQ&nbsp;的配置</font></font></font></font><font face="Arial"><br />
</font><br />
</p>
<font face="Arial"><font face="Arial"><font face="Arial"><font face="Arial">
<div class="code_title">xml 代码</div>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-xml">
    <li class="alt"><span><span class="tag">&lt;</span><span class="tag-name">message-driven</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">ejb-name</span><span class="tag">&gt;</span><span>OrderMessage</span><span class="tag"><span class="tag-name">ejb-name</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">destination-jndi-name</span><span class="tag">&gt;</span><span>queue/testQueue</span><span class="tag"><span class="tag-name">destination-jndi-name</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
    <li class=""><span></span><span class="tag"><span class="tag-name">message-driven</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
</ol>
</div>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2.) 使用ActiveMQ RA的配置</p>
<div class="code_title">xml 代码</div>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-xml">
    <li class="alt"><span><span class="tag">&lt;</span><span class="tag-name">message-driven</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">ejb-name</span><span class="tag">&gt;</span><span>ActiveMQMDP</span><span class="tag"><span class="tag-name">ejb-name</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comments"><!-- 使用了resource-adapter-name --></span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">resource-adapter-name</span><span class="tag">&gt;</span><span>activemq-ra.rar</span><span class="tag"><span class="tag-name">resource-adapter-name</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comments"><!-- 这里的configuration-name 需要和后面container-name 的名字相同 --></span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">configuration-name</span><span class="tag">&gt;</span><span>ActiveMQ&nbsp;Message&nbsp;Driven&nbsp;Bean</span><span class="tag"><span class="tag-name">configuration-name</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
    <li class="alt"><span></span><span class="tag"><span class="tag-name">message-driven</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
</ol>
</div>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2.&nbsp;<font color="#ff0000">jboss.xml</font> 配置<font face="Arial">invoker&nbsp;proxy和container 支持ActiveMQ RA</font></p>
<div class="code_title">xml 代码</div>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-xml">
    <li class="alt"><span><span class="tag">&lt;</span><span class="tag-name">invoker-proxy-bindings</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">invoker-proxy-binding</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">name</span><span class="tag">&gt;</span><span>activemq-message-driven-bean</span><span class="tag"><span class="tag-name">name</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">invoker-mbean</span><span class="tag">&gt;</span><span>default</span><span class="tag"><span class="tag-name">invoker-mbean</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">proxy-factory</span><span class="tag">&gt;</span><span>org.jboss.ejb.plugins.inflow.JBossMessageEndpointFactory</span><span class="tag"><span class="tag-name">proxy-factory</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">proxy-factory-config</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">endpoint-interceptors</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">interceptor</span><span class="tag">&gt;</span><span>org.jboss.proxy.ClientMethodInterceptor</span><span class="tag"><span class="tag-name">interceptor</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">interceptor</span><span class="tag">&gt;</span><span>org.jboss.ejb.plugins.inflow.MessageEndpointInterceptor</span><span class="tag"><span class="tag-name">interceptor</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">interceptor</span><span class="tag">&gt;</span><span>org.jboss.proxy.TransactionInterceptor</span><span class="tag"><span class="tag-name">interceptor</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">interceptor</span><span class="tag">&gt;</span><span>org.jboss.invocation.InvokerInterceptor</span><span class="tag"><span class="tag-name">interceptor</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag"><span class="tag-name">endpoint-interceptors</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag"><span class="tag-name">proxy-factory-config</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag"><span class="tag-name">invoker-proxy-binding</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
    <li class="alt"><span></span><span class="tag"><span class="tag-name">invoker-proxy-bindings</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
</ol>
</div>
<p><font face="Arial">MessageDrivenBean的container配置,这里的<container-name></container-name>必须和上面的<configuration-name></configuration-name>相同 才能起作用.</font></p>
<p><font face="Arial"><br />
</font>&nbsp;</p>
<div class="code_title">xml 代码</div>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-xml">
    <li class="alt"><span><span class="tag">&lt;</span><span class="tag-name">container-configurations</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">container-configuration</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">container-name</span><span class="tag">&gt;</span><span>ActiveMQ&nbsp;Message&nbsp;Driven&nbsp;Bean</span><span class="tag"><span class="tag-name">container-name</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">call-logging</span><span class="tag">&gt;</span><span>false</span><span class="tag"><span class="tag-name">call-logging</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">invoker-proxy-binding-name</span><span class="tag">&gt;</span><span>activemq-message-driven-bean</span><span class="tag"><span class="tag-name">invoker-proxy-binding-name</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">container-interceptors</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">interceptor</span><span class="tag">&gt;</span><span>org.jboss.ejb.plugins.ProxyFactoryFinderInterceptor</span><span class="tag"><span class="tag-name">interceptor</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">interceptor</span><span class="tag">&gt;</span><span>org.jboss.ejb.plugins.LogInterceptor</span><span class="tag"><span class="tag-name">interceptor</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">interceptor</span><span class="tag">&gt;</span><span>org.jboss.ejb.plugins.RunAsSecurityInterceptor</span><span class="tag"><span class="tag-name">interceptor</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comments"><!-- CMT --></span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">interceptor</span><span>&nbsp;</span><span class="attribute">transaction</span><span>=</span><span class="attribute-value">&quot;Container&quot;</span><span class="tag">&gt;</span><span>org.jboss.ejb.plugins.TxInterceptorCMT</span><span class="tag"><span class="tag-name">interceptor</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">interceptor</span><span>&nbsp;</span><span class="attribute">transaction</span><span>=</span><span class="attribute-value">&quot;Container&quot;</span><span class="tag">&gt;</span><span>org.jboss.ejb.plugins.CallValidationInterceptor</span><span class="tag"><span class="tag-name">interceptor</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">interceptor</span><span>&nbsp;</span><span class="attribute">transaction</span><span>=</span><span class="attribute-value">&quot;Container&quot;</span><span>&nbsp;</span><span class="attribute">metricsEnabled</span><span>=</span><span class="attribute-value">&quot;true&quot;</span><span class="tag">&gt;</span><span>org.jboss.ejb.plugins.MetricsInterceptor</span><span class="tag"><span class="tag-name">interceptor</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">interceptor</span><span>&nbsp;</span><span class="attribute">transaction</span><span>=</span><span class="attribute-value">&quot;Container&quot;</span><span class="tag">&gt;</span><span>org.jboss.ejb.plugins.MessageDrivenInstanceInterceptor</span><span class="tag"><span class="tag-name">interceptor</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comments"><!-- BMT --></span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">interceptor</span><span>&nbsp;</span><span class="attribute">transaction</span><span>=</span><span class="attribute-value">&quot;Bean&quot;</span><span class="tag">&gt;</span><span>org.jboss.ejb.plugins.MessageDrivenInstanceInterceptor</span><span class="tag"><span class="tag-name">interceptor</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">interceptor</span><span>&nbsp;</span><span class="attribute">transaction</span><span>=</span><span class="attribute-value">&quot;Bean&quot;</span><span class="tag">&gt;</span><span>org.jboss.ejb.plugins.MessageDrivenTxInterceptorBMT</span><span class="tag"><span class="tag-name">interceptor</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">interceptor</span><span>&nbsp;</span><span class="attribute">transaction</span><span>=</span><span class="attribute-value">&quot;Bean&quot;</span><span class="tag">&gt;</span><span>org.jboss.ejb.plugins.CallValidationInterceptor</span><span class="tag"><span class="tag-name">interceptor</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">interceptor</span><span>&nbsp;</span><span class="attribute">transaction</span><span>=</span><span class="attribute-value">&quot;Bean&quot;</span><span>&nbsp;</span><span class="attribute">metricsEnabled</span><span>=</span><span class="attribute-value">&quot;true&quot;</span><span class="tag">&gt;</span><span>org.jboss.ejb.plugins.MetricsInterceptor</span><span class="tag"><span class="tag-name">interceptor</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">interceptor</span><span class="tag">&gt;</span><span>org.jboss.resource.connectionmanager.CachedConnectionInterceptor</span><span class="tag"><span class="tag-name">interceptor</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag"><span class="tag-name">container-interceptors</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">instance-pool</span><span class="tag">&gt;</span><span>org.jboss.ejb.plugins.MessageDrivenInstancePool</span><span class="tag"><span class="tag-name">instance-pool</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">instance-cache</span><span class="tag">&gt;</span><span class="tag"><span class="tag-name">instance-cache</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">persistence-manager</span><span class="tag">&gt;</span><span class="tag"><span class="tag-name">persistence-manager</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">container-pool-conf</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">MaximumSize</span><span class="tag">&gt;</span><span>100</span><span class="tag"><span class="tag-name">MaximumSize</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag"><span class="tag-name">container-pool-conf</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag"><span class="tag-name">container-configuration</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
    <li class="alt"><span></span><span class="tag"><span class="tag-name">container-configurations</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
</ol>
</div>
<p><font face="Arial">以上就是ActiveMQ+JBoss InBound 的配置</font></p>
<p><font face="Arial">三.在Servlet中通过发送消息,验证上面的Message Driven Bean</font></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; <font face="Arial">为了验证这个MessageDrivenBean能够正常工作,我使用一个很简单的servlet向这个queue发送消息,前一篇的activemq-ds.xml 已经提供在启动的时候绑定了JNDI <span>activemq/QueueConnectionFactory,</span><span>activemq/queue/outbound,我们直接使用就行了,</span></font></p>
<div class="code_title">java 代码</div>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-j">
    <li class="alt"><span><span class="keyword">try</span><span>&nbsp;{ &nbsp;&nbsp;</span></span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;initialContext&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;InitialContext(); &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;QueueConnectionFactory&nbsp;connectionFactory&nbsp;=&nbsp;(QueueConnectionFactory)&nbsp;initialContext &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.lookup(</span><span class="string">&quot;java:activemq/QueueConnectionFactory&quot;</span><span>); &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Connection&nbsp;con=connectionFactory.createConnection(); &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Session&nbsp;session&nbsp;=&nbsp;&nbsp;con.createSession(</span><span class="keyword">false</span><span>,&nbsp;Session.AUTO_ACKNOWLEDGE); &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Queue&nbsp;queue&nbsp;=&nbsp;(Queue)&nbsp;initialContext.lookup(</span><span class="string">&quot;activemq/queue/outbound&quot;</span><span>); &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MessageProducer&nbsp;producer&nbsp;=&nbsp;session.createProducer(queue); &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TextMessage&nbsp;txtMessage&nbsp;=&nbsp;session.createTextMessage(); &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;txtMessage.setText(</span><span class="string">&quot;A&quot;</span><span>); &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;producer.send(txtMessage); &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;producer.close(); &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;session.close(); &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;con.close(); &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span class="keyword">catch</span><span>&nbsp;(NamingException&nbsp;e)&nbsp;{ &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;TODO&nbsp;Auto-generated&nbsp;catch&nbsp;block </span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace(); &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span class="keyword">catch</span><span>&nbsp;(JMSException&nbsp;e)&nbsp;{ &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;TODO&nbsp;Auto-generated&nbsp;catch&nbsp;block </span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace(); &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span> </li>
</ol>
</div>
<p><font face="Arial">四.关于durable方式订阅topic的补充说明<br />
</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font face="Arial">使用durable方式,你需要在<font color="#ff0000">ejb-jar.xml</font>中额外的配置,subscriptionDurability,clientId,subscriptionName</font></p>
<font face="Arial">
<div class="code_title">xml 代码</div>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-xml">
    <li class="alt"><span><span class="tag">&lt;</span><span class="tag-name">activation-config</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">activation-config-property</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;...... &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">activation-config-property</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">activation-config-property-name</span><span class="tag">&gt;</span><span>subscriptionDurability</span><span class="tag"><span class="tag-name">activation-config-property-name</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">activation-config-property-value</span><span class="tag">&gt;</span><span>Durable</span><span class="tag"><span class="tag-name">activation-config-property-value</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag"><span class="tag-name">activation-config-property</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">activation-config-property</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">activation-config-property-name</span><span class="tag">&gt;</span><span>clientId</span><span class="tag"><span class="tag-name">activation-config-property-name</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">activation-config-property-value</span><span class="tag">&gt;</span><span>foo</span><span class="tag"><span class="tag-name">activation-config-property-value</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag"><span class="tag-name">activation-config-property</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">activation-config-property</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">activation-config-property-name</span><span class="tag">&gt;</span><span>subscriptionName</span><span class="tag"><span class="tag-name">activation-config-property-name</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">activation-config-property-value</span><span class="tag">&gt;</span><span>bar</span><span class="tag"><span class="tag-name">activation-config-property-value</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag"><span class="tag-name">activation-config-property</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;...... &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag"><span class="tag-name">activation-config-property</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
    <li class=""><span></span><span class="tag"><span class="tag-name">activation-config</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
</ol>
</div>
<p>&nbsp;</p>
<p>ok 这样就可以使用durable方式订阅topic了。</p>
<p>参考文档:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="http://activemq.apache.org/jboss-integration.html">JBoss <font face="Arial">Integration</font></a><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="http://activemq.apache.org/inbound-communication.html">ActiveMQ </a><font face="Arial"><a href="javascript:void(0);/*1173454067250*/">Inbound Communication<br />
</a>　&nbsp;&nbsp; <a href="http://activemq.apache.org/outbound-communication.html">ActiveMQ <font face="Arial">Outbound Communication</font></a></font><br />
</p>
</font><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font></font></font></font></font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font></font></font><font face="Arial">&nbsp;&nbsp;&nbsp;&nbsp;</font>
          <br/>
          <span style="color:red;">
            <a href="http://cctvx1.javaeye.com/blog/58690#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 09 Mar 2007 23:02:48 +0800</pubDate>
        <link>http://cctvx1.javaeye.com/blog/58690</link>
        <guid>http://cctvx1.javaeye.com/blog/58690</guid>
      </item>
      <item>
        <title>ActiveMQ 实践之路(三) ActiveMQ 4.x +JBoss 4.x 整合篇</title>
        <author>cctvx1</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://cctvx1.javaeye.com">cctvx1</a>&nbsp;
          链接：<a href="http://cctvx1.javaeye.com/blog/58056" style="color:red;">http://cctvx1.javaeye.com/blog/58056</a>&nbsp;
          发表时间: 2007年03月07日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ActiveMQ本身是开源项目,所以采用ActiveMQ的项目往往也是以其他开源软件共同构建,目前主流开源应用服务器有Boss,geronimo,JOnAs，而其中geronimo 默认的JMS Provider就是ActiveMQ，那我们就着重介绍ActiveMQ与JBoss,JOnAs的整合方案</p>
<p>本文参考了 <a href="http://devzone.logicblaze.com/site/integrating-apache-activemq-with-jboss.html">Integrating Apache ActiveMQ with JBoss</a>与<a href="http://activemq.apache.org/jboss-integration.html">JBoss Integration</a>,再根据笔者实际整合经验总结而成。</p>
<p>&nbsp;<font face="Arial">一.整合需要的环境.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; jdk1.5<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;jboss-4.0.5.GA<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; activemq-ra-4.1.0-incubator.rar&nbsp; (在ActiveMQ 4.*&nbsp; <font face="Arial">lib\optional 目录里面有对应的ra的压缩包</font>)<br />
　　　开始整合前请确保jboss能够正确的启动起来。</font> </p>
<div><font face="Arial">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font face="Arial">二.整合步骤<br />
<br />
</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font face="Arial">1. 步骤一: 解压activemq-rar-4.1.0-incubator.rar 到 jboss-4.0.5.GA\server\default\deploy\<font color="#ff0000">activemq-ra.rar</font> (这个是目录名字) 下面是activemq-rar.rar目录下面的文件和子目录,请注意红色标记的地方(后面会逐一说明,整合的过程)<br />
</font><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font face="Arial">activeio-core-3.0.0-incubator.jar<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; activemq-core-4.1.0-incubator.jar<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; activemq-ra-4.1.0-incubator.jar<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; backport-util-concurrent-2.1.jar<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; commons-logging-1.0.3.jar<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; derby-10.1.1.0.jar<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; geronimo-j2ee-management_1.0_spec-1.0.jar<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color="#ff0000">spring-2.0.jar<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; spring-1.2.6.jar <br />
</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color="#ff0000">xbean-spring-2.7.jar<br />
</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color="#ff0000">broker-config.xml</font><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; META-INF&nbsp;<br />
&nbsp;<font face="Arial">2.步骤二. 删除多余的<font color="#ff0000">spring-1.2.6.jar</font>,由于4.1.0的ra里面包含了2个不同版本的spring会触发一个exception的产生,https://issues.apache.org/activemq/browse/AMQ-1124, 而且为了以后能够使用新的spring schema配置方式,我们这里会删除<font color="#ff0000">spring-1.2.6.jar</font>,保留<font color="#ff0000">spring-2.0.jar</font>。(最新的snapshot version的ra已经去掉了这个多余的<font color="#ff0000">spring-1.2.6.jar</font>).</font>
<p><font face="Arial"><font face="Arial">&nbsp;&nbsp;<font face="Arial">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3.步骤三: 修改META-INF\ra.xml,让JBoss使用broker-config.xml 作为默认的配置文件配置borker. 修改下面的地方<br />
</font></font></font></p>
<div class="code_title"></div>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-xml">
    <li class="alt"><span><span class="tag">&lt;</span><span class="tag-name">config-property-value</span><span class="tag">&gt;</span><span class="tag"><span class="tag-name">config-property-value</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></span> </span></li>
    <li class=""><span></span><span class="comments">&lt;!--&nbsp; &lt;config-property-value&gt;xbean:broker-config.xml&lt;/config-property-value&gt;--&gt;</span><span>&nbsp;&nbsp;</span> </li>
</ol>
</div>
<p>&nbsp;　　　　&nbsp;改为:<br />
</p>
<div>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-xml">
    <li class="alt"><span><span class="comments">&lt;!-- &lt;config-property-value&gt;&lt;/config-property-value&gt;&nbsp;--&gt;</span><span>&nbsp;&nbsp;</span></span> </li>
    <li class=""><span></span><span class="tag">&lt;</span><span class="tag-name">config-property-value</span><span class="tag">&gt;</span><span>xbean:broker-config.xml</span><span class="tag"><span class="tag-name">config-property-value</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </span></li>
</ol>
</div>
<br />
　　　　表示使用broker-config.xml来配置启动ActiveMQ.</div>
<div>&nbsp;</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;4.步骤四: 修改borker-config.xml,默认的borker-config.xml会产生一个错误,无论是我使用的版本还是最后的snapshot版本,默认的borker-config.xml都会让xbean-spring 2.7(snapshot 使用的是2.8)抛出exception.解决的办法如下</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;将&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-xml">
    <li class="alt"><span><span class="tag">&lt;</span><span class="tag-name">beans</span><span>&nbsp;</span><span class="attribute">xmlns</span><span>=</span><span class="attribute-value">&quot;http://activemq.org/config/1.0&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">broker</span><span>&nbsp;</span><span class="attribute">useJmx</span><span>=</span><span class="attribute-value">&quot;true&quot;</span><span>&nbsp;</span><span class="tag">&gt;</span><span>&nbsp; &nbsp;&nbsp;</span> </li>
</ol>
</div>
</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </div>
<div>&nbsp;&nbsp;&nbsp;&nbsp; 改为</div>
<div>
<div class="code_title">&nbsp;</div>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-xml">
    <li class="alt"><span><span class="tag">&lt;</span><span class="tag-name">beans</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span> </li>
    <li class=""><span></span><span class="tag">&lt;</span><span class="tag-name">broker</span><span>&nbsp;</span><span class="attribute">useJmx</span><span>=</span><span class="attribute-value">&quot;true&quot;</span><span>&nbsp;</span><span class="attribute">xmlns</span><span>=</span><span class="attribute-value">&quot;http://activemq.org/config/1.0&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </li>
</ol>
</div>
</div>
<div>&nbsp;</div>
<div>&nbsp;&nbsp; 即可</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 5.步骤五: 将xbean-spring-2.7.jar (或者是2.8) 复制到jboss-4.0.5.GA\server\default\lib下面</div>
<div>&nbsp;</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 三 使用整合完毕的ActiveMQ作为ds绑定到JBoss的JNDI服务。</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;编写jboss-4.0.5.GA\server\default\depoly\activemq-ds.xml
<div class="code_title">xml 代码</div>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-xml">
    <li class="alt"><span><span class="tag">&lt;?</span><span class="tag-name">xml</span><span>&nbsp;</span><span class="attribute">version</span><span>=</span><span class="attribute-value">&quot;1.0&quot;</span><span>&nbsp;</span><span class="attribute">encoding</span><span>=</span><span class="attribute-value">&quot;UTF-8&quot;</span><span class="tag">?&gt;</span><span>&nbsp;&nbsp;</span></span> </li>
    <li class=""><span>&lt;!DOCTYPE&nbsp;connection-factories &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;PUBLIC&nbsp;&quot;-//JBoss//DTD&nbsp;JBOSS&nbsp;JCA&nbsp;Config&nbsp;1.5//EN&quot; &nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&quot;http://www.jboss.org/j2ee/dtd/jboss-ds_1_5.dtd&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span></span><span class="tag">&lt;</span><span class="tag-name">connection-factories</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">tx-connection-factory</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">jndi-name</span><span class="tag">&gt;</span><span>activemq/QueueConnectionFactory</span><span class="tag">&lt;/</span><span class="tag-name">jndi-name</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">xa-transaction</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">track-connection-by-tx</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">rar-name</span><span class="tag">&gt;</span><span>activemq-ra.rar</span><span class="tag">&lt;/</span><span class="tag-name">rar-name</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">connection-definition</span><span class="tag">&gt;</span><span>javax.jms.QueueConnectionFactory</span><span class="tag">&lt;/</span><span class="tag-name">connection-definition</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">ServerUrl</span><span class="tag">&gt;</span><span>tcp://localhost:61616</span><span class="tag">&lt;/</span><span class="tag-name">ServerUrl</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">min-pool-size</span><span class="tag">&gt;</span><span>1</span><span class="tag">&lt;/</span><span class="tag-name">min-pool-size</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">max-pool-size</span><span class="tag">&gt;</span><span>200</span><span class="tag">&lt;/</span><span class="tag-name">max-pool-size</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">blocking-timeout-millis</span><span class="tag">&gt;</span><span>30000</span><span class="tag">&lt;/</span><span class="tag-name">blocking-timeout-millis</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">idle-timeout-minutes</span><span class="tag">&gt;</span><span>3</span><span class="tag">&lt;/</span><span class="tag-name">idle-timeout-minutes</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;/</span><span class="tag-name">tx-connection-factory</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">tx-connection-factory</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">jndi-name</span><span class="tag">&gt;</span><span>activemq/TopicConnectionFactory</span><span class="tag">&lt;/</span><span class="tag-name">jndi-name</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">xa-transaction</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">track-connection-by-tx</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">rar-name</span><span class="tag">&gt;</span><span>activemq-ra.rar</span><span class="tag">&lt;/</span><span class="tag-name">rar-name</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">connection-definition</span><span class="tag">&gt;</span><span>javax.jms.TopicConnectionFactory</span><span class="tag">&lt;/</span><span class="tag-name">connection-definition</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">ServerUrl</span><span class="tag">&gt;</span><span>tcp://localhost:61616</span><span class="tag">&lt;/</span><span class="tag-name">ServerUrl</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">min-pool-size</span><span class="tag">&gt;</span><span>1</span><span class="tag">&lt;/</span><span class="tag-name">min-pool-size</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">max-pool-size</span><span class="tag">&gt;</span><span>200</span><span class="tag">&lt;/</span><span class="tag-name">max-pool-size</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">blocking-timeout-millis</span><span class="tag">&gt;</span><span>30000</span><span class="tag">&lt;/</span><span class="tag-name">blocking-timeout-millis</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">idle-timeout-minutes</span><span class="tag">&gt;</span><span>3</span><span class="tag">&lt;/</span><span class="tag-name">idle-timeout-minutes</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;/</span><span class="tag-name">tx-connection-factory</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">mbean</span><span>&nbsp;</span><span class="attribute">code</span><span>=</span><span class="attribute-value">&quot;org.jboss.resource.deployment.AdminObject&quot;</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;activemq.queue:name=outboundQueue&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">attribute</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;JNDIName&quot;</span><span class="tag">&gt;</span><span>activemq/queue/outbound</span><span class="tag">&lt;/</span><span class="tag-name">attribute</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">depends</span><span>&nbsp;</span><span class="attribute">optional-attribute-name</span><span>=</span><span class="attribute-value">&quot;RARName&quot;</span><span class="tag">&gt;</span><span class="attribute">jboss.jca:service</span><span>=</span><span class="attribute-value">RARDeployment</span><span>,</span><span class="attribute">name</span><span>=&amp;apos;activemq-ra.rar&amp;apos;</span><span class="tag">&lt;/</span><span class="tag-name">depends</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">attribute</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;Type&quot;</span><span class="tag">&gt;</span><span>javax.jms.Queue</span><span class="tag">&lt;/</span><span class="tag-name">attribute</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">attribute</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;Properties&quot;</span><span class="tag">&gt;</span><span class="attribute">PhysicalName</span><span>=</span><span class="attribute-value">queue</span><span>.outbound</span><span class="tag">&lt;/</span><span class="tag-name">attribute</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;/</span><span class="tag-name">mbean</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">mbean</span><span>&nbsp;</span><span class="attribute">code</span><span>=</span><span class="attribute-value">&quot;org.jboss.resource.deployment.AdminObject&quot;</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;activemq.topic:name=inboundTopic&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">attribute</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;JNDIName&quot;</span><span class="tag">&gt;</span><span>activemq/topic/inbound</span><span class="tag">&lt;/</span><span class="tag-name">attribute</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">depends</span><span>&nbsp;</span><span class="attribute">optional-attribute-name</span><span>=</span><span class="attribute-value">&quot;RARName&quot;</span><span class="tag">&gt;</span><span class="attribute">jboss.jca:service</span><span>=</span><span class="attribute-value">RARDeployment</span><span>,</span><span class="attribute">name</span><span>=&amp;apos;activemq-ra.rar&amp;apos;</span><span class="tag">&lt;/</span><span class="tag-name">depends</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">attribute</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;Type&quot;</span><span class="tag">&gt;</span><span>javax.jms.Topic</span><span class="tag">&lt;/</span><span class="tag-name">attribute</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">attribute</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;Properties&quot;</span><span class="tag">&gt;</span><span class="attribute">PhysicalName</span><span>=</span><span class="attribute-value">topic</span><span>.inbound</span><span class="tag">&lt;/</span><span class="tag-name">attribute</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;/</span><span class="tag-name">mbean</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </li>
    <li class=""><span>&nbsp;&nbsp;</span> </li>
    <li class="alt"><span></span><span class="tag">&lt;/</span><span class="tag-name">connection-factories</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </li>
</ol>
</div>
</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 启动JBoss.如果看见以下信息就表示ActiveMQ已经成功启动,并且使用上面的ds配置文件成功地将topic/queue绑定到了JNDI服务上。</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ......</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font face="Arial">[TransportConnector] Connector tcp://localhost:61616 Started<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [NetworkConnector] Network Connector bridge Started<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [BrokerService] ActiveMQ JMS Message Broker (localhost, ID:MyNoteBook-2165-1173250880171-1:0) started</font></div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ......</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font face="Arial">[ConnectionFactoryBindingService] Bound ConnectionManager 'jboss.jca:service=ConnectionFactoryBinding,name=activemq/QueueConnectionFactory' to JNDI name 'java:activemq/QueueConnectionFactory'<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [ConnectionFactoryBindingService] Bound ConnectionManager 'jboss.jca:service=ConnectionFactoryBinding,name=activemq/TopicConnectionFactory' to JNDI name 'java:activemq/TopicConnectionFactory'<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [AdminObject] Bound admin object 'org.apache.activemq.command.ActiveMQQueue' at 'activemq/queue/outbound'<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [AdminObject] Bound admin object 'org.apache.activemq.command.ActiveMQTopic' at 'activemq/topic/inbound</font></div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ......</div>
<div></div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;四.验证ActiveMQ+JBoss</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 这里你可以使用简单的jms&nbsp; client连接到broker-config.xml里面的协议连接器上面,默认的是tcp://localhost:61616</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在后面我们会在此整合基础上开发Message Driver Bean和使用spring&nbsp;MDP 2种构架&nbsp;来验证本次ActiveMQ+JBoss的整合。</div>
</font></font></div>
          <br/>
          <span style="color:red;">
            <a href="http://cctvx1.javaeye.com/blog/58056#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 07 Mar 2007 20:04:00 +0800</pubDate>
        <link>http://cctvx1.javaeye.com/blog/58056</link>
        <guid>http://cctvx1.javaeye.com/blog/58056</guid>
      </item>
      <item>
        <title>ActiveMQ 实践之路(二) 使用Queue或者Topic发送/接受消息</title>
        <author>cctvx1</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://cctvx1.javaeye.com">cctvx1</a>&nbsp;
          链接：<a href="http://cctvx1.javaeye.com/blog/55624" style="color:red;">http://cctvx1.javaeye.com/blog/55624</a>&nbsp;
          发表时间: 2007年02月25日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p><font face="Arial">本篇主要讲解在未使用其他框架(Spring)整合情况下,独立基于ActiveMQ,使用JMS规范进行消息通信。<br />
&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; 一.JMS回顾<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 因为ActiveMQ是一个JMS Provider的实现,因此在开始实作前,有必要复习下JMS的基础知识<br />
&nbsp;&nbsp;&nbsp; Java Message Service (JMS)是sun提出来的为J2EE提供企业消息处理的一套规范,JMS目前有2套规范还在使用JMS 1.0.2b和1.1. 1.1已经成为主流的JMS Provider事实上的标准了.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *1.1主要在session上面有一些重要改变,比如支持建立同一session上的transaction,让他支持同时发送P2P(Queue)消息和接受<br />
Topic消息。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在JMS中间主要定义了2种消息模式Point-to-Point (点对点),Publich/Subscribe Model (发布/订阅者)，<br />
&nbsp;&nbsp;&nbsp; 其中在Publich/Subscribe 模式下又有Nondurable subscription和durable subscription (持久化订阅)2种消息处理方式。<br />
&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; 下面是JMS规范基本的接口和实现<br />
&nbsp;&nbsp;&nbsp;&nbsp; JMS Common Interfacse PTP-Specific Interface&nbsp;&nbsp; Pub/Sub-specific interfaces<br />
&nbsp;&nbsp;&nbsp;&nbsp; ConnectionFactory&nbsp;&nbsp;&nbsp;&nbsp; QueueConnectionFactory&nbsp;&nbsp; TopicConnectionFactory<br />
&nbsp;&nbsp;&nbsp;&nbsp; Connection&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; QueueConnection&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TopicConnection<br />
&nbsp;&nbsp;&nbsp;&nbsp; Destination&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Queue&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Topic<br />
&nbsp;&nbsp;&nbsp;&nbsp; Session&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; QueueSession&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TopiSession<br />
&nbsp;&nbsp;&nbsp;&nbsp; MessageProducer&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; QueueSender&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TopicPublisher<br />
&nbsp;&nbsp;&nbsp;&nbsp; MessageConsumer&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; QueueReceiver/QueueBrwer TopicSubscriber</font></p>
<font face="Arial">
<p><br />
&nbsp;&nbsp;&nbsp;&nbsp; 二.使用Queue </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 下面以ActiveMQ example的代码为主进行说明<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1. 使用ActiveMQ的Connection，ConnectionFactory 建立连接,注意这里没有用到pool<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
<div class="code_title">java 代码</div>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-j">
    <li class="alt"><span><span class="keyword">import</span><span>&nbsp;org.apache.activemq.ActiveMQConnection &nbsp;&nbsp;</span></span></li>
    <li class=""><span></span><span class="keyword">import</span><span>&nbsp;org.apache.activemq.ActiveMQConnectionFactory &nbsp;&nbsp;</span></li>
</ol>
</div>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //建立Connection<br />
</p>
<div class="code_title">java 代码</div>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-j">
    <li class="alt"><span><span class="keyword">protected</span><span>&nbsp;Connection&nbsp;createConnection()&nbsp;</span><span class="keyword">throws</span><span>&nbsp;JMSException,&nbsp;Exception&nbsp;{ &nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ActiveMQConnectionFactory&nbsp;connectionFactory&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;ActiveMQConnectionFactory(user,&nbsp;pwd,&nbsp;url); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Connection&nbsp;connection&nbsp;=&nbsp;connectionFactory.createConnection(); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>&nbsp;(durable&nbsp;&amp;&amp;&nbsp;clientID!=</span><span class="keyword">null</span><span>)&nbsp;{ &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;connection.setClientID(clientID); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;connection.start(); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;connection; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li>
</ol>
</div>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //建立Session<br />
&nbsp;&nbsp;</p>
<div class="code_title">java 代码</div>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-j">
    <li class="alt"><span><span class="keyword">protected</span><span>&nbsp;Session&nbsp;createSession(Connection&nbsp;connection)&nbsp;</span><span class="keyword">throws</span><span>&nbsp;Exception&nbsp;{ &nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Session&nbsp;session&nbsp;=&nbsp;connection.createSession(transacted,&nbsp;ackMode); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;session; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
</ol>
</div>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2。发送消息的代码<br />
&nbsp;//建立QueueSession<br />
&nbsp;</p>
<div class="code_title">java 代码</div>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-j">
    <li class="alt"><span><span class="keyword">protected</span><span>&nbsp;MessageProducer&nbsp;createProducer(Session&nbsp;session)&nbsp;</span><span class="keyword">throws</span><span>&nbsp;JMSException&nbsp;{ &nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Destincation&nbsp;destination&nbsp;=&nbsp;session.createQueue(</span><span class="string">&quot;queue.hello&quot;</span><span>); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MessageProducer&nbsp;producer&nbsp;=&nbsp;session.createProducer(destination); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>(&nbsp;timeToLive!=</span><span class="number">0</span><span>&nbsp;) &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;producer.setTimeToLive(timeToLive); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;producer; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
</ol>
</div>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //使用Producer发送消息到Queue<br />
&nbsp;&nbsp;&nbsp;&nbsp; </p>
<div class="code_title">java 代码</div>
<div class="dp-highlighter">
<ol class="dp-j">
    <li class="alt"><span><span>producer.send(message); &nbsp;&nbsp;</span></span></li>
</ol>
</div>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3。接受消息,在JMS规范里面,你可以使用<br />
&nbsp;&nbsp; </p>
<div class="code_title">java 代码</div>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-j">
    <li class="alt"><span><span>QueueReceiver/QueueBrowser直接接受消息,但是更多的情况下我们采用消息通知方式,即实现MessageListener接口 &nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;onMessage(Message&nbsp;message)&nbsp;{ &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;</span><span class="comment">//process&nbsp;message </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;} &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;</span><span class="comment">//set&nbsp;MessageListner&nbsp;,receive&nbsp;message </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;Destincation&nbsp;destination&nbsp;=&nbsp;session.createQueue(</span><span class="string">&quot;queue.hello&quot;</span><span>); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;consumer&nbsp;=&nbsp;session.createConsumer(destination); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;consumer.setMessageListener(</span><span class="keyword">this</span><span>); &nbsp;&nbsp;</span></li>
</ol>
</div>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 以上就是使用jms queue发送接受消息的基本方式</p>
<p>&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; 三 Topic</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1. 建立连接<br />
&nbsp;&nbsp;&nbsp;</p>
<div class="code_title">java 代码</div>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-j">
    <li class="alt"><span><span class="keyword">protected</span><span>&nbsp;Connection&nbsp;createConnection()&nbsp;</span><span class="keyword">throws</span><span>&nbsp;JMSException,&nbsp;Exception&nbsp;{&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ActiveMQConnectionFactory&nbsp;connectionFactory&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;ActiveMQConnectionFactory(user,&nbsp;pwd,&nbsp;url);&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Connection&nbsp;connection&nbsp;=&nbsp;connectionFactory.createConnection();&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//如果你要使用DurableSubScription&nbsp;方式,你必须为connection设置一个ClientID&nbsp;&nbsp;&nbsp; </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>&nbsp;(durable&nbsp;&amp;&amp;&nbsp;clientID!=</span><span class="keyword">null</span><span>)&nbsp;{&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;connection.setClientID(clientID);&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;connection.start();&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;connection;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
</ol>
</div>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2. 建立Session<br />
</p>
<div class="code_title">java 代码</div>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-j">
    <li class="alt"><span><span class="keyword">protected</span><span>&nbsp;Session&nbsp;createSession(Connection&nbsp;connection)&nbsp;</span><span class="keyword">throws</span><span>&nbsp;Exception&nbsp;{&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Session&nbsp;session&nbsp;=&nbsp;connection.createSession(transacted,&nbsp;ackMode);&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;session;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
</ol>
</div>
<p>&nbsp;3.创建Producer 发送消息到Topic&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>
<div class="code_title">java 代码</div>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-j">
    <li class="alt"><span><span class="comment">//create&nbsp;topic&nbsp;on&nbsp;&nbsp;session </span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;topic&nbsp;=&nbsp;session.createTopic(</span><span class="string">&quot;topic.hello&quot;</span><span>); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;producer&nbsp;=&nbsp;session.createProducer(topic); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//send&nbsp;message&nbsp; </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;producer.send(message); &nbsp;&nbsp;</span></li>
</ol>
</div>
<p><br />
&nbsp;4.创建Consumer接受消息(基本上和Queue相同)</p>
<div class="code_title">java 代码</div>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-j">
    <li class="alt"><span><span>Destincation&nbsp;destination&nbsp;&nbsp;=&nbsp;session.createTopic(</span><span class="string">&quot;topic.hello&quot;</span><span>);&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></span></li>
    <li class=""><span>MessageConsumer&nbsp;consumer&nbsp;=&nbsp;session.createConsumer(destination);&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>consumer.setMessageListener(</span><span class="keyword">this</span><span>);&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//如果你使用的是Durable&nbsp;Subscription方式,你必须在建立connection的时候&nbsp;&nbsp;&nbsp; </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//设置ClientID,而且建立comsumer的时候使用createDurableSubscriber方法,为他指定一个consumerName。&nbsp;&nbsp;&nbsp; </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;</span><span class="comment">//connection.setClientID(clientId);&nbsp;&nbsp;&nbsp; </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;</span><span class="comment">//consumer&nbsp;=&nbsp;session.createDurableSubscriber((Topic)&nbsp;destination,&nbsp;consumerName);&nbsp;</span><span>&nbsp;&nbsp;</span></li>
</ol>
</div>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;四:连接ActiveMQ的方式<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ActiveMQConnectionFactory 提供了多种连接到Broker的方式<a href="http://activemq.apache.org/uri-protocols.html" title="ActiveMQ连接协议">activemq.apache.org/uri-protocols.html</a></p>
<p>&nbsp;常见的有<br />
&nbsp;vm://host:port&nbsp;&nbsp;&nbsp;&nbsp; //vm <br />
&nbsp;tcp://host:port&nbsp;&nbsp;&nbsp; //tcp<br />
&nbsp;ssl://host:port&nbsp;&nbsp;&nbsp; //SSL<br />
&nbsp;stomp://host:port&nbsp; //stomp协议可以跨语言,目前有很多种stomp client 库(java,c#,c/c++,ruby,python...);</p>
</font>
          <br/>
          <span style="color:red;">
            <a href="http://cctvx1.javaeye.com/blog/55624#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sun, 25 Feb 2007 21:11:58 +0800</pubDate>
        <link>http://cctvx1.javaeye.com/blog/55624</link>
        <guid>http://cctvx1.javaeye.com/blog/55624</guid>
      </item>
      <item>
        <title>SpringSide2 MDP补充说明</title>
        <author>cctvx1</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://cctvx1.javaeye.com">cctvx1</a>&nbsp;
          链接：<a href="http://cctvx1.javaeye.com/blog/54967" style="color:red;">http://cctvx1.javaeye.com/blog/54967</a>&nbsp;
          发表时间: 2007年02月21日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <h1><a name="SpringSide2MDP-%E5%85%B3%E4%BA%8ESpringSide2MDP%E8%A1%A5%E5%85%85%E8%AF%B4%E6%98%8E" class=""></a>关于SpringSide2 MDP补充说明</h1>
<p>&nbsp;&nbsp;&nbsp;&nbsp; 作者：<span class="nobr"><a href="http://www.blogjava.net/cctvx1/" linktext="cctvx1|http://www.blogjava.net/cctvx1/" linktype="raw" title="Visit page outside Confluence" rel="nofollow" mce_href="http://www.blogjava.net/cctvx1/">cctvx1<sup><img class="rendericon" src="/images/icons/linkext7.gif" border="0" height="7" align="absMiddle" alt="" mce_src="/images/icons/linkext7.gif" width="7" /></sup></a></span>&thinsp;(SpringSide.org.cn 保留版权，转载请注明出处<span class="nobr"><a href="http://wiki.springside.org.cn/display/springside/ActiveMQ" linktext="http://wiki.springside.org.cn/display/springside/ActiveMQ" linktype="raw" title="Visit page outside Confluence" rel="nofollow" mce_href="http://wiki.springside.org.cn/display/springside/ActiveMQ">http://wiki.springside.org.cn/display/springside/ActiveMQ<sup><img class="rendericon" src="/images/icons/linkext7.gif" border="0" height="7" align="absMiddle" alt="" mce_src="/images/icons/linkext7.gif" width="7" /></sup></a></span>&thinsp;)</p>
<h2><a name="SpringSide2MDP-1.MessageDrivenPOJO" class=""></a>1.Message Driven POJO</h2>
<h3><a name="SpringSide2MDP-1.1Container" class=""></a>1.1 Container</h3>
<p>&nbsp;&nbsp;&nbsp;在SpringSide2(以下简称为ss2)中主要使用Spring 2.0+ActiveMQ来完成MDP,让开发者能够更简单的使用消息驱动,Spring 2.0提供了更好的MDP支持,你可以直接使用</p>
<p>org.springframework.jms.listener.DefaultMessageListenerContainer 来充当Container 接受消息,同时ss2也提供使用jencks充当container的配置文件,jencks能够更好的管理pool或者线程池。</p>
<h3><a name="SpringSide2MDP-1.2MessageListenerAdapter" class=""></a>1.2 MessageListenerAdapter</h3>
<p>&nbsp;&nbsp;&nbsp;为了让POJO接受消息,还需要配置MessageListenerAdapter,org.springframework.jms.listener.adapter.MessageListenerAdapter能够让一个普通的POJO接受消息,ss2的</p>
<p>org.springside.bookstore.components.activemq.OrderMessageConsumer 就是一个用来接受消息的POJO,这里无论使用哪种Container 都能够使用Spring 提供的MessageListenerAdapter</p>
<p>&nbsp;<!--d-->&nbsp;</p>
<div class="code_title">xml 代码</div>
<div class="dp-highlighter">
<div class="bar"></div>
<ol class="dp-xml">
    <li class="alt"><span><span>&lt;!-&nbsp;&nbsp;Message&nbsp;Driven&nbsp;POJO&nbsp;(MDP)&nbsp;-</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">bean</span><span>&nbsp;</span><span class="attribute">id</span><span>=</span><span class="attribute-value">&quot;messageListener&quot;</span><span>&nbsp;</span><span class="attribute">class</span><span>=</span><span class="attribute-value">&quot;org.springframework.jms.listener.adapter.MessageListenerAdapter&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">constructor-arg</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">bean</span><span>&nbsp;</span><span class="attribute">class</span><span>=</span><span class="attribute-value">&quot;org.springside.bookstore.components.activemq.OrderMessageConsumer&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">property</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;mailService&quot;</span><span>&nbsp;</span><span class="attribute">ref</span><span>=</span><span class="attribute-value">&quot;mailService&quot;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;/</span><span class="tag-name">bean</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span><span class="tag">&lt;/</span><span class="tag-name">constructor-arg</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&lt;!-&nbsp;&nbsp;may&nbsp;be&nbsp;other&nbsp;method&nbsp;-</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">property</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;defaultListenerMethod&quot;</span><span>&nbsp;</span><span class="attribute">value</span><span>=</span><span class="attribute-value">&quot;sendEmail&quot;</span><span>&nbsp;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&lt;!-&nbsp;custom&nbsp;MessageConverter&nbsp;define&nbsp;-</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">property</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;messageConverter&quot;</span><span>&nbsp;</span><span class="attribute">ref</span><span>=</span><span class="attribute-value">&quot;orderMessageConverter&quot;</span><span>&nbsp;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;</span><span class="tag">&lt;/</span><span class="tag-name">bean</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
</ol>
</div>
<p>&nbsp;</p>
<p>而且在配置中,也能够通过配置defaultListenerMethod 指定接受消息的方法。</p>
<h3><a name="SpringSide2MDP-1.3MessageConverter" class=""></a>1.3 MessageConverter</h3>
<p>&nbsp;&nbsp;&nbsp;Spring提供了一个消息的封装接口MessageConverter,我们需要自行去实现它,从而完成消息的定义,封装.</p>
<p>&nbsp;&nbsp; public Message toMessage(Object obj, Session session) throws JMSException,<br />
&nbsp;&nbsp;&nbsp;MessageConversionException</p>
<p>&nbsp; public Object fromMessage(Message msg) throws JMSException,<br />
&nbsp;&nbsp;&nbsp;MessageConversionException</p>
<p>&nbsp;&nbsp; toMessage 提供了一个消息打包的调用,Spring会在jmstemplate调用template.convertAndSend(this.destination, order);的时候 调用toMessage方法<br />
同时,会在MessageListenerAdapter收到原始的jms消息后,首先调用formMessage,然后把消息解包成普通对象,作为参数再返给OrderMessageConsumer的sendEmail方法</p>
<h3><a name="SpringSide2MDP-1.4Cosumer%E5%92%8CProducter" class=""></a>1.4 Cosumer 和 Producter</h3>
<p>&nbsp;&nbsp;&nbsp;SpringSide 2 的OrderMessageConsumer和OrderMessageProducer 本身都很简单,Producer仅仅调用jmstemplate的converAndSend方法,而Consumer则处理解包后的消息,这里就是处理业务对象Order</p>
<h2><a name="SpringSide2MDP-2.%E4%BD%BF%E7%94%A8%E6%AD%A3%E7%A1%AE%E7%9A%84Message%E7%B1%BB%E5%9E%8B" class=""></a>2.使用正确的Message 类型</h2>
<p>&nbsp; 由于springside2 使用的是ActiveMQ,所以我们还是以ActiveMQ为例讲解具体的Message类型</p>
<h3><a name="SpringSide2MDP-2.1ActiveMQObjectMessage%E4%BD%BF%E7%94%A8%E6%B3%A8%E6%84%8F%E4%BA%8B%E9%A1%B9" class=""></a>2.1 ActiveMQObjectMessage 使用注意事项</h3>
<p>&nbsp;&nbsp;&nbsp;&nbsp; SS2中,在convert中使用的是ActiveMQObjectMessage来封装消息。具体代码参见OrderMessageConvert</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; ActiveMQObjectMessage 这里需要注意的是如果你使用的是setObjectProperty(String key,Object value),那么这里的value要不然是Strings 或者是 primitive类型,要不然就只能是map或者list。这里还有要说明的是,如果你使用embedded-vm(未使用持久化)的时候,即使你的Order,OrderItem,Product未实现Serialzable接口,也不会报错,但是一旦你的broker配置了持久化或者是远程broker或者使用其他的transport协议的时候,就会提示Order is not primitive type,因此在springside2 最新的版本中,OrderMessageConver的包装形式已经作了修改,会将Order序列化成byte然后发送。也就是我们可以将消息的定义在Conver完成,而对于上层业务来说是透明的,如果你不想Order,OrderItem,Product实现Serializable接口,那么你就需要在Convert作其他的封装用来发送消息.</p>
<h3><a name="SpringSide2MDP-2.2JMS1.1%E5%AF%B9%E4%BA%8E%E6%B6%88%E6%81%AF%E4%B8%BB%E4%BD%93%E7%B1%BB%E5%9E%8B%E7%9A%84%E8%AF%B4%E6%98%8E" class=""></a>2.2 JMS 1.1 对于消息主体类型的说明</h3>
<p>&nbsp;&nbsp;JMS provides five forms of message body. Each form is defined by a message nterface:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&bull; StreamMessage - a message whose body contains a stream of Java primitive values. It is filled and read sequentially.<br />
&nbsp;&nbsp;&nbsp; &bull; MapMessage - a message whose body contains a set of name-value pairs where names are Strings and values are Java primitive types. The entries can be accessed sequentially by enumerator or randomly&nbsp;&nbsp;&nbsp; by name. The order of the entries is undefined.<br />
&nbsp;&nbsp;&nbsp; &bull; TextMessage - a message whose body contains a java.lang.String. The inclusion of this message type is based on our presumption that String messages will be used extensively. One reason for this is that XML will likely become a popular mechanism for representing the content of JMS messages.<br />
&nbsp;&nbsp;&nbsp; &bull; ObjectMessage - a message that contains a Serializable Java object. If a collection of Java objects is needed, one of the collection classes provided in JDK 1.2 can be used.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&bull; BytesMessage - a message that contains a stream of uninterpreted bytes.This message type is for literally encoding a body to match an existing message format. In many cases, it will be possible to use one of the other,self-defining, message types instead. Although JMS allows the use of message properties with byte messages, they are typically not used, since the inclusion of properties may affect the format.</p>
&thinsp;
          <br/>
          <span style="color:red;">
            <a href="http://cctvx1.javaeye.com/blog/54967#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 21 Feb 2007 13:31:57 +0800</pubDate>
        <link>http://cctvx1.javaeye.com/blog/54967</link>
        <guid>http://cctvx1.javaeye.com/blog/54967</guid>
      </item>
      <item>
        <title>ActiveMQ 实践之路(一) 启动你的ActiveMQ</title>
        <author>cctvx1</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://cctvx1.javaeye.com">cctvx1</a>&nbsp;
          链接：<a href="http://cctvx1.javaeye.com/blog/53228" style="color:red;">http://cctvx1.javaeye.com/blog/53228</a>&nbsp;
          发表时间: 2007年02月08日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p><font face="Arial">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp; 作者 cctvx1<br />
&nbsp;&nbsp;&nbsp; 程度: 入门</font></p>
<font face="Arial">
<p><br />
&nbsp;&nbsp;&nbsp; 一.安装ActiveMQ</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 首先去http://activemq.apache.org/download.html 下载最新版本4.1.0release (http://activemq.apache.org/activemq-410-release.html),<br />
&nbsp;&nbsp;&nbsp; 解压apache-activemq-4.1-incubator.zip(或者apache-activemq-4.1-incubator.tar.gz)目录如下:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; +bin&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (windows下面的bat和unix/linux下面的sh)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; +conf&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (activeMQ配置目录,包含最基本的activeMQ配置文件)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; +data&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (默认是空的)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; +docs&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (index,replease版本里面没有文档,-.-b不知道为啥不带)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; +example&nbsp;&nbsp; (几个例子<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; +lib&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (activemMQ使用到的lib)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -apache-activemq-4.1-incubator.jar&nbsp; (ActiveMQ的binary)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -LICENSE.txt&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -NOTICE.txt&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -README.txt<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -user-guide.html</p>
<p><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 你可以使用bin\activemq.bat(activemq) 启动,如果一切顺利,你就会看见类似下面的信息<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (细节可能不一样,比如路径,或者jmx,jdbc信息)</p>
<p>&nbsp; ACTIVEMQ_HOME: D:\java\framework_and_lib\activemq\apache-activemq-4.1-incubator\<br />
bin\..<br />
Loading message broker from: xbean:activemq.xml<br />
INFO&nbsp; BrokerService&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; - ActiveMQ null JMS Message Broker (localho<br />
st) is starting<br />
INFO&nbsp; BrokerService&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; - For help or more information please see:<br />
<a href="http://incubator.apache.org/activemq/" target="_blank">http://incubator.apache.org/activemq/</a><br />
INFO&nbsp; ManagementContext&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; - JMX consoles can connect to service:jmx:r<br />
mi:///jndi/rmi://localhost:1099/jmxrmi<br />
INFO&nbsp; JDBCPersistenceAdapter&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; - Database driver recognized: [apache_derby<br />
_embedded_jdbc_driver]<br />
INFO&nbsp; DefaultDatabaseLocker&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; - Attempting to acquire the exclusive lock<br />
to become the Master broker<br />
INFO&nbsp; DefaultDatabaseLocker&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; - Becoming the master on dataSource: org.ap<br />
ache.derby.jdbc.EmbeddedDataSource@1d840cd<br />
INFO&nbsp; JournalPersistenceAdapter&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; - Journal Recovery Started from: Active Jou<br />
rnal: using 5 x 20.0 Megs at: D:\java\framework_and_lib\activemq\apache-activemq<br />
-4.1-incubator\activemq-data\journal<br />
INFO&nbsp; JournalPersistenceAdapter&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; - Journal Recovered: 0 message(s) in transa<br />
ctions recovered.<br />
INFO&nbsp; TransportServerThreadSupport&nbsp;&nbsp; - Listening for connections at: tcp://P-SUW<br />
EI:61616<br />
WARN&nbsp; MulticastDiscoveryAgent&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; - brokerName not set<br />
INFO&nbsp; TransportConnector&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; - Connector default Started<br />
INFO&nbsp; TransportServerThreadSupport&nbsp;&nbsp; - Listening for connections at: stomp://P-S<br />
UWEI:61613<br />
INFO&nbsp; TransportConnector&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; - Connector stomp Started<br />
INFO&nbsp; NetworkConnector&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; - Network Connector default Started<br />
INFO&nbsp; BrokerService&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; - ActiveMQ JMS Message Broker (localhost, I<br />
D:P-SUWEI-1207-1170916242296-1:0) started&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *。几个小提示<br />
&nbsp; 1. 这个仅仅是最基础的ActiveMQ的配置,很多地方都没有配置因此不要直接使用这个配置用于生产系统<br />
&nbsp; 2. 有的时候由于端口被占用,导致ActiveMQ错误,ActiveMQ可能需要以下端口1099(JMX),61616(默认的TransportConnector)<br />
&nbsp; 3. 如果没有物理网卡,或者MS的LoopBackAdpater Multicast会报一个错误</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; 二. 测试你的ActiveMQ<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 由于ActiveMQ是一个独立的jms provider,所以我们不需要其他任何第三方服务器就可以马上做我们的测试了.编译<br />
&nbsp;&nbsp;&nbsp;&nbsp; example目录下面的程序<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp; ProducerTool/ConsumerTool 是JMS参考里面提到的典型应用,Producer产生消息,Consumer消费消息<br />
&nbsp;&nbsp; 而且这个例子还可以加入参数帮助你测试刚才启动的本地ActiveMQ或者是远程的ActiveMQ</p>
<p>&nbsp;&nbsp; ProducerTool [url] broker的地址,默认的是tcp://localhost:61616 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [true|flase] 是否使用topic,默认是false<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [subject] subject的名字,默认是TOOL.DEFAULT<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [durabl] 是否持久化消息,默认是false<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [messagecount] 发送消息数量,默认是10<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [messagesize] 消息长度,默认是255<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [clientID] durable为true的时候,需要配置clientID<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [timeToLive] 消息存活时间 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [sleepTime] 发送消息中间的休眠时间<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [transacte]&nbsp; 是否采用事务</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ConsumerTool [url] broker的地址,默认的是tcp://localhost:61616 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [true|flase] 是否使用topic,默认是false<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [subject] subject的名字,默认是TOOL.DEFAULT<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [durabl] 是否持久化消息,默认是false<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [maxiumMessages] 接受最大消息数量,0表示不限制<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [clientID] durable为true的时候,需要配置clientID<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [transacte]&nbsp; 是否采用事务<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [sleepTime]&nbsp; 接受消息中间的休眠时间,默认是0,onMeesage方法不休眠<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [receiveTimeOut] 接受超时</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 我们这样可以使用:<br />
&nbsp;&nbsp; java -classpath .\apache-activemq-4.1-incubator.jar;example\bin ProducerTool&nbsp; tcp://192.168.3.142:61616 test.mysubject<br />
&nbsp;&nbsp; java -classpath .\apache-activemq-4.1-incubator.jar;example\bin ConsumerTool&nbsp; tcp://192.168.3.142:61616 test.mysubject</p>
<p>&nbsp;&nbsp; 当然你可以使用上面的参数进行更复杂的测试,持久,事务</p>
<p>&nbsp;&nbsp; 如果出现下面的信息,恭喜你,你的ActiveMQ已经能够工作了<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp; Connecting to URL: tcp://192.168.3.142:61616<br />
&nbsp; Publishing a Message with size 255 to queue: TOOL.DEFAULT<br />
&nbsp; Using non-durable publishing<br />
&nbsp; Sleeping between publish 0 ms<br />
&nbsp; Sending message: Message: 0 sent at: Thu Feb 08 15:05:34 CST 2007&nbsp; ...<br />
&nbsp; Sending message: Message: 1 sent at: Thu Feb 08 15:05:34 CST 2007&nbsp; ...<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 。。。。。。。。</p>
<p><br />
&nbsp; Connecting to URL: tcp://192.168.3.142:61616<br />
&nbsp; Consuming queue: test.mysubject<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Using non-durable subscription<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Received: Message: 0 sent at: Thu Feb 08 14:51:34 CST 2007&nbsp; ...<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Received: Message: 1 sent at: Thu Feb 08 14:51:34 CST 2007&nbsp; ...<br />
&nbsp; 。。。。</p>
<p><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 三.小结<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 我们已经下载,启动,并且用程序测试了我们的ActiveMQ,而后面将在这个能跑得ActiveMQ进一步的走下去,一步一步展示ActiveMQ的高级特性。</p>
<p><br />
</p>
</font>&nbsp;
          <br/>
          <span style="color:red;">
            <a href="http://cctvx1.javaeye.com/blog/53228#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 08 Feb 2007 15:54:42 +0800</pubDate>
        <link>http://cctvx1.javaeye.com/blog/53228</link>
        <guid>http://cctvx1.javaeye.com/blog/53228</guid>
      </item>
      <item>
        <title>ActiveMQ4.1 +Spring2.0的POJO JMS方案(下)[整理版]</title>
        <author>cctvx1</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://cctvx1.javaeye.com">cctvx1</a>&nbsp;
          链接：<a href="http://cctvx1.javaeye.com/blog/52969" style="color:red;">http://cctvx1.javaeye.com/blog/52969</a>&nbsp;
          发表时间: 2007年02月07日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p><a name="ActiveMQ-part2-ActiveMQ4.1%5CSpring2.0%E7%9A%84POJOJMS%E6%96%B9%E6%A1%88%28%E4%B8%8B%29"></a>&nbsp;&nbsp;&nbsp;&nbsp; 版权声明：本文作者<span class="nobr"><a href="http://www.blogjava.net/cctvx1" title="Visit page outside Confluence" rel="nofollow">cctvx1<sup><img class="rendericon" src="http://wiki.springside.org.cn/images/icons/linkext7.gif" border="0" height="7" align="absMiddle" alt="" width="7" /></sup></a></span>(SpringSide保留版权，转载请注明出处：<span class="nobr"><a href="http://wiki.springside.org.cn/display/springside/ActiveMQ-part2" title="Visit page outside Confluence" rel="nofollow">http://wiki.springside.org.cn/display/springside/ActiveMQ-part2<sup><img class="rendericon" src="http://wiki.springside.org.cn/images/icons/linkext7.gif" border="0" height="7" align="absMiddle" alt="" width="7" /></sup></a></span>)</p>
<h2><a name="ActiveMQ-part2-1.%E8%AF%B4%E6%98%8E"></a>1. 说明</h2>
<p>&nbsp;&nbsp; 请先阅读<a href="http://wiki.springside.org.cn/display/springside/ActiveMQ" title="ActiveMQ">ActiveMQ4.1 +Spring2.0的POJO JMS方案(上)</a></p>
<p>&nbsp;&nbsp; 本篇将补充说明了：</p>
<p>&nbsp;&nbsp; 1) 使用数据库持久化消息，保证服务器重启时消息不会丢失<br />
&nbsp;&nbsp; 2) 使用Jencks作正宗的JCA Container。</p>
<h2><a name="ActiveMQ-part2-2.%E6%8C%81%E4%B9%85%E5%8C%96%E6%B6%88%E6%81%AF"></a>2.持久化消息</h2>
<h3><a name="ActiveMQ-part2-2.1%E7%BB%99Broker%E5%8A%A0%E5%85%A5%E9%85%8D%E7%BD%AE"></a>2.1 给Broker加入<font color="#800000">Persistence</font> 配置</h3>
<p>在配置文件applicationContext-activemq-embedded-persitence.xml中的&lt;amq:broker&gt;节点加入&nbsp;&nbsp;</p>
<div class="code">
<div class="codeContent">
<pre class="code-java">&lt;amq:persistenceAdapter&gt;
    &lt;amq:jdbcPersistenceAdapter id=<span class="code-quote">&quot;jdbcAdapter&quot;</span> dataSource=<span class="code-quote">&quot;#hsql-ds&quot;</span> createTablesOnStartup=<span class="code-quote">&quot;<span class="code-keyword">true</span>&quot;</span> useDatabaseLock=<span class="code-quote">&quot;<span class="code-keyword">false</span>&quot;</span>/&gt;
&lt;/amq:persistenceAdapter&gt;</pre>
</div>
</div>
<p>请注意MSSQL(2000/2005)和HSQL由于不支持[SELECT&nbsp; * ACTIVEMQ_LOCK FOR UPDATE ]语法,因此不能使用默认的userDatabaseLock=&quot;true&quot;,只能设置成useDatabaseLock=&quot;false&quot;</p>
<h3><a name="ActiveMQ-part2-2.2%E9%85%8D%E7%BD%AE%E5%A4%9A%E7%A7%8D%E6%95%B0%E6%8D%AE%E6%BA%90"></a>2.2 配置多种数据源</h3>
<p>配置多种数据源,给jdbcPersistenceAdapter使用，SpringSide 中使用的内嵌HSQL</p>
<div class="code">
<div class="codeContent">
<pre class="code-java">&nbsp;&lt;!-- The HSQL Datasource that will be used by the Broker --&gt;
	&lt;bean id=<span class="code-quote">&quot;hsql-ds&quot;</span> class=<span class="code-quote">&quot;org.apache.commons.dbcp.BasicDataSource&quot;</span> destroy-method=<span class="code-quote">&quot;close&quot;</span>&gt;
		&lt;property name=<span class="code-quote">&quot;driverClassName&quot;</span> value=<span class="code-quote">&quot;org.hsqldb.jdbcDriver&quot;</span>/&gt;
		&lt;property name=<span class="code-quote">&quot;url&quot;</span> value=<span class="code-quote">&quot;jdbc:hsqldb:res:hsql/activemq&quot;</span>/&gt;
		&lt;property name=<span class="code-quote">&quot;username&quot;</span> value=<span class="code-quote">&quot;sa&quot;</span>/&gt;
		&lt;property name=<span class="code-quote">&quot;password&quot;</span> value=&quot;&quot;/&gt;
		&lt;property name=<span class="code-quote">&quot;poolPreparedStatements&quot;</span> value=<span class="code-quote">&quot;<span class="code-keyword">true</span>&quot;</span>/&gt;
	&lt;/bean&gt;</pre>
</div>
</div>
<h3><a name="ActiveMQ-part2-2.3%E8%AF%B4%E6%98%8E"></a>2. 3 说明</h3>
<p>&nbsp;&nbsp; 笔者仅仅使用了jdbcPersistenceAdapter,