In fact, I have read these documents and followed the related configuration,
but the result is still failed. The following is the details:

1. The content of activemq-ds.xml
<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE connection-factories
    PUBLIC "-//JBoss//DTD JBOSS JCA Config 1.5//EN"
    "http://www.jboss.org/j2ee/dtd/jboss-ds_1_5.dtd";>

<connection-factories>

   <tx-connection-factory>
      <jndi-name>trading/QueueConnectionFactory</jndi-name>
      <xa-transaction/>
      <!--<use-java-context>false</use-java-context>-->
      <track-connection-by-tx/>
      <rar-name>activemq-ra.rar</rar-name>
     
<connection-definition>javax.jms.QueueConnectionFactory</connection-definition>
      <!--<ServerUrl>vm://localhost</ServerUrl>-->
      <ServerUrl>tcp://10.10.135.212</ServerUrl>
      <!--
      <UserName>sa</UserName>
      <Password></Password>
      -->
      <min-pool-size>1</min-pool-size>
      <max-pool-size>200</max-pool-size>
      <blocking-timeout-millis>30000</blocking-timeout-millis>
      <idle-timeout-minutes>3</idle-timeout-minutes>
   </tx-connection-factory>

   <tx-connection-factory>
      <jndi-name>trading/TopicConnectionFactory</jndi-name>
      <xa-transaction/>
      <!--<use-java-context>false</use-java-context>-->
      <track-connection-by-tx/>
      <rar-name>activemq-ra.rar</rar-name>
     
<connection-definition>javax.jms.TopicConnectionFactory</connection-definition>
      <ServerUrl>tcp://10.10.135.212</ServerUrl>
      <!--<ServerUrl>vm://localhost</ServerUrl>-->
      <!--
      <UserName>sa</UserName>
      <Password></Password>
      -->
      <min-pool-size>1</min-pool-size>
      <max-pool-size>200</max-pool-size>
      <blocking-timeout-millis>30000</blocking-timeout-millis>
      <idle-timeout-minutes>3</idle-timeout-minutes>
   </tx-connection-factory>
  
   <mbean code="org.jboss.resource.deployment.AdminObject"
name="activemq.queue:name=outboundQueue">
      <attribute name="JNDIName">activemq/queue/outbound</attribute>
      <depends
optional-attribute-name="RARName">jboss.jca:service=RARDeployment,name='activemq-ra.rar'</depends>
      <attribute name="Type">javax.jms.Queue</attribute>
      <attribute name="Properties">PhysicalName=queue.outbound</attribute>
   </mbean>
   
   <mbean code="org.jboss.resource.deployment.AdminObject"
name="activemq.queue:name=orderoutput">
      <attribute name="JNDIName">orderoutput</attribute>
      <depends
optional-attribute-name="RARName">jboss.jca:service=RARDeployment,name='activemq-ra.rar'</depends>
      <attribute name="Type">javax.jms.Queue</attribute>
      <attribute
name="Properties">PhysicalName=queue.orderoutput</attribute>
   </mbean>

   <mbean code="org.jboss.resource.deployment.AdminObject"
name="activemq.topic:name=inboundTopic">
      <attribute name="JNDIName">activemq/topic/inbound</attribute>
      <depends
optional-attribute-name="RARName">jboss.jca:service=RARDeployment,name='activemq-ra.rar'</depends>
      <attribute name="Type">javax.jms.Topic</attribute>
      <attribute name="Properties">PhysicalName=topic.inbound</attribute>
   </mbean>

</connection-factories>


2. The content of ejb.jar.xml

<?xml version="1.0" encoding="UTF-8"?>

<ejb-jar xmlns="http://java.sun.com/xml/ns/j2ee";
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
   xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/ejb-jar_2_1.xsd";
   version="2.1">
   
        <description>Trading EJB</description>
        <display-name>Application Controller Bean</display-name>
        <enterprise-beans>

                <!-- Session Beans -->
                <session>
                        <description>Application Controller Bean</description>
                        <display-name>Application Controller</display-name>
                        <ejb-name>AppController</ejb-name>
                        <home>com.trading.platform.ejb.AppControllerHome</home>
                        <remote>com.trading.platform.ejb.AppController</remote>
                        
<ejb-class>com.trading.platform.ejb.AppControllerBean</ejb-class>
                        <session-type>Stateless</session-type>
                        <transaction-type>Container</transaction-type>
                        <resource-ref>
                <res-ref-name>jms/QueueConnectionFactory</res-ref-name>
                <res-type>javax.jms.QueueConnectionFactory</res-type>
                <res-auth>Container</res-auth>
                <res-sharing-scope>Shareable</res-sharing-scope>
                </resource-ref>
                <message-destination-ref>
            
