JBossにおける非同期メッセージの送信と受信


ejbを使用しない場合、どうやってjbossにおいて、非同期メッセージの送信と受信を簡単に行うことができますか?
spring対jmsのパッケージにより実現できます.
 
まず、jbossにConnection Factoryを配置します.Queue
   jms-ds.xml
 
<connection-factories>
    <tx-connection-factory>
        <jndi-name>TestConnectionFactory</jndi-name>
        <use-java-context>false</use-java-context>
        <xa-transaction/>
        <rar-name>jms-ra.rar</rar-name>
        <connection-definition>org.jboss.resource.adapter.jms.JmsConnectionFactory</connection-definition>
        <config-property name="SessionDefaultType" type="java.lang.String">javax.jms.Queue</config-property>
        <config-property name="JmsProviderAdapterJNDI" type="java.lang.String">java:/DefaultJMSProvider</config-property>
        <max-pool-size>20</max-pool-size>
        <security-domain-and-application>JmsXARealm</security-domain-and-application>
    </tx-connection-factory>
</connection-factories>
  jms-destination.xml
 
<mbean code="org.jboss.mq.server.jmx.Queue" name="jboss.mq.destination:service=Queue,name=TestQueue">
        <depends optional-attribute-name="DestinationManager">jboss.mq:service=DestinationManager</depends>
</mbean>
 
 以上の配置が完了すると、キューに非同期のメッセージを受信し、送信することができます.
 
 springを利用してメッセージの非同期受信を行う.
 
  springでの配置は以下のbeanです.
 
    <bean class="org.springframework.jms.listener.DefaultMessageListenerContainer">
       <property name="connectionFactory">
            <bean class="org.springframework.jndi.JndiObjectFactoryBean">
                <property name="jndiName">
                    <value>TestConnectionFactory</value>
                </property>
            </bean>
        </property>
        <property name="destination">
            <bean class="org.springframework.jndi.JndiObjectFactoryBean">
                <property name="jndiName">
                    <value>queue/TestQueue</value>
                </property>
            </bean>
        </property>        
        <property name="messageListener">
          <bean class="org.springframework.jms.listener.adapter.MessageListenerAdapter">              
             <property name="delegate">
                <bean class="com.test.message.ObjectMessageListener"/>
             </property>
          </bean>
        </property>
   </bean>
 
   Object Message Listenerの実現
   
public class ObjectMessageListener {
      
    public void handleMessage(Object obj) {
        //  obj
    }
}
    これで、メッセージの非同期消費が実現できる.
 
    いくつかの疑問:
    1、皆さんはObject Message ListenerというListenerの書き方に変なものがあるかもしれませんが、普通のListenerはjmsのMessage Listenerを継承しなければならないのに、ここにはないです.なぜですか?
    これはspringのMessage ListenerAdapterのおかげです.私たちの業務コードとjmsの結合を実現しました.興味があるのはソースコードを見続けてもいいです.
     2、Message ListenerContinerは3つの実装があります.ここではなぜDefault Message ListenerContinerを使用していますか?Simplession Message ListenerContinerではなく、Simplessage Continerを使用していますか?
      SimpleMessage ListenerContinerでは、connection.set Exception Listenerを呼び出していますので、jbossが提供するjmsはサポートされていません.
    3、Default Message ListenerContinerはマルチスレッドを同時に消費する機能を提供していますが、デフォルトのconcurrentConsmers=1は、それを大きく設定してもいいですか?
     jbossでは、一つのconnectionは一つのセッションしか生成できないので、これはconcurrentConsermersを1に設定することができます.
 
 
 springを利用してメッセージの非同期送信を行う.
  
 これは多くの文章が紹介されています.ここでは多く述べません.