﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-天道酬勤 tiān dào chóu qín-文章分类-Apache ActiveMQ</title><link>http://www.blogjava.net/abram/category/40692.html</link><description>天将降大任于斯人也，必将苦其心志，劳其筋骨          
宠辱不惊，看庭上花开花落；去留无意，望天上云卷云舒</description><language>zh-cn</language><lastBuildDate>Tue, 07 Jul 2009 03:52:08 GMT</lastBuildDate><pubDate>Tue, 07 Jul 2009 03:52:08 GMT</pubDate><ttl>60</ttl><item><title>ActiveMQ 实践之路(四) ActiveMQ 4.x +JBoss 4.x MDP实战篇（转）</title><link>http://www.blogjava.net/abram/articles/285773.html</link><dc:creator>chong</dc:creator><author>chong</author><pubDate>Tue, 07 Jul 2009 03:16:00 GMT</pubDate><guid>http://www.blogjava.net/abram/articles/285773.html</guid><wfw:comment>http://www.blogjava.net/abram/comments/285773.html</wfw:comment><comments>http://www.blogjava.net/abram/articles/285773.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/abram/comments/commentRss/285773.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/abram/services/trackbacks/285773.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: ActiveMQ 实践之路(四) ActiveMQ 4.x +JBoss 4.x MDP实战篇&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在&lt;&lt;ActiveMQ 实践之路(三) ActiveMQ 4.x +JBoss 4.x 整合篇&nbsp;&gt;&gt;里面我们比较详细的讲解了ActiveMQ与JBoss的整合,既然选择了JBoss,那么项目里面或多或少...&nbsp;&nbsp;<a href='http://www.blogjava.net/abram/articles/285773.html'>阅读全文</a><img src ="http://www.blogjava.net/abram/aggbug/285773.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/abram/" target="_blank">chong</a> 2009-07-07 11:16 <a href="http://www.blogjava.net/abram/articles/285773.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ActiveMQ 实践之路(三) ActiveMQ 4.x +JBoss 4.x 整合篇 （转）</title><link>http://www.blogjava.net/abram/articles/285772.html</link><dc:creator>chong</dc:creator><author>chong</author><pubDate>Tue, 07 Jul 2009 03:15:00 GMT</pubDate><guid>http://www.blogjava.net/abram/articles/285772.html</guid><wfw:comment>http://www.blogjava.net/abram/comments/285772.html</wfw:comment><comments>http://www.blogjava.net/abram/articles/285772.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/abram/comments/commentRss/285772.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/abram/services/trackbacks/285772.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp; &nbsp;ActiveMQ本身是开源项目,所以采用ActiveMQ的项目往往也是以其他开源软件共同构建,目前主流开源应用服务器有Boss,geronimo,JOnAs，而其中geronimo 默认的JMS Provider就是ActiveMQ，那我们就着重介绍ActiveMQ与JBoss,JOnAs的整合方案本文参考了&nbsp;Integrating Apache...&nbsp;&nbsp;<a href='http://www.blogjava.net/abram/articles/285772.html'>阅读全文</a><img src ="http://www.blogjava.net/abram/aggbug/285772.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/abram/" target="_blank">chong</a> 2009-07-07 11:15 <a href="http://www.blogjava.net/abram/articles/285772.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>实践之路(二) 使用Queue或者Topic发送/接受消息 （转）</title><link>http://www.blogjava.net/abram/articles/285771.html</link><dc:creator>chong</dc:creator><author>chong</author><pubDate>Tue, 07 Jul 2009 03:14:00 GMT</pubDate><guid>http://www.blogjava.net/abram/articles/285771.html</guid><wfw:comment>http://www.blogjava.net/abram/comments/285771.html</wfw:comment><comments>http://www.blogjava.net/abram/articles/285771.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/abram/comments/commentRss/285771.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/abram/services/trackbacks/285771.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 本篇主要讲解在未使用其他框架(Spring)整合情况下,独立基于ActiveMQ,使用JMS规范进行消息通信。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 一.JMS回顾&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 因为ActiveMQ是一个JMS Provider的实现,因此在开始实作前,有必...&nbsp;&nbsp;<a href='http://www.blogjava.net/abram/articles/285771.html'>阅读全文</a><img src ="http://www.blogjava.net/abram/aggbug/285771.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/abram/" target="_blank">chong</a> 2009-07-07 11:14 <a href="http://www.blogjava.net/abram/articles/285771.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ActiveMQ4.1 +Spring2.0的POJO JMS方案(下)[整理版]（转）</title><link>http://www.blogjava.net/abram/articles/285770.html</link><dc:creator>chong</dc:creator><author>chong</author><pubDate>Tue, 07 Jul 2009 03:13:00 GMT</pubDate><guid>http://www.blogjava.net/abram/articles/285770.html</guid><wfw:comment>http://www.blogjava.net/abram/comments/285770.html</wfw:comment><comments>http://www.blogjava.net/abram/articles/285770.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/abram/comments/commentRss/285770.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/abram/services/trackbacks/285770.html</trackback:ping><description><![CDATA[<span  style="font-family: Arial; font-size: 12px; line-height: 18px; ">
<div class="page_info" style="background-color: transparent; color: gray; padding-top: 2px; padding-right: 2px; padding-bottom: 2px; padding-left: 5px; margin-bottom: 10px; ">原创作者:&nbsp;<a href="http://www.javaeye.com/topic/52969" target="_blank" style="color: #006699; text-decoration: none; ">cctvx1</a>&nbsp;&nbsp; 阅读:650次&nbsp;&nbsp; 评论:0条&nbsp;&nbsp; 更新时间:2007-02-07&nbsp;&nbsp;&nbsp;&nbsp;</div>
<div class="content" style="padding-top: 5px; padding-right: 0px; padding-bottom: 5px; padding-left: 5px; ">
<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><a name="ActiveMQ-part2-ActiveMQ4.1%5CSpring2.0%E7%9A%84POJOJMS%E6%96%B9%E6%A1%88%28%E4%B8%8B%29" style="color: #006699; text-decoration: none; width: 20px; height: 20px; text-indent: 20px; background-repeat: no-repeat; background-image: url(http://www.blogjava.net/CuteSoft_Client/CuteEditor/Load.ashx?type=image&amp;file=anchor.gif); "></a>&nbsp;&nbsp;&nbsp;&nbsp; 版权声明：本文作者<span class="nobr"><a title="Visit page outside Confluence" rel="nofollow" href="http://www.blogjava.net/cctvx1" style="color: #006699; text-decoration: none; ">cctvx1<sup><img class="rendericon" height="7" alt="" width="7" align="absMiddle" border="0" src="http://wiki.springside.org.cn/images/icons/linkext7.gif" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; " /></sup></a></span>(SpringSide保留版权，转载请注明出处：<span class="nobr"><a title="Visit page outside Confluence" rel="nofollow" href="http://wiki.springside.org.cn/display/springside/ActiveMQ-part2" style="color: #006699; text-decoration: none; ">http://wiki.springside.org.cn/display/springside/ActiveMQ-part2<sup><img class="rendericon" height="7" alt="" width="7" align="absMiddle" border="0" src="http://wiki.springside.org.cn/images/icons/linkext7.gif" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; " /></sup></a></span>)</p>
<h2 style="font-size: 16px !important; line-height: 1.5em; margin-top: 0px; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; padding-top: 15px; padding-right: 0px; padding-bottom: 3px; padding-left: 5px; color: black; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: #cccccc; "><a name="ActiveMQ-part2-1.%E8%AF%B4%E6%98%8E" style="color: #006699; text-decoration: none; width: 20px; height: 20px; text-indent: 20px; background-repeat: no-repeat; background-image: url(http://www.blogjava.net/CuteSoft_Client/CuteEditor/Load.ashx?type=image&amp;file=anchor.gif); "></a>1. 说明</h2>
<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">&nbsp;&nbsp; 请先阅读<a title="ActiveMQ" href="http://wiki.springside.org.cn/display/springside/ActiveMQ" style="color: #006699; text-decoration: none; ">ActiveMQ4.1 +Spring2.0的POJO JMS方案(上)</a></p>
<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">&nbsp;&nbsp; 本篇将补充说明了：</p>
<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">&nbsp;&nbsp; 1) 使用数据库持久化消息，保证服务器重启时消息不会丢失<br />
&nbsp;&nbsp; 2) 使用Jencks作正宗的JCA Container。</p>
<h2 style="font-size: 16px !important; line-height: 1.5em; margin-top: 0px; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; padding-top: 15px; padding-right: 0px; padding-bottom: 3px; padding-left: 5px; color: black; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: #cccccc; "><a name="ActiveMQ-part2-2.%E6%8C%81%E4%B9%85%E5%8C%96%E6%B6%88%E6%81%AF" style="color: #006699; text-decoration: none; width: 20px; height: 20px; text-indent: 20px; background-repeat: no-repeat; background-image: url(http://www.blogjava.net/CuteSoft_Client/CuteEditor/Load.ashx?type=image&amp;file=anchor.gif); "></a>2.持久化消息</h2>
<h3 style="font-size: 1.2em; line-height: 1.5em; margin-top: 0px; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; color: black; "><a name="ActiveMQ-part2-2.1%E7%BB%99Broker%E5%8A%A0%E5%85%A5%E9%85%8D%E7%BD%AE" style="color: #006699; text-decoration: none; width: 20px; height: 20px; text-indent: 20px; background-repeat: no-repeat; background-image: url(http://www.blogjava.net/CuteSoft_Client/CuteEditor/Load.ashx?type=image&amp;file=anchor.gif); "></a>2.1 给Broker加入<font color="#800000">Persistence</font>&nbsp;配置</h3>
<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">在配置文件applicationContext-activemq-embedded-persitence.xml中的&lt;amq:broker&gt;节点加入&nbsp;&nbsp;</p>
<div class="code">
<div class="codeContent">
<pre class="code-java" style="font-family: monospace; font-size: 1em; ">&lt;amq:persistenceAdapter&gt;
&lt;amq:jdbcPersistenceAdapter id=<span class="code-quote">"jdbcAdapter"</span> dataSource=<span class="code-quote">"#hsql-ds"</span> createTablesOnStartup=<span class="code-quote">"<span class="code-keyword">true</span>"</span> useDatabaseLock=<span class="code-quote">"<span class="code-keyword">false</span>"</span>/&gt;
&lt;/amq:persistenceAdapter&gt;</pre>
</div>
</div>
<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">请注意MSSQL(2000/2005)和HSQL由于不支持[SELECT&nbsp; * ACTIVEMQ_LOCK FOR UPDATE ]语法,因此不能使用默认的userDatabaseLock="true",只能设置成useDatabaseLock="false"</p>
<h3 style="font-size: 1.2em; line-height: 1.5em; margin-top: 0px; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; color: black; "><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" style="color: #006699; text-decoration: none; width: 20px; height: 20px; text-indent: 20px; background-repeat: no-repeat; background-image: url(http://www.blogjava.net/CuteSoft_Client/CuteEditor/Load.ashx?type=image&amp;file=anchor.gif); "></a>2.2 配置多种数据源</h3>
<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">配置多种数据源,给jdbcPersistenceAdapter使用，SpringSide 中使用的内嵌HSQL</p>
<div class="code">
<div class="codeContent">
<pre class="code-java" style="font-family: monospace; font-size: 1em; ">&nbsp;&lt;!-- The HSQL Datasource that will be used by the Broker --&gt;
&lt;bean id=<span class="code-quote">"hsql-ds"</span> class=<span class="code-quote">"org.apache.commons.dbcp.BasicDataSource"</span> destroy-method=<span class="code-quote">"close"</span>&gt;
&lt;property name=<span class="code-quote">"driverClassName"</span> value=<span class="code-quote">"org.hsqldb.jdbcDriver"</span>/&gt;
&lt;property name=<span class="code-quote">"url"</span> value=<span class="code-quote">"jdbc:hsqldb:res:hsql/activemq"</span>/&gt;
&lt;property name=<span class="code-quote">"username"</span> value=<span class="code-quote">"sa"</span>/&gt;
&lt;property name=<span class="code-quote">"password"</span> value=""/&gt;
&lt;property name=<span class="code-quote">"poolPreparedStatements"</span> value=<span class="code-quote">"<span class="code-keyword">true</span>"</span>/&gt;
&lt;/bean&gt;</pre>
</div>
</div>
<h3 style="font-size: 1.2em; line-height: 1.5em; margin-top: 0px; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; color: black; "><a name="ActiveMQ-part2-2.3%E8%AF%B4%E6%98%8E" style="color: #006699; text-decoration: none; width: 20px; height: 20px; text-indent: 20px; background-repeat: no-repeat; background-image: url(http://www.blogjava.net/CuteSoft_Client/CuteEditor/Load.ashx?type=image&amp;file=anchor.gif); "></a>2. 3 说明</h3>
<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">&nbsp;&nbsp; 笔者仅仅使用了jdbcPersistenceAdapter,其实在ActiveMQ的XSD已经描述了多种PersistenceAdapter,可以参考对应的XSD文件.</p>
<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">&nbsp;&nbsp;另外对于数据库的差异主要表现在设置了userDatabaseLock="true"之后，ActiveMQ使用的[SELECT * ACTIVEMQ_LOCK&nbsp;FOR UPDATE] 上面，会导致一些数据库出错(测试中MSSQL2000/2005,HSQL都会导致出错)。另外HSQL的脚本请参见activemq.script。</p>
<h2 style="font-size: 16px !important; line-height: 1.5em; margin-top: 0px; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; padding-top: 15px; padding-right: 0px; padding-bottom: 3px; padding-left: 5px; color: black; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: #cccccc; "><a name="ActiveMQ-part2-3.Jenck%28JCAContainer%29%26nbsp%3B%26nbsp%3B" style="color: #006699; text-decoration: none; width: 20px; height: 20px; text-indent: 20px; background-repeat: no-repeat; background-image: url(http://www.blogjava.net/CuteSoft_Client/CuteEditor/Load.ashx?type=image&amp;file=anchor.gif); "></a>3. Jenck(JCA Container)&nbsp;&nbsp;</h2>
<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">&nbsp;&nbsp; Spring 2.0本身使用DefaultMessageListenerContainer 可以充当MDP中的Container角色，但是鉴于Jencks是JCA标准的，它不仅仅能够提供jms的jca整合,包括其他资源比如jdbc都可以做到jca管理</p>
<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">所以,同时完成了这个ActiveMQ+Spring+Jencks 配置演示,更多的针对生产系统的JCA特性展示,会在稍后的开发计划讨论中确定。</p>
<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">&nbsp;&nbsp;&nbsp;&nbsp; 此文档适用于说明使用 Jecncks 和 使用Spring 2.0(DefaultMessageListenerContainer)&nbsp; 充当MDP Container时的区别，同时演示Jecnks 的Spring 2.0 新配置实例。</p>
<h3 style="font-size: 1.2em; line-height: 1.5em; margin-top: 0px; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; color: black; "><a name="ActiveMQ-part2-3.1%E5%BC%95%E5%85%A5ActiveMQResourceAdapter%E5%92%8CJencks%E7%9A%84XSD" style="color: #006699; text-decoration: none; width: 20px; height: 20px; text-indent: 20px; background-repeat: no-repeat; background-image: url(http://www.blogjava.net/CuteSoft_Client/CuteEditor/Load.ashx?type=image&amp;file=anchor.gif); "></a>3.1 引入ActiveMQ ResourceAdapter 和Jencks 的XSD</h3>
<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">&nbsp; 在ApplicationContext.xml(Spring的配置文件)中引入ActiveMQ ResourceAdapter 和Jencks 的XML Scheam 配置文件),如下:</p>
<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">&nbsp;&nbsp; ActiveMQ4.1 响应Spring 2.0号召，支持了引入XML Schema namespace的简单配置语法，简化了配置的语句。&nbsp;</p>
<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">&nbsp; 在ApplicationContext.xml(Spring的配置文件)中引入ActiveMQ的XML Scheam 配置文件),如下:</p>
<div class="code">
<div class="codeContent">
<pre class="code-java" style="font-family: monospace; font-size: 1em; ">&lt;beans
xmlns=<span class="code-quote">"http:<span class="code-comment">//www.springframework.org/schema/beans"</span>   xmlns:amq=<span class="code-quote">"http://activemq.org/config/1.0"</span>   xmlns:ampra=<span class="code-quote">"http://activemq.org/ra/1.0"</span>   xmlns:jencks=<span class="code-quote">"http://jencks.org/1.3"</span>   xmlns:xsi=<span class="code-quote">"http://www.w3.org/2001/XMLSchema-instance"</span>
</span>&nbsp; xsi:schemaLocation="http:<span class="code-comment">//www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
</span>&nbsp; http:<span class="code-comment">//activemq.org/config/1.0 http://people.apache.org/repository/org.apache.activemq/xsds/activemq-core-4.1-incubator-SNAPSHOT.xsd
</span>&nbsp; http:<span class="code-comment">//activemq.org/ra/1.0 http://people.apache.org/repository/org.apache.activemq/xsds/activemq-ra-4.1-incubator-SNAPSHOT.xsd
</span>&nbsp; http:<span class="code-comment">//jencks.org/1.3 http://repository.codehaus.org/org/jencks/jencks/1.3/jencks-1.3.xsd"&gt;</span></pre>
</div>
</div>
<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">由于ActiveMQ RA和Jencks&nbsp;那个XSD 仍然有部分错误，因此使用的是自行修改过的XSD。(是xs:any元素引起的错误)</p>
<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">先在ClassPath根目录放一个修改过的activemq-ra-4.1-incubator-SNAPSHOT.xsd和jencks-1.3.xsd。</p>
<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">同样修改 ClassPath 下面META-INF\spring.schemas&nbsp;<font color="#990000">增加</font>内容如下。这个spring.schemas是spring自定义scheam的配置文件,请注意"http:\://"部分写法</p>
<div class="code">
<div class="codeContent">
<pre class="code-java" style="font-family: monospace; font-size: 1em; ">http\:<span class="code-comment">//people.apache.org/repository/org.apache.activemq/xsds/activemq-ra-4.1-incubator-SNAPSHOT.xsd=/activemq-ra-4.1-incubator-SNAPSHOT.xsd
</span>http\:<span class="code-comment">//repository.codehaus.org/org/jencks/jencks/1.3/jencks-1.3.xsd=/jencks-1.3.xsd</span></pre>
</div>
</div>
<h3 style="font-size: 1.2em; line-height: 1.5em; margin-top: 0px; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; color: black; "><a name="ActiveMQ-part2-3.2%26nbsp%3B%E9%85%8D%E7%BD%AE%E6%96%B9%E6%A1%88" style="color: #006699; text-decoration: none; width: 20px; height: 20px; text-indent: 20px; background-repeat: no-repeat; background-image: url(http://www.blogjava.net/CuteSoft_Client/CuteEditor/Load.ashx?type=image&amp;file=anchor.gif); "></a>3.2 &nbsp;配置方案</h3>
<h3 style="font-size: 1.2em; line-height: 1.5em; margin-top: 0px; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; color: black; "><a name="ActiveMQ-part2-3.2.1%26nbsp%3B%E5%9F%BA%E7%A1%80%E9%9B%B6%E4%BB%B6%26nbsp%3B" style="color: #006699; text-decoration: none; width: 20px; height: 20px; text-indent: 20px; background-repeat: no-repeat; background-image: url(http://www.blogjava.net/CuteSoft_Client/CuteEditor/Load.ashx?type=image&amp;file=anchor.gif); "></a>3.2.1&nbsp;基础零件&nbsp;</h3>
<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><strong style="font-weight: bold; ">1.&nbsp;配置ActiveMQ Broker</strong>&nbsp; 参见&nbsp;<span class="nobr"><a title="Visit page outside Confluence" rel="nofollow" href="http://wiki.springside.org.cn/display/springside/ActiveMQ+Spring" style="color: #006699; text-decoration: none; ">ActiveMQ+Spring<sup><img class="rendericon" height="7" alt="" width="7" align="absMiddle" border="0" src="http://wiki.springside.org.cn/images/icons/linkext7.gif" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; " /></sup></a></span></p>
<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><strong style="font-weight: bold; ">2.&nbsp;配置ActiveMQ Resource Adapter</strong></p>
<div class="code">
<div class="codeContent">
<pre class="code-java" style="font-family: monospace; font-size: 1em; ">&lt;amqra:managedConnectionFactory id=<span class="code-quote">"jmsManagedConnectionFactory"</span> resourceAdapter=<span class="code-quote">"#resourceAdapter"</span>/&gt;&lt;amqra:resourceAdapter id=<span class="code-quote">"resourceAdapter"</span> serverUrl=<span class="code-quote">"vm:<span class="code-comment">//localhost"</span> /&gt;</span></pre>
</div>
</div>
<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><strong style="font-weight: bold; ">3.&nbsp;配置Jencks 基础配置</strong></p>
<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><strong style="font-weight: bold; ">&nbsp;&nbsp;</strong>&nbsp;具体的配置可以参见Jencks的XSD</p>
<div class="code">
<div class="codeContent">
<pre class="code-java" style="font-family: monospace; font-size: 1em; ">&lt;!-- jencks PoolFactory config--&gt;
&lt;jencks:singlePoolFactory id=<span class="code-quote">"poolingSupport"</span> maxSize=<span class="code-quote">"16"</span> minSize=<span class="code-quote">"5"</span> blockingTimeoutMilliseconds=<span class="code-quote">"60"</span> idleTimeoutMinutes=<span class="code-quote">"60"</span> matchOne=<span class="code-quote">"<span class="code-keyword">true</span>"</span> matchAll=<span class="code-quote">"<span class="code-keyword">true</span>"</span> selectOneAssumeMatch=<span class="code-quote">"<span class="code-keyword">true</span>"</span> /&gt;&nbsp;&lt;!-- jencks XATransactionFactory --&gt;
&lt;jencks:xATransactionFactory id=<span class="code-quote">"transactionSupport"</span> useTransactionCaching=<span class="code-quote">"<span class="code-keyword">true</span>"</span> useThreadCaching=<span class="code-quote">"<span class="code-keyword">true</span>"</span> /&gt;&nbsp;&nbsp;
&lt;!-- jencks ConnectionManagerFactory --&gt;
&lt;jencks:connectionManagerFactory id=<span class="code-quote">"connectionManager"</span> containerManagedSecurity=<span class="code-quote">"<span class="code-keyword">false</span>"</span>&nbsp; poolingSupport=<span class="code-quote">"#poolingSupport"</span> transactionSupport=<span class="code-quote">"#transactionSupport"</span> /&gt;&nbsp;&lt;!-- jencks TransactionContextManagerFactory --&gt;
&lt;jencks:transactionContextManagerFactory id=<span class="code-quote">"transactionContextManagerFactory"</span>/&gt;
&nbsp;&nbsp;</pre>
</div>
</div>
<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><strong style="font-weight: bold; ">4.&nbsp;配置给JmsTemplate使用的connectionFactory (主要是生成者/发送者 使用)</strong></p>
<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">&nbsp;&nbsp; 这里注意下,在配置jmsTemplate的使用的targetConnectionFactory就是使用jencks配置的connectionManager</p>
<div class="code">
<div class="codeContent">
<pre class="code-java" style="font-family: monospace; font-size: 1em; ">&lt;!-- spring config jms with jca--&gt;
&nbsp;&lt;bean id=<span class="code-quote">"jmsManagerConnectionFactory"</span> class=<span class="code-quote">"org.springframework.jca.support.LocalConnectionFactoryBean"</span>&gt;
&nbsp;&nbsp;&lt;property name=<span class="code-quote">"managedConnectionFactory"</span>&gt;
&nbsp;&nbsp;&nbsp;&lt;ref local=<span class="code-quote">"jmsManagedConnectionFactory"</span> /&gt;
&nbsp;&nbsp;&lt;/property&gt;
&nbsp;&nbsp;&lt;property name=<span class="code-quote">"connectionManager"</span>&gt;
&nbsp;&nbsp;&nbsp;&lt;ref local=<span class="code-quote">"connectionManager"</span> /&gt;
&nbsp;&nbsp;&lt;/property&gt;
&nbsp;&lt;/bean&gt;
&nbsp;
&nbsp;&lt;!--&nbsp; Spring JmsTemplate config --&gt;
&nbsp;&lt;bean id=<span class="code-quote">"jmsTemplate"</span> class=<span class="code-quote">"org.springframework.jms.core.JmsTemplate"</span>&gt;
&nbsp;&nbsp;&lt;property name=<span class="code-quote">"connectionFactory"</span>&gt;
&nbsp;&nbsp;&nbsp;&lt;!--&nbsp; lets wrap in a pool to avoid creating a connection per send --&gt;
&nbsp;&nbsp;&nbsp;&lt;bean class=<span class="code-quote">"org.springframework.jms.connection.SingleConnectionFactory"</span>&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;property name=<span class="code-quote">"targetConnectionFactory"</span> ref=<span class="code-quote">"jmsManagerConnectionFactory"</span> /&gt;
&nbsp;&nbsp;&nbsp;&lt;/bean&gt;
&nbsp;&nbsp;&lt;/property&gt;
&nbsp;&nbsp;&lt;!-- custom MessageConverter --&gt;
&nbsp;&nbsp;&lt;property name=<span class="code-quote">"messageConverter"</span> ref=<span class="code-quote">"orderMessageConverter"</span> /&gt;
&nbsp;&lt;/bean&gt;&nbsp;&nbsp;</pre>
</div>
</div>
<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><strong style="font-weight: bold; ">5.&nbsp;配置Spring 2.0的MessageListenerAdapter,保证不需要用户实现MessageListener</strong></p>
<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><strong style="font-weight: bold; ">&nbsp;&nbsp;</strong>&nbsp;见<span class="nobr"><a title="Visit page outside Confluence" rel="nofollow" href="http://wiki.springside.org.cn/display/springside/ActiveMQ+Spring" style="color: #006699; text-decoration: none; ">ActiveMQ+Spring<sup><img class="rendericon" height="7" alt="" width="7" align="absMiddle" border="0" src="http://wiki.springside.org.cn/images/icons/linkext7.gif" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; " /></sup></a></span></p>
<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">&nbsp;6.<strong style="font-weight: bold; ">配置Jecnks 充当MDP的Container</strong></p>
<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><strong style="font-weight: bold; ">&nbsp;</strong>&nbsp;就是把上面的MessageListenerAdapter配置到Jencks里面,完成整个MDP的配置</p>
<div class="code">
<div class="codeContent">
<pre class="code-java" style="font-family: monospace; font-size: 1em; ">&nbsp;&lt;!-- Jencks Container--&gt;
&nbsp;&lt;jencks:jcaContainer&gt;&nbsp;&nbsp;	&lt;jencks:bootstrapContext&gt;
&nbsp;&nbsp;&nbsp;		&lt;jencks:bootstrapContextFactory threadPoolSize=<span class="code-quote">"25"</span> /&gt;
&nbsp;&nbsp;	&lt;/jencks:bootstrapContext&gt;
&nbsp;&nbsp;		&lt;jencks:connectors&gt;
&nbsp;&nbsp;&nbsp;	&nbsp;&nbsp;&nbsp;&lt;!-- use jencks container (use spring MessageListenerAdapter)--&gt;
&nbsp;&nbsp;&nbsp;		&lt;jencks:connector ref=<span class="code-quote">"messageListener"</span>&gt;
&nbsp;&nbsp;&nbsp;&nbsp;			&lt;jencks:activationSpec&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;				&lt;amqra:activationSpec destination=<span class="code-quote">"org.apache.activemq.spring.Test.spring.embedded"</span> destinationType=<span class="code-quote">"javax.jms.Queue"</span> /&gt;
&nbsp;&nbsp;&nbsp;&nbsp;			&lt;/jencks:activationSpec&gt;
&nbsp;&nbsp;&nbsp;		&lt;/jencks:connector&gt;&nbsp;&nbsp;	&lt;/jencks:connectors&gt;&nbsp;		&nbsp;&lt;jencks:resourceAdapter&gt;
&nbsp;&nbsp;&nbsp;		&lt;amqra:resourceAdapter serverUrl=<span class="code-quote">"vm:<span class="code-comment">//localhost"</span> /&gt;
</span>&nbsp;&nbsp;	&lt;/jencks:resourceAdapter&gt;
&nbsp;&lt;/jencks:jcaContainer&gt;</pre>
</div>
</div>
</div>
</span>
<img src ="http://www.blogjava.net/abram/aggbug/285770.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/abram/" target="_blank">chong</a> 2009-07-07 11:13 <a href="http://www.blogjava.net/abram/articles/285770.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ActiveMQ4.1 +Spring2.0的POJO JMS方案(上) [整理版]（转）</title><link>http://www.blogjava.net/abram/articles/285769.html</link><dc:creator>chong</dc:creator><author>chong</author><pubDate>Tue, 07 Jul 2009 03:12:00 GMT</pubDate><guid>http://www.blogjava.net/abram/articles/285769.html</guid><wfw:comment>http://www.blogjava.net/abram/comments/285769.html</wfw:comment><comments>http://www.blogjava.net/abram/articles/285769.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/abram/comments/commentRss/285769.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/abram/services/trackbacks/285769.html</trackback:ping><description><![CDATA[<span  style="font-family: Arial; font-size: 12px; line-height: 18px; ">
<div class="page_info" style="background-color: transparent; color: gray; padding-top: 2px; padding-right: 2px; padding-bottom: 2px; padding-left: 5px; margin-bottom: 10px; ">原创作者:&nbsp;<a href="http://www.javaeye.com/topic/52968" target="_blank" style="color: #006699; text-decoration: none; ">cctvx1</a>&nbsp;&nbsp; 阅读:891次&nbsp;&nbsp; 评论:0条&nbsp;&nbsp; 更新时间:2007-02-07&nbsp;&nbsp;&nbsp;&nbsp;</div>
<div class="content" style="padding-top: 5px; padding-right: 0px; padding-bottom: 5px; padding-left: 5px; ">
<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">&nbsp;&nbsp;&nbsp;&nbsp; 作者：<span class="nobr"><a title="Visit page outside Confluence" rel="nofollow" href="http://www.blogjava.net/cctvx1/" style="color: #006699; text-decoration: none; ">cctvx1<sup><img class="rendericon" height="7" alt="" width="7" align="absMiddle" border="0" src="http://wiki.springside.org.cn/images/icons/linkext7.gif" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; " /></sup></a></span>、<span class="nobr"><a title="Visit page outside Confluence" rel="nofollow" href="http://www.blogjava.net/calvin" style="color: #006699; text-decoration: none; ">calvin<sup><img class="rendericon" height="7" alt="" width="7" align="absMiddle" border="0" src="http://wiki.springside.org.cn/images/icons/linkext7.gif" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; " /></sup></a></span>(SpringSide.org.cn 保留版权，转载请注明出处<span class="nobr"><a title="Visit page outside Confluence" rel="nofollow" href="http://wiki.springside.org.cn/display/springside/ActiveMQ" style="color: #006699; text-decoration: none; ">http://wiki.springside.org.cn/display/springside/ActiveMQ<sup><img class="rendericon" height="7" alt="" width="7" align="absMiddle" border="0" src="http://wiki.springside.org.cn/images/icons/linkext7.gif" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; " /></sup></a></span>)</p>
<h2 style="font-size: 16px !important; line-height: 1.5em; margin-top: 0px; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; padding-top: 15px; padding-right: 0px; padding-bottom: 3px; padding-left: 5px; color: black; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: #cccccc; "><a name="ActiveMQ-1.%E6%A6%82%E8%BF%B0" style="color: #006699; text-decoration: none; width: 20px; height: 20px; text-indent: 20px; background-repeat: no-repeat; background-image: url(http://www.blogjava.net/CuteSoft_Client/CuteEditor/Load.ashx?type=image&amp;file=anchor.gif); "></a>1.概述</h2>
<h3 style="font-size: 1.2em; line-height: 1.5em; margin-top: 0px; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; color: black; "><a name="ActiveMQ-1.1JMS%E4%B8%8EActiveMQ%E7%89%B9%E6%80%A7%26nbsp%3B%26nbsp%3B" style="color: #006699; text-decoration: none; width: 20px; height: 20px; text-indent: 20px; background-repeat: no-repeat; background-image: url(http://www.blogjava.net/CuteSoft_Client/CuteEditor/Load.ashx?type=image&amp;file=anchor.gif); "></a>1.1 JMS与ActiveMQ特性&nbsp;&nbsp;</h3>
<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">&nbsp;&nbsp;&nbsp;JMS始终在JavaEE五花八门的协议里，WebService满天飞的时候占一位置，是因为：</p>
<ul style="margin-top: 0px; margin-right: 0px; margin-bottom: 1.5em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">
    <li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0.25em; margin-left: 30px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">它可以把不影响用户执行结果又比较耗时的任务（比如发邮件通知管理员）<strong style="font-weight: bold; ">异步</strong>的扔给JMS 服务端去做，而尽快的把屏幕返还给用户。</li>
    <li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0.25em; margin-left: 30px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">服务端能够多线程排队响应高并发的请求，并保证请求不丢失。</li>
    <li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0.25em; margin-left: 30px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">可以在Java世界里达到最高的解耦。客户端与服务端无需直连，甚至无需知晓对方是谁、在哪里、有多少人，只要对流过的信息作响应就行了，在企业应用环境复杂时作用明显。</li>
</ul>
<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">&nbsp;&nbsp;&nbsp;&nbsp;<span class="nobr"><a title="Visit page outside Confluence" rel="nofollow" href="http://www.activemq.org/" style="color: #006699; text-decoration: none; ">ActiveMQ<sup><img class="rendericon" height="7" alt="" width="7" align="absMiddle" border="0" src="http://wiki.springside.org.cn/images/icons/linkext7.gif" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; " /></sup></a></span>的特性：</p>
<ul style="margin-top: 0px; margin-right: 0px; margin-bottom: 1.5em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">
    <li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0.25em; margin-left: 30px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">完全支持JMS1.1和J2EE 1.4规范的 JMS Provider实现，也是Apache Geronimo默认的JMS provider。</li>
    <li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0.25em; margin-left: 30px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">POJO withdout EJB Container，不需要实现EJB繁琐复杂的Message Bean接口和配置。</li>
    <li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0.25em; margin-left: 30px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">Spring Base，可以使用Spring的各种特性如IOC、AOP&nbsp;。</li>
    <li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0.25em; margin-left: 30px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">Effective，基于Jencks的JCA Container实现&nbsp;pool connection，control transactions and manage security。&nbsp;</li>
</ul>
<h3 style="font-size: 1.2em; line-height: 1.5em; margin-top: 0px; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; color: black; "><a name="ActiveMQ-1.2SpringSide%E7%9A%84%E5%AE%8C%E5%85%A8POJO%E7%9A%84JMS%E6%96%B9%E6%A1%88%26nbsp%3B%26nbsp%3B%26nbsp%3B" style="color: #006699; text-decoration: none; width: 20px; height: 20px; text-indent: 20px; background-repeat: no-repeat; background-image: url(http://www.blogjava.net/CuteSoft_Client/CuteEditor/Load.ashx?type=image&amp;file=anchor.gif); "></a>1.2 SpringSide 的完全POJO的JMS方案&nbsp;&nbsp;&nbsp;</h3>
<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">&nbsp;&nbsp;<span class="nobr"><a title="Visit page outside Confluence" rel="nofollow" href="http://www.springside.org.cn/" style="color: #006699; text-decoration: none; ">SpringSide 2.0<sup><img class="rendericon" height="7" alt="" width="7" align="absMiddle" border="0" src="http://wiki.springside.org.cn/images/icons/linkext7.gif" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; " /></sup></a></span>在BookStore示例中，演示了用户下订单时，将发通知信到用户邮箱的动作，通过JMS交给JMS服务端异步完成，避免了邮件服务器的堵塞而影响用户的下订。</p>
<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">&nbsp; 全部代码于examples\bookstore\src\java\org\springside\bookstore\components\activemq 目录中。</p>
<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">&nbsp; 一个JMS场景通常需要三者参与：</p>
<ul style="margin-top: 0px; margin-right: 0px; margin-bottom: 1.5em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">
    <li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0.25em; margin-left: 30px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">一个POJO的的Message Producer，负责使用Spring的JMS Template发送消息。</li>
    <li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0.25em; margin-left: 30px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">一个Message Converter，负责把Java对象如订单(Order)转化为消息，使得Producer能够直接发送POJO。</li>
    <li style="margin-top: 0px; margin-right: 0px; margin-bottom: 0.25em; margin-left: 30px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">一个MDP Message Consumer，负责接收并处理消息。</li>