<message-destination-ref-name>jms/OrderOutputQueue</message-destination-ref-name>
            
<message-destination-type>javax.jms.Queue</message-destination-type>
                <message-destination-usage>Produces</message-destination-usage>
            
<message-destination-link>OrderOutputQueue</message-destination-link>
                </message-destination-ref>
                </session>
        </enterprise-beans>

        <assembly-descriptor>
                <container-transaction>
                        <method>
                                <ejb-name>AppController</ejb-name>
                                <method-name>handleEvent</method-name>
                        </method>
                        <trans-attribute>Required</trans-attribute>
                </container-transaction>
                
                <message-destination>
         
<message-destination-name>OrderOutputQueue</message-destination-name>
        </message-destination>
                
        </assembly-descriptor>
</ejb-jar>

3. The content of jboss.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE jboss PUBLIC "-//JBoss//DTD JBOSS 5.0//EN"
"http://www.jboss.org/j2ee/dtd/jboss_5_0.dtd";>

<jboss>

   <enterprise-beans>
      <session>
         <ejb-name>AppController</ejb-name>
         <jndi-name>ejb/AppController</jndi-name>
         <resource-ref>
            <res-ref-name>jms/QueueConnectionFactory</res-ref-name>
            <resource-name>queuefactoryref</resource-name>
         </resource-ref>
      </session>
   </enterprise-beans>
   
   <assembly-descriptor>
      <message-destination>
        
<message-destination-name>OrderOutputQueue</message-destination-name>
         <jndi-name>activemq/queue/outbound</jndi-name>
      </message-destination>
   </assembly-descriptor>

   <resource-managers>
          <resource-manager>
         <res-name>queuefactoryref</res-name>
         <res-jndi-name>java:/trading/QueueConnectionFactory</res-jndi-name>
      </resource-manager>
   </resource-managers>

</jboss>

4. The source of JMS client(It is invoked in a EJB 2 stateless session
transaction context)

        public void init(){
                if(logger.isDebugEnabled()) logger.debug("Platform:Publisher JMS
connection init is begin..." );
                
                this.getInitialContext();
                
                if(logger.isDebugEnabled()) logger.debug("Platform:Publisher JMS
connection init is end..." );
        }
        
        private void getInitialContext(){
                try {
                        Context context = new InitialContext();
                        QueueConnectionFactory queueConnectionFactory =
(QueueConnectionFactory)context.lookup(this.getQueueConnectionFactoryName());
                        System.out.println("ConnectionFactory:" +
queueConnectionFactory.getClass());
                        queueConn = 
queueConnectionFactory.createQueueConnection();
                        System.out.println("Connection:" + 
queueConn.getClass());
                        queue = (Queue)context.lookup(this.getQueueName());
                        queueConn.start();
                        System.out.println("Finished...");
                } catch (NamingException e) {
                        if(logger.isErrorEnabled()) 
logger.error("NamingExcetion:" + e);
                        throw new SystemException("System Error", e);
                } catch (JMSException e) {
                        if(logger.isErrorEnabled()) 
logger.error("JMSException:" + e);
                        throw new SystemException("System Error", e);
                }
        }
        
        public QueueSession createQueueSession(){
                QueueSession queueSession = null;
                try {
                        queueSession = queueConn.createQueueSession(false,
QueueSession.AUTO_ACKNOWLEDGE);
                } catch (JMSException e) {
                        if(logger.isErrorEnabled()) 
logger.error("JMSException:" + e);
                        throw new SystemException("System Error", e);
                }
                return queueSession;
        }
        
        public void sendMessageToQueue(IVO vo){
                try {
                        QueueSession queueSession = this.createQueueSession();
                        ObjectMessage objMessage = 
queueSession.createObjectMessage(vo);
                        
                        QueueSender sender = queueSession.createSender(queue);
                        sender.send(objMessage);
                        
                        queueSession.close();
                } catch (JMSException e) {
                        if(logger.isErrorEnabled()) 
logger.error("JMSException:" + e);
                        throw new SystemException("System Error", e);
                }       
        }

5. The source of sending message out(In a EJB transaction context)

                sendMessageToQueue(order);
                if(1 == 1){
                        System.out.println("Error222");
                        throw new SystemException("Error222", new 
Exception(""));
                }


I found the message is sent to queue even an exception will be thrown out
later, I have tried many ways, but results are all failed. It seems that the
transaction of ActiveMQ is not enlisted in the JTA transaction of JBoss. Any
suggestion about it?


+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-- 
View this message in context: 
http://www.nabble.com/How-to-configure-ActiveMQ-to-support-XA-transaction--tp25220910p25223088.html
Sent from the ActiveMQ - User mailing list archive at Nabble.com.

Reply via email to