posts - 33,  comments - 70,  trackbacks - 0

          一:續(xù)一,說明一的可使用性。

          <amq:queue id="destination.report"  physicalName="active.jms.report"/>
              
          <amq:queue id="destination.point"  physicalName="active.jms.point"/>

          queue : 隊列的名字 for 制造者.

          感覺org.springframework.jms.listener.DefaultMessageListenerContainer 做的不好,如果destination property能做一個可包含多個隊列,并且有選擇性的messageListener就好了,這樣就避免下面的監(jiān)聽的尷尬了。呵呵
          <!--  listener container,MDP無需實現(xiàn)接口 -->
              
          <bean id="fluxPerhourListenerContainer" class="org.springframework.jms.listener.DefaultMessageListenerContainer">        
                  
          <property name="connectionFactory" ref="jmsConnectionFactory"/>
                  
          <property name="destination" ref="destination.fluxPerhour"/>
                  
          <property name="messageListener" ref="messageListener"/>
              
          </bean>
              
          <bean id="fluxPerDayListenerContainer" class="org.springframework.jms.listener.DefaultMessageListenerContainer">        
                  
          <property name="connectionFactory" ref="jmsConnectionFactory"/>
                  
          <property name="destination" ref="destination.fluxPerday"/>
                  
          <property name="messageListener" ref="messageListener"/>
              
          </bean>

          <bean id="reportPerdayProducer" class="com.jms.ReportPerdayProducer">
                  
          <property name="template" ref="jmsTemplate"/>
                  
          <property name="destination" ref="destination.report"/>
              
          </bean>
              
          <bean id="pointProducer" class="com.jms.PointProducer">
                  
          <property name="template" ref="jmsTemplate"/>
                  
          <property name="destination" ref="destination.point"/>
              
          </bean>

          producer不能重用,因為send到不同destination,所有沒辦法重用。如果能對producer做一個默認(rèn)統(tǒng)一的封裝就好了. 但是DefaultProducer.那么應(yīng)該注意隊列線程安全方面,目前沒有什么好的想法,就采用通用一些的辦法,不過xml和代碼稍多一些.


          然后就用到 前面文章一 里面的內(nèi)容了,非常簡便。
          <!--  Message Driven POJO (MDP) -->
              
          <bean id="messageListener" class="org.springframework.jms.listener.adapter.MessageListenerAdapter">
          <!--  may be other method -->
                  
          <constructor-arg>
                      
          <bean class="com..jms.MessageConsumerAdapter" >
                          
          <!--業(yè)務(wù)接口/業(yè)務(wù)門面-->
                          
          <property name="transfersManager" ref="transfersManager"/>                
                      
          </bean>            
                  
          </constructor-arg>
                  
          <!--  may be other method -->
                  
          <property name="defaultListenerMethod" value="receive"/>
                  
          <!-- custom MessageConverter define -->
                  
          <property name="messageConverter" ref="messageConverter"/>
              
          </bean>    
          <!--  Holder Message converter  -->
              
          <bean id="messageConverter" class="com.jms.CoverterHolder">
                  
          <property name="defaultMessageConverter">
                      
          <bean class="com.jms.DefaultMessageConverter"/>
                  
          </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="jmsConnectionFactory"/>
                      
          </bean>
                  
          </property>
                  
          <property name="messageConverter" ref="messageConverter"/>
              
          </bean>
           


          二.單元測試有時加載 activemq的問題
          1.這個可能和spring版本有關(guān)系,請采用比較穩(wěn)定的版本。例如apache-activemq官方包里面提供的.
          2.選擇 xml解析的問題,例如
          public abstract class SpringManagerTestCase extends
                  AbstractTransactionalDataSourceSpringContextTests 
          {

              
          public SpringManagerTestCase()
              
          {
                  System.setProperty(
          "javax.xml.parsers.DocumentBuilderFactory""org.apache.xerces.jaxp.DocumentBuilderFactoryImpl");
                  System.setProperty(
          "javax.xml.parsers.SAXParserFactory""org.apache.xerces.jaxp.SAXParserFactoryImpl");
                  System.setProperty(
          "javax.xml.transform.TransformerFactory""org.apache.xalan.processor.TransformerFactoryImpl");
                  
                  setDependencyCheck(
          false);
                  setDefaultRollback(
          false);
              }

              
          /**
               * 配置Spring的配置文件的方法。
               * 
          @see org.springframework.test.AbstractDependencyInjectionSpringContextTests#getConfigLocations()
               
          */

              
          protected String[] getConfigLocations() {
                  
          return new String[] {"classpath:applicationContext-activemq-embedded.xml"};
              }


          }


          三.為特殊的應(yīng)用服務(wù)器,如resin ,也要選擇特定的xml解析器
          在web.xml中配置增加
          <web-app>
            
          <!--
                In order to be able to compatiable with Resin 2.1.x and 3.0.x,
                both XML and XSLT have to be replaced.
                If only xalan is included, Resin 2.1.x will fail but not 3.0.x.
                Therefore the best way is to use the compatiable version of the
                XML parser ans XSLT.
                 - Please refere to the following link for more detailed information.
                 - http://www.caucho.com/resin-3.0/xml/jaxp.xtp
            
          -->
            
          <!-- xml -->
            
          <system-property javax.xml.parsers.DocumentBuilderFactory=
                         "org.apache.xerces.jaxp.DocumentBuilderFactoryImpl"
          />
            
          <system-property javax.xml.parsers.SAXParserFactory=
                         "org.apache.xerces.jaxp.SAXParserFactoryImpl"
          />
            
          <!--  xslt -->
            
          <system-property javax.xml.transform.TransformerFactory=
                         "org.apache.xalan.processor.TransformerFactoryImpl"
          />


          </web-app>



          以上的以全部在實施中測試通過并且運(yùn)行。大家可以方向使用和理解。如有疑問,相互交流.
          posted on 2007-04-05 16:55 地獄男爵(hellboys) 閱讀(2824) 評論(0)  編輯  收藏 所屬分類: 編程語言(c/c++ java python sql ......)
          <2007年4月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345

          常用鏈接

          隨筆分類

          隨筆檔案

          文章檔案

          相冊

          連接

          最新隨筆

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 广灵县| 和政县| 鹿泉市| 吉木乃县| 赞皇县| 濮阳县| 卢湾区| 广饶县| 闽侯县| 顺平县| 宕昌县| 临颍县| 平顺县| 沅陵县| 宿迁市| 修文县| 河北省| 会理县| 昌平区| 桐柏县| 九龙坡区| 阿鲁科尔沁旗| 屯门区| 临猗县| 宜兰县| 承德县| 武宁县| 许昌市| 高要市| 上林县| 弥渡县| 丘北县| 岐山县| 康定县| 桑日县| 韶关市| 满洲里市| 巴彦淖尔市| 宁夏| 广州市| 宜昌市|