</ul>
<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">&nbsp;&nbsp;<span class="nobr"><a title="Visit page outside Confluence" rel="nofollow" href="http://www.springside.org.cn/" style="color: #006699; text-decoration: none; ">SpringSide 2.0<sup><img class="rendericon" height="7" alt="" width="7" align="absMiddle" border="0" src="http://wiki.springside.org.cn/images/icons/linkext7.gif" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; " /></sup></a></span>采用了ActiveMQ 4.1-incubator 与Spring 2.0 集成，对比SS1.0M3，有三个值得留意的地方，使得代码中几乎不见一丝JMS的侵入代码：</p>
<ol style="font-size: 1em; line-height: 1.4em; margin-top: 0px; margin-right: 0px; margin-bottom: 1.5em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">
    <li style="font-size: 1em; margin-top: 0px; margin-right: 0px; margin-bottom: 0.25em; margin-left: 30px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">采用Spring2.0的Schema式简化配置。</li>
    <li style="font-size: 1em; margin-top: 0px; margin-right: 0px; margin-bottom: 0.25em; margin-left: 30px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">实现Message Converter转化消息与对象，使得Producer能够直接发送POJO而不是JMS Message。</li>
    <li style="font-size: 1em; margin-top: 0px; margin-right: 0px; margin-bottom: 0.25em; margin-left: 30px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">使用了Spring2.0的DefaultMessageListenerContainer与MessageListenerAdapter，消息接收者不用实现MessageListener 接口。</li>
    <li style="font-size: 1em; margin-top: 0px; margin-right: 0px; margin-bottom: 0.25em; margin-left: 30px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">同时，Spring 2.0 的DefaultMessageListenerContainer 代替了SS1.0M3中的<span class="nobr"><a title="Visit page outside Confluence" rel="nofollow" href="http://jencks.codehaus.org/" style="color: #006699; text-decoration: none; ">Jenck(JCA Container)<sup><img class="rendericon" height="7" alt="" width="7" align="absMiddle" border="0" src="http://wiki.springside.org.cn/images/icons/linkext7.gif" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; " /></sup></a></span>，充当MDP Container的角色。</li>
</ol>
<h2 style="font-size: 16px !important; line-height: 1.5em; margin-top: 0px; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; padding-top: 15px; padding-right: 0px; padding-bottom: 3px; padding-left: 5px; color: black; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: #cccccc; "><a name="ActiveMQ-2.%E5%BC%95%E5%85%A5ActiveMQ%E7%9A%84XSD" style="color: #006699; text-decoration: none; width: 20px; height: 20px; text-indent: 20px; background-repeat: no-repeat; background-image: url(http://www.blogjava.net/CuteSoft_Client/CuteEditor/Load.ashx?type=image&amp;file=anchor.gif); "></a>2.引入ActiveMQ的XSD</h2>
<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">&nbsp; ActiveMQ4.1 响应Spring 2.0号召，支持了引入XML Schema namespace的简单配置语法，简化了配置的语句。&nbsp;</p>
<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">&nbsp; 在ApplicationContext.xml(Spring的配置文件)中引入ActiveMQ的XML Scheam 配置文件),如下:</p>
<div class="code">
<div class="codeContent">
<pre class="code-java" style="font-family: monospace; font-size: 1em; ">&lt;beans
&nbsp;&nbsp;xmlns=<span class="code-quote">"http:<span class="code-comment">//www.springframework.org/schema/beans"</span>
</span>&nbsp;&nbsp;xmlns:amq=<span class="code-quote">"http:<span class="code-comment">//activemq.org/config/1.0"</span>
</span>&nbsp;&nbsp;xmlns:xsi=<span class="code-quote">"http:<span class="code-comment">//www.w3.org/2001/XMLSchema-instance"</span>
</span>&nbsp;&nbsp;xsi:schemaLocation="http:<span class="code-comment">//www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
</span>&nbsp; http:<span class="code-comment">//activemq.org/config/1.0 http://people.apache.org/repository/org.apache.activemq/xsds/activemq-core-4.1-incubator-SNAPSHOT.xsd"&gt;</span></pre>
</div>
</div>
<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">由于ActiveMQ4.1 SnapShot的那个XSD有部分错误，因此使用的是自行修改过的XSD。</p>
<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">先在ClassPath根目录放一个修改过的activemq-core-4.1-incubator-SNAPSHOT.xsd。</p>
<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">在ClassPath 下面建立META-INF\spring.schemas 内容如下。这个spring.schemas是spring自定义scheam的配置文件,请注意"http:\://"部分写法</p>
<div class="code">
<div class="codeContent">
<pre class="code-java" style="font-family: monospace; font-size: 1em; ">http\:<span class="code-comment">//people.apache.org/repository/org.apache.activemq/xsds/activemq-core-4.1-incubator-SNAPSHOT.xsd=/activemq-core-4.1-incubator-SNAPSHOT.xsd</span></pre>
</div>
</div>
<h2 style="font-size: 16px !important; line-height: 1.5em; margin-top: 0px; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; padding-top: 15px; padding-right: 0px; padding-bottom: 3px; padding-left: 5px; color: black; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: #cccccc; "><a name="ActiveMQ-3.%E9%85%8D%E7%BD%AE%E6%96%B9%E6%A1%88" style="color: #006699; text-decoration: none; width: 20px; height: 20px; text-indent: 20px; background-repeat: no-repeat; background-image: url(http://www.blogjava.net/CuteSoft_Client/CuteEditor/Load.ashx?type=image&amp;file=anchor.gif); "></a>3. 配置方案</h2>
<h3 style="font-size: 1.2em; line-height: 1.5em; margin-top: 0px; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; color: black; "><a name="ActiveMQ-3.1%26nbsp%3B%E5%9F%BA%E7%A1%80%E9%9B%B6%E4%BB%B6%26nbsp%3B" style="color: #006699; text-decoration: none; width: 20px; height: 20px; text-indent: 20px; background-repeat: no-repeat; background-image: url(http://www.blogjava.net/CuteSoft_Client/CuteEditor/Load.ashx?type=image&amp;file=anchor.gif); "></a>3.1&nbsp;基础零件&nbsp;</h3>
<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><strong style="font-weight: bold; ">1.&nbsp;配置ActiveMQ Broker</strong>&nbsp;&nbsp;</p>
<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">&nbsp;&nbsp; 暂时采用在JVM中嵌入这种最简单的模式，&nbsp; 当spring初始化时候，ActiveMQ embedded Broker 就会启动了。</p>
<div class="code">
<div class="codeContent">
<pre class="code-java" style="font-family: monospace; font-size: 1em; ">&lt;!--&nbsp; lets create an embedded ActiveMQ Broker --&gt;
&lt;amq:broker useJmx=<span class="code-quote">"<span class="code-keyword">false</span>"</span> persistent=<span class="code-quote">"<span class="code-keyword">false</span>"</span>&gt;
&nbsp;&nbsp;	&lt;amq:transportConnectors&gt;
&lt;amq:transportConnector uri=<span class="code-quote">"tcp:<span class="code-comment">//localhost:0"</span>/&gt;
</span>　	&lt;/amq:transportConnectors&gt;
&lt;/amq:broker&gt;</pre>
</div>
</div>
<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><strong style="font-weight: bold; ">2. 配置(A)ConnectionFactory</strong></p>
<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">&nbsp; 由于前面配置的Broker是JVM embedded 所以URL为:vm://localhost</p>
<div class="code">
<div class="codeContent">
<pre class="code-java" style="font-family: monospace; font-size: 1em; ">&lt;!--&nbsp; ActiveMQ connectionFactory to use&nbsp; --&gt;
&nbsp;&lt;amq:connectionFactory id=<span class="code-quote">"jmsConnectionFactory"</span> brokerURL=<span class="code-quote">"vm:<span class="code-comment">//localhost"</span>/&gt;</span></pre>
</div>
</div>
<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><strong style="font-weight: bold; ">3 配置(B)Queue</strong></p>
<div class="code">
<div class="codeContent">
<pre class="code-java" style="font-family: monospace; font-size: 1em; ">&lt;!--&nbsp; ActiveMQ destinations to use&nbsp; --&gt;
&nbsp;&lt;amq:queue name=<span class="code-quote">"destination"</span> physicalName=<span class="code-quote">"org.apache.activemq.spring.Test.spring.embedded"</span>/&gt;</pre>
</div>
</div>
<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><strong style="font-weight: bold; ">4.&nbsp;配置(C)Converter</strong></p>
<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><strong style="font-weight: bold; ">&nbsp;&nbsp;</strong>&nbsp;配置Conveter，使得Producer能够直接发送Order对象，而不是JMS的Message对象。</p>
<div class="code">
<div class="codeContent">
<pre class="code-java" style="font-family: monospace; font-size: 1em; ">&lt;!--&nbsp; OrderMessage converter&nbsp; --&gt;
&nbsp;&lt;bean id=<span class="code-quote">"orderMessageConverter"</span> class=<span class="code-quote">"org.springside.bookstore.components.activemq.OrderMessageConverter"</span>/&gt;&nbsp;&nbsp;</pre>
</div>
</div>
<h3 style="font-size: 1.2em; line-height: 1.5em; margin-top: 0px; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; color: black; "><a name="ActiveMQ-3.2%26nbsp%3B%26nbsp%3B%E5%8F%91%E9%80%81%E7%AB%AF%26nbsp%3B" style="color: #006699; text-decoration: none; width: 20px; height: 20px; text-indent: 20px; background-repeat: no-repeat; background-image: url(http://www.blogjava.net/CuteSoft_Client/CuteEditor/Load.ashx?type=image&amp;file=anchor.gif); "></a>3.2&nbsp;&nbsp;发送端&nbsp;</h3>
<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><strong style="font-weight: bold; ">1 配置JmsTemplate</strong></p>
<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">&nbsp;&nbsp; Spring提供的Template，绑定了(A)ConnectionFactory与(C)Converter。</p>
<div class="code">
<div class="codeContent">
<pre class="code-java" style="font-family: monospace; font-size: 1em; ">&lt;!--&nbsp; Spring JmsTemplate config --&gt;
&nbsp;&lt;bean id=<span class="code-quote">"jmsTemplate"</span> class=<span class="code-quote">"org.springframework.jms.core.JmsTemplate"</span>&gt;
&nbsp;&nbsp;&lt;property name=<span class="code-quote">"connectionFactory"</span>&gt;
&nbsp;&nbsp;&nbsp;&lt;!--&nbsp; lets wrap in a pool to avoid creating a connection per send --&gt;
&nbsp;&nbsp;&nbsp;&lt;bean class=<span class="code-quote">"org.springframework.jms.connection.SingleConnectionFactory"</span>&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&lt;property name=<span class="code-quote">"targetConnectionFactory"</span> ref=<span class="code-quote">"jmsConnectionFactory"</span>/&gt;
&nbsp;&nbsp;&nbsp;&lt;/bean&gt;
&nbsp;&nbsp;&lt;/property&gt;
&nbsp;&nbsp;&lt;!-- custom MessageConverter --&gt;
&nbsp;&nbsp;&lt;property name=<span class="code-quote">"messageConverter"</span> ref=<span class="code-quote">"orderMessageConverter"</span>/&gt;
&nbsp;&lt;/bean&gt;</pre>
</div>
</div>
<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><strong style="font-weight: bold; ">2.Producer</strong></p>
<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">&nbsp;&nbsp; 消息发送者，使用JmsTemplate发送消息，绑定了JmsTemplate (含A、C)与(B)Queue。</p>
<div class="code">
<div class="codeContent">
<pre class="code-java" style="font-family: monospace; font-size: 1em; ">&lt;!-- POJO which send Message uses&nbsp; Spring JmsTemplate，绑定JMSTemplate 与Queue --&gt;
&nbsp;&lt;bean id=<span class="code-quote">"orderMessageProducer"</span> class=<span class="code-quote">"org.springside.bookstore.components.activemq.OrderMessageProducer"</span>&gt;
&nbsp;&nbsp;&lt;property name=<span class="code-quote">"template"</span> ref=<span class="code-quote">"jmsTemplate"</span>/&gt;
&nbsp;&nbsp;&lt;property name=<span class="code-quote">"destination"</span> ref=<span class="code-quote">"destination"</span>/&gt;
&nbsp;&lt;/bean&gt;</pre>
</div>
</div>
<h3 style="font-size: 1.2em; line-height: 1.5em; margin-top: 0px; margin-right: 0px; margin-bottom: 0.5em; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; color: black; "><a name="ActiveMQ-3.3%E6%8E%A5%E6%94%B6%E7%AB%AF" style="color: #006699; text-decoration: none; width: 20px; height: 20px; text-indent: 20px; background-repeat: no-repeat; background-image: url(http://www.blogjava.net/CuteSoft_Client/CuteEditor/Load.ashx?type=image&amp;file=anchor.gif); "></a>3.3 接收端</h3>
<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><strong style="font-weight: bold; ">&nbsp;&nbsp;1.接收处理者(MDP)</strong></p>
<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">&nbsp;&nbsp;&nbsp; 使用Spring的MessageListenerAdapter，指定负责处理消息的POJO及其方法名，绑定(C)Converter。</p>
<div class="code">
<div class="codeContent">
<pre class="code-java" style="font-family: monospace; font-size: 1em; ">&nbsp;&nbsp;&lt;!--&nbsp; Message Driven POJO (MDP)，绑定Converter --&gt;
&nbsp;&lt;bean id=<span class="code-quote">"messageListener"</span> class=<span class="code-quote">"org.springframework.jms.listener.adapter.MessageListenerAdapter"</span>&gt;
&nbsp;&nbsp;&lt;constructor-arg&gt;
&nbsp;&nbsp;&nbsp;&lt;bean class=<span class="code-quote">"org.springside.bookstore.components.activemq.OrderMessageConsumer"</span>&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&lt;property name=<span class="code-quote">"mailService"</span> ref=<span class="code-quote">"mailService"</span>/&gt;
&nbsp;&nbsp;&nbsp;&lt;/bean&gt;
&nbsp;&nbsp;&lt;/constructor-arg&gt;
&nbsp;&nbsp;&lt;!--&nbsp; may be other method --&gt;
&nbsp;&nbsp;&lt;property name=<span class="code-quote">"defaultListenerMethod"</span> value=<span class="code-quote">"sendEmail"</span>/&gt;
&nbsp;&nbsp;&lt;!-- custom MessageConverter define --&gt;
&nbsp;&nbsp;&lt;property name=<span class="code-quote">"messageConverter"</span> ref=<span class="code-quote">"orderMessageConverter"</span>/&gt;
&nbsp;&lt;/bean&gt;&nbsp;</pre>
</div>
</div>
<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><strong style="font-weight: bold; ">2. listenerContainer</strong></p>
<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">&nbsp;&nbsp;&nbsp;&nbsp;负责调度MDP，&nbsp;绑定(A) connectionFactory, (B)Queue和MDP。</p>
<div class="code">
<div class="codeContent">
<pre class="code-java" style="font-family: monospace; font-size: 1em; ">&lt;!--&nbsp; <span class="code-keyword">this</span> is the attendant message listener container --&gt;
&nbsp;&lt;bean id=<span class="code-quote">"listenerContainer"</span> class=<span class="code-quote">"org.springframework.jms.listener.DefaultMessageListenerContainer"</span>&gt;
&nbsp;&nbsp;&lt;property name=<span class="code-quote">"connectionFactory"</span> ref=<span class="code-quote">"jmsConnectionFactory"</span>/&gt;
&nbsp;&nbsp;&lt;property name=<span class="code-quote">"destination"</span> ref=<span class="code-quote">"destination"</span>/&gt;
&nbsp;&nbsp;&lt;property name=<span class="code-quote">"messageListener"</span> ref=<span class="code-quote">"messageListener"</span>/&gt;
&nbsp;&lt;/bean&gt;</pre>
</div>
</div>
<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">&nbsp; 互相绑定的关系有点晕，发送端和接收端都以不同形式绑定了(A) connectionFactory, (B)Queue和 (C)Converter。</p>
</div>
</span>
<img src ="http://www.blogjava.net/abram/aggbug/285769.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/abram/" target="_blank">chong</a> 2009-07-07 11:12 <a href="http://www.blogjava.net/abram/articles/285769.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ActiveMQ 实践之路(一) 启动你的ActiveMQ  ...转</title><link>http://www.blogjava.net/abram/articles/285768.html</link><dc:creator>chong</dc:creator><author>chong</author><pubDate>Tue, 07 Jul 2009 03:11:00 GMT</pubDate><guid>http://www.blogjava.net/abram/articles/285768.html</guid><wfw:comment>http://www.blogjava.net/abram/comments/285768.html</wfw:comment><comments>http://www.blogjava.net/abram/articles/285768.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/abram/comments/commentRss/285768.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/abram/services/trackbacks/285768.html</trackback:ping><description><![CDATA[<span  style="font-family: Arial; font-size: 12px; line-height: 18px; ">
<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><font face="Arial">&nbsp;&nbsp; 作者 cctvx1<br />
&nbsp;&nbsp;&nbsp; 程度: 入门</font></p>
<font face="Arial">
<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><br />
&nbsp;&nbsp;&nbsp; 一.安装ActiveMQ</p>
<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">&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;&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;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -NOTICE.txt&nbsp;&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 style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 你可以使用bin\activemq.bat(activemq) 启动,如果一切顺利,你就会看见类似下面的信息<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (细节可能不一样,比如路径,或者jmx,jdbc信息)</p>
<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">&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 />
http://incubator.apache.org/activemq/<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 style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">&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 style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">&nbsp;&nbsp;&nbsp;&nbsp; 二. 测试你的ActiveMQ<br />
&nbsp;&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;&nbsp;<br />
&nbsp;&nbsp; ProducerTool/ConsumerTool 是JMS参考里面提到的典型应用,Producer产生消息,Consumer消费消息<br />
&nbsp;&nbsp; 而且这个例子还可以加入参数帮助你测试刚才启动的本地ActiveMQ或者是远程的ActiveMQ</p>
<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">&nbsp;&nbsp; ProducerTool [url] broker的地址,默认的是tcp://localhost:61616&nbsp;<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] 消息存活时间&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [sleepTime] 发送消息中间的休眠时间<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [transacte]&nbsp; 是否采用事务</p>
<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">&nbsp;&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&nbsp;<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;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [clientID] durable为true的时候,需要配置clientID<br />
&nbsp;&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 style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">&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 style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">&nbsp;&nbsp; 当然你可以使用上面的参数进行更复杂的测试,持久,事务</p>
<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">&nbsp;&nbsp; 如果出现下面的信息,恭喜你,你的ActiveMQ已经能够工作了<br />
&nbsp;&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 style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><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 style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 三.小结<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 我们已经下载,启动,并且用程序测试了我们的ActiveMQ,而后面将在这个能跑得ActiveMQ进一步的走下去,一步一步展示ActiveMQ的高级特性。</p>
</font></span>
<img src ="http://www.blogjava.net/abram/aggbug/285768.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/abram/" target="_blank">chong</a> 2009-07-07 11:11 <a href="http://www.blogjava.net/abram/articles/285768.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ActiveMQ 实践之路(转)</title><link>http://www.blogjava.net/abram/articles/285767.html</link><dc:creator>chong</dc:creator><author>chong</author><pubDate>Tue, 07 Jul 2009 03:09:00 GMT</pubDate><guid>http://www.blogjava.net/abram/articles/285767.html</guid><wfw:comment>http://www.blogjava.net/abram/comments/285767.html</wfw:comment><comments>http://www.blogjava.net/abram/articles/285767.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/abram/comments/commentRss/285767.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/abram/services/trackbacks/285767.html</trackback:ping><description><![CDATA[<span  style="font-family: Arial; font-size: 12px; line-height: 18px; ">
<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><font face="Arial">&nbsp;一.ActiveMQ是什么?&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ActiveMQ is the most popular and powerful open source Message Bus.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 引用ActiveMQ官方网站</font></p>
<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><font face="Arial">&nbsp;&nbsp;&nbsp;&nbsp; ActiveMQ 是一个完全支持JMS1.1和J2EE 1.4规范的 JMS Provider实现,尽管JMS规范出台<br />
已经是很久的事情了,但是JMS在当今的J2EE应用中间仍然扮演着特殊的地位。<br />
&nbsp;&nbsp;&nbsp; 下面是它的特性列表 (详细的特性清单请参考http://activemq.apache.org/features.html)<br />
&nbsp;&nbsp; &nbsp;1.多种语言和协议编写客户端<br />
&nbsp;&nbsp; &nbsp;&nbsp;语言: Java, C, C++, C#, Ruby, Perl, Python, PHP&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;应用协议: OpenWire,Stomp REST,WS Notification,XMPP,AMQP<br />
&nbsp;&nbsp; &nbsp;2.完全支持JMS1.1和J2EE 1.4规范&nbsp; (持久化,XA消息,事务)<br />
&nbsp;&nbsp; &nbsp;3.对Spring的支持,ActiveMQ可以很容得内嵌到使用Spring的系统里面去,而且也支持Spring2.0的特性<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4.通过了常见J2EE服务器(如 Geronimo,JBoss 4, GlassFish,WebLogic)的测试,其中通过JCA 1.5 resource adaptors的配置,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 可以让ActiveMQ可以自动的部署到任何兼容J2EE 1.4 商业服务器上<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 5.支持多种传送协议:in-VM,TCP,SSL,NIO,UDP,JGroups,JXTA<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 6.支持通过JDBC和journal提供高速的消息持久化<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 7.从设计上保证了高性能的集群,客户端-服务器,点对点<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 8.支持Ajax<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 9.支持与Axis的整合<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 10.可以很容易得调用内嵌JMS provider,进行测试&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp; 二.ActiveMQ的竞争者&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1.其他开源 JMS provider(资料来自 java-source.net) :<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; jbossmq(jboss 4)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; jboss messaging (jboss 5)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; joram-4.3.21&nbsp; 2006-09-22<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; openjms-0.7.7-alpha-3.zip December 26, 2005<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mantamq 官网暂时无法访问<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ubermq&nbsp; 官网暂时无法访问<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SomnifugiJMS&nbsp; 2005-7-27&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 开源的JMS Provider大部分都已经停止发展了,剩下的几个都是找到了东家,和某种J2EE 服务器挂钩,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 比如jboss mq 与jboss,joram与jonas(objectweb组织),ActiveMQ 与Geronimo(ASF APACHE基金组织),<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 而在这3个之间，从网络底层来看,只有ActiveMQ使用了NIO,单从这个角度来看ActiveMQ在性能上会有<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 一定的优势&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font></p>
<p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><font face="Arial">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2.商业JMS provider<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IBM WebSphere MQ<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BEA WebLogic JMS<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Oracle AQ&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NonStop Server for Java Message Service(JMS)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Sun Java System Message Queue<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Sonic jms<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TIBCO Enterprise For JMS<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; iLinkMQ (国内)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 现在的商业J2EE 应用服务器大部分都会有JMS Provider的实现,毕竟应用服务器都已经花费不薄,也不在乎<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在里面送一个JMS Provider了,当然还是有独立的比如IBM WebSphere MQ,Sonic JMS ,前者肯定是商用MQ<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; （这个概念不仅仅是JMS Provier了，只能说JMS 只是它提供的一个应用）中间的巨无霸了。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 从这点来看,ActiveMQ明显的竞争者并不多,因为它是作为独立的开源JMS Provider出现的,很容易被用于多种结构设计中，<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 使用ActiveMQ作为默认JMS Provider的开源项目有ServiceMix,Geronimo.<br />
&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (待续)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; P.S<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Monday, February 5, 2007&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; Apache ActiveMQ graduates from the incubator&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Apache ActiveMQ has now graduated to become a&nbsp;<font color="#ff0000">top level project</font>&nbsp;(TLP) at Apache! Its new site is now hosted at http://activemq.apache.org/. Many thanks to all those in the Incubator and ActiveMQ communities for making this happen!</font></p>
</span>
<img src ="http://www.blogjava.net/abram/aggbug/285767.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/abram/" target="_blank">chong</a> 2009-07-07 11:09 <a href="http://www.blogjava.net/abram/articles/285767.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>