ActiveMQ4.1 +Spring2.0的POJO JMS方案(Jencks 版)
Posted on 2006-12-10 00:17 Dr.Water 閱讀(839) 評論(0) 編輯 收藏 所屬分類: SpringSide此文檔以SpringSide 發(fā)布的為準(zhǔn) http://wiki.springside.org.cn/display/springside/ActiveMQ+Spring+Jencks
ActiveMQ4.1 +Spring2.0的POJO JMS方案(Jencks 版)
???? 作者:cctvx1
???? 此文檔僅適用于說明使用 Jecncks 和 使用Spring 2.0(DefaultMessageListenerContainer)? 充當(dāng)MDP Container之間的區(qū)別,同時
演示Jecnks 的Spring 2.0 新配置實例。
????
1.引入ActiveMQ ResourceAdapter 和Jencks 的XSD
? 在ApplicationContext.xml(Spring的配置文件)中引入ActiveMQ ResourceAdapter 和Jencks 的XML Scheam 配置文件),如下:
?? ActiveMQ4.1 響應(yīng)Spring 2.0號召,支持了引入XML Schema namespace的簡單配置語法,簡化了配置的語句。?
? 在ApplicationContext.xml(Spring的配置文件)中引入ActiveMQ的XML Scheam 配置文件),如下:
< beans
?? xmlns ="http://www.springframework.org/schema/beans" ???xmlns:amq ="http://activemq.org/config/1.0" ???xmlns:ampra ="http://activemq.org/ra/1.0" ???xmlns:jencks ="http://jencks.org/1.3" ???xmlns:xsi ="http://www.w3.org/2001/XMLSchema-instance"
??xsi:schemaLocation ="http://www.springframework.org/schema/beans?http://www.springframework.org/schema/beans/spring-beans.xsd
??http://activemq.org/config/1.0?http://people.apache.org/repository/org.apache.activemq/xsds/activemq-core-4.1-incubator-SNAPSHOT.xsd
??http://activemq.org/ra/1.0?http://people.apache.org/repository/org.apache.activemq/xsds/activemq-ra-4.1-incubator-SNAPSHOT.xsd
??http://jencks.org/1.3?http://repository.codehaus.org/org/jencks/jencks/1.3/jencks-1.3.xsd" >
?
由于ActiveMQ RA和Jencks?那個XSD 仍然有部分錯誤,因此使用的是自行修改過的XSD。(是xs:any元素引起的錯誤)
先在ClassPath根目錄放一個修改過的activemq-ra-4.1-incubator-SNAPSHOT.xsd和jencks-1.3.xsd。
同樣修改 ClassPath 下面META-INF\spring.schemas 增加內(nèi)容如下。這個spring.schemas是spring自定義scheam的配置文件,請注意"http:\://"部分寫法
http\://people.apache.org/repository/org.apache.activemq/xsds/activemq-ra-4.1-incubator-SNAPSHOT.xsd=/activemq-ra-4.1-incubator-SNAPSHOT.xsd
http\://repository.codehaus.org/org/jencks/jencks/1.3/jencks-1.3.xsd=/jencks-1.3.xsd
?
2. 配置方案
2.1?基礎(chǔ)零件?
1.?配置ActiveMQ Broker? 參見 ActiveMQ+Spring?
2.?配置ActiveMQ Resource Adapter
<amqra:managedConnectionFactory id="jmsManagedConnectionFactory" resourceAdapter="#resourceAdapter"/><amqra:resourceAdapter id="resourceAdapter" serverUrl="vm://localhost" />
?
3.?配置Jencks 基礎(chǔ)配置
?? 具體的配置可以參見Jencks的XSD
??1<!-- ?jencks?PoolFactory?config -->
2< jencks:singlePoolFactory? id ="poolingSupport" ?maxSize ="16" ?minSize ="5" ?blockingTimeoutMilliseconds ="60" ?idleTimeoutMinutes ="60" ?matchOne ="true" ?matchAll ="true" ?selectOneAssumeMatch ="true" ? /> ? <!-- ?jencks?XATransactionFactory? -->
3< jencks:xATransactionFactory? id ="transactionSupport" ?useTransactionCaching ="true" ?useThreadCaching ="true" ? /> ??
4<!-- ?jencks?ConnectionManagerFactory? -->
5< jencks:connectionManagerFactory? id ="connectionManager" ?containerManagedSecurity ="false" ??poolingSupport ="#poolingSupport" ?transactionSupport ="#transactionSupport" ? /> ? <!-- ?jencks?TransactionContextManagerFactory? -->
6< jencks:transactionContextManagerFactory? id ="transactionContextManagerFactory" />
7![]()
?
4.?配置給JmsTemplate使用的connectionFactory (主要是生成者/發(fā)送者 使用)
?? 這里注意下,在配置jmsTemplate的使用的targetConnectionFactory就是使用jencks配置的connectionManager
<!-- ?spring?config?jms?with?jca -->
? < bean? id ="jmsManagerConnectionFactory" ?class ="org.springframework.jca.support.LocalConnectionFactoryBean" >
?? < property? name ="managedConnectionFactory" >
??? < ref? local ="jmsManagedConnectionFactory" ? />
?? </ property >
?? < property? name ="connectionManager" >
??? < ref? local ="connectionManager" ? />
?? </ property >
? </ bean >
?
? <!-- ??Spring?JmsTemplate?config? -->
? < bean? id ="jmsTemplate" ?class ="org.springframework.jms.core.JmsTemplate" >
?? < property? name ="connectionFactory" >
??? <!-- ??lets?wrap?in?a?pool?to?avoid?creating?a?connection?per?send? -->
??? < bean? class ="org.springframework.jms.connection.SingleConnectionFactory" >
???????? < property? name ="targetConnectionFactory" ?ref ="jmsManagerConnectionFactory" ? />
??? </ bean >
?? </ property >
?? <!-- ?custom?MessageConverter? -->
?? < property? name ="messageConverter" ?ref ="orderMessageConverter" ? />
? </ bean > ?
?
5*.?配置Spring 2.0的MessageListenerAdapter,保證不需要用戶實現(xiàn)MessageListener*
?? 見ActiveMQ+Spring?
?6.配置Jecnks 充當(dāng)MDP的Container
? 就是把上面的MessageListenerAdapter配置到Jencks里面,完成整個MDP的配置
??<!--?Jencks?Container-->
?<jencks:jcaContainer>??????<jencks:bootstrapContext>
???????????<jencks:bootstrapContextFactory?threadPoolSize="25"?/>
??????</jencks:bootstrapContext>
??????????<jencks:connectors>
??????????<!--?use?jencks?container?(use?spring?MessageListenerAdapter)-->
???????????<jencks:connector?ref="messageListener">
????????????????<jencks:activationSpec>
?????????????????????<amqra:activationSpec?destination="org.apache.activemq.spring.Test.spring.embedded"?destinationType="javax.jms.Queue"?/>
????????????????</jencks:activationSpec>
???????????</jencks:connector>??????</jencks:connectors>??????????<jencks:resourceAdapter>
???????????<amqra:resourceAdapter?serverUrl="vm://localhost"?/>
??????</jencks:resourceAdapter>
?</jencks:jcaContainer>
3. 說明
?? Spring 2.0本身使用DefaultMessageListenerContainer 可以充當(dāng)MDP中的Container角色,但是鑒于Jencks是對于JCA標(biāo)準(zhǔn),它不僅僅能夠提供jms的jca整合,包括其他資源比如jdbc都可以做到j(luò)ca管理
所以,同時完成了這個ActiveMQ+Spring+Jencks 配置演示,更多的針對生產(chǎn)系統(tǒng)的JCA特性展示,會在稍后的開發(fā)計劃討論中確定。