activemq-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From PeterNilsson <peter.nilsson...@gmail.com>
Subject Re: XA with ActiveMQ 4.0.1 on JBoss 4.0.2
Date Mon, 21 Aug 2006 09:38:23 GMT

Hi,

The RA is deployed as follows:
- The activemq-ra-4.0.1.rar is copied unchanged from lib/optional in the
ActiveMQ distribution to the jboss-4.0.2\server\default\deploy directory in
JBoss.
- An activemq-ds.xml file is put in the same directory. The contents are at
the bottom of my original mail.
- The connection factory is registered with JBoss by the following
jboss-service.xml in the META-INF directory of the application:
  <?xml version="1.0" encoding="UTF-8"?>
  <server>
    <mbean code="com.omxgroup.esb.jmx.AppContextInitializer"
name="omx:service=AppContextInitializer">
      <attribute
name="AppContextFileName">applicationContext.xml</attribute>
     
<depends>jboss.jca:service=DataSourceBinding,name=MSSQL_XA_DS</depends>
     
<depends>jboss.jca:service=ConnectionFactoryBinding,name=kodo</depends>
     
<depends>jboss.jca:service=ConnectionFactoryBinding,name=activemq/QueueConnectionFactory</depends>
    </mbean>
  </server>
The AppContextInitializer class simply sets up a Spring application context
for our application while the depends tags are used for registering the
resources.

Do I need to wire the AMQ RA explicitly with the Spring TM? I was under the
impression that if a global transaction is active the session will join it:
"As defined by the J2EE specification, the transaction and acknowledgement
parameters are ignored when a JMS Session is created inside an active
transaction, no matter if a JTA transaction or a Spring-managed
transaction." from JmsTemplate API. If this isn't the case how do I connect
AMQ to Spring TM?

   Peter



James.Strachan wrote:
> 
> How are you registering the RA with JBoss and how are you wiring the
> RA with the Spring TM? A test case would be handy to see what you are
> doing.
> 
> On 8/16/06, PeterNilsson <peter.nilsson.se@gmail.com> wrote:
>>
>> Hi,
>>
>> I can't manage to get my outbound Jms messages to be enlisted in the JTA
>> transaction. My testcase does some database access, sends a JMS message
>> and
>> the throws an exception which causes rollback. Despite the rollback the
>> message is sent and what I can see from the log the session is not
>> enlisted
>> in the JTA tx.
>> I am using Spring JtaTransactionManger with a JNDI ref to the JBoss
>> transaction manager. I am using the ActiveMQ ra which is deployed to
>> JBoss.
>> The relevant parts of configuration are after the log file below.
>>
>> Any hints on what need to be changed?
>>
>>    br,
>>
>>    Peter Nilsson
>>
>> Part of log file:
>> 2006-08-16 10:03:54,556 DEBUG
>> [org.apache.activemq.transport.WireFormatNegotiator] Sending:
>> WireFormatInfo
>> { version=1, properties={TightEncodingEnabled=true,
>> TcpNoDelayEnabled=true,
>> SizePrefixDisabled=false, StackTraceEnabled=true,
>> MaxInactivityDuration=30000, CacheEnabled=true}, magic=[A,c,t,i,v,e,M,Q]}
>> 2006-08-16 10:03:54,556 DEBUG
>> [org.apache.activemq.transport.tcp.TcpTransport] TCP consumer thread
>> starting
>> 2006-08-16 10:03:54,556 DEBUG
>> [org.apache.activemq.transport.WireFormatNegotiator] Received WireFormat:
>> WireFormatInfo { version=1, properties={StackTraceEnabled=true,
>> TightEncodingEnabled=true, TcpNoDelayEnabled=true,
>> SizePrefixDisabled=false,
>> MaxInactivityDuration=30000, CacheEnabled=true}, magic=[A,c,t,i,v,e,M,Q]}
>> 2006-08-16 10:03:54,556 DEBUG
>> [org.apache.activemq.transport.WireFormatNegotiator]
>> tcp:///127.0.0.1:2181
>> before negotiation: OpenWireFormat{version=1, cacheEnabled=false,
>> stackTraceEnabled=false, tightEncodingEnabled=false,
>> sizePrefixDisabled=false}
>> 2006-08-16 10:03:54,556 DEBUG
>> [org.apache.activemq.transport.WireFormatNegotiator]
>> tcp:///127.0.0.1:2181
>> after negotiation: OpenWireFormat{version=1, cacheEnabled=true,
>> stackTraceEnabled=true, tightEncodingEnabled=true,
>> sizePrefixDisabled=false}
>> # Starting jta transaction
>> 2006-08-16 10:03:54,967 DEBUG
>> [org.springframework.transaction.interceptor.TransactionInterceptor]
>> Getting
>> transaction for
>> com.omxgroup.bb.bong.ws.xatester.XATester.createPartyAndSendAndRollback
>> 2006-08-16 10:03:54,967 DEBUG
>> [org.springframework.transaction.jta.JtaTransactionManager] Using
>> transaction object
>> [org.springframework.transaction.jta.JtaTransactionObject@12fca35]
>> 2006-08-16 10:03:54,967 DEBUG
>> [org.springframework.transaction.jta.JtaTransactionManager] Creating new
>> transaction with name
>> [com.omxgroup.bb.bong.ws.xatester.XATester.createPartyAndSendAndRollback]
>> 2006-08-16 10:03:54,967 DEBUG
>> [org.springframework.transaction.jta.JtaTransactionManager] Beginning JTA
>> transaction
>> 2006-08-16 10:03:54,967 DEBUG
>> [org.springframework.transaction.support.TransactionSynchronizationManager]
>> Initializing transaction synchronization
>> # Do business logic including database access
>> 2006-08-16 10:03:54,967 DEBUG
>> [org.springframework.transaction.support.TransactionSynchronizationManager]
>> Bound value [kodo.jdbc.ee.JDBCConnectionFactory@d1d45634] for key [class
>> com.omxgroup.bb.bong.framework.persistence.JdoPmFactorySingleton] to
>> thread
>> [Thread-108]
>> 2006-08-16 10:03:54,967 DEBUG
>> [org.springframework.transaction.support.TransactionSynchronizationManager]
>> Retrieved value [kodo.jdbc.ee.JDBCConnectionFactory@d1d45634] for key
>> [class
>> com.omxgroup.bb.bong.framework.persistence.JdoPmFactorySingleton] bound
>> to
>> thread [Thread-108]
>> 2006-08-16 10:03:54,967 DEBUG
>> [org.springframework.orm.jdo.PersistenceManagerFactoryUtils] Opening JDO
>> PersistenceManager
>> 2006-08-16 10:03:54,967 DEBUG
>> [org.springframework.orm.jdo.PersistenceManagerFactoryUtils] Registering
>> transaction synchronization for JDO PersistenceManager
>> 2006-08-16 10:03:54,967 DEBUG
>> [org.springframework.transaction.support.TransactionSynchronizationManager]
>> Bound value [org.springframework.orm.jdo.PersistenceManagerHolder@19f50f]
>> for key [kodo.jdbc.ee.JDBCConnectionFactory@d1d45634] to thread
>> [Thread-108]
>> 2006-08-16 10:03:54,967 DEBUG
>> [org.springframework.transaction.support.TransactionSynchronizationManager]
>> Retrieved value [kodo.jdbc.ee.JDBCConnectionFactory@d1d45634] for key
>> [class
>> com.omxgroup.bb.bong.framework.persistence.JdoPmFactorySingleton] bound
>> to
>> thread [Thread-108]
>> 2006-08-16 10:03:54,967 DEBUG
>> [org.springframework.transaction.support.TransactionSynchronizationManager]
>> Retrieved value
>> [org.springframework.orm.jdo.PersistenceManagerHolder@19f50f] for key
>> [kodo.jdbc.ee.JDBCConnectionFactory@d1d45634] bound to thread
>> [Thread-108]
>> # Send jms message
>> 2006-08-16 10:03:54,987 DEBUG [org.springframework.jms.core.JmsTemplate]
>> Executing callback on JMS Session [ManagedSessionProxy { ActiveMQSession
>> {id=ID:SE10LT1240-2147-1155715337754-12:22:2,started=false} }] from
>> connection [org.apache.activemq.ra.ManagedConnectionProxy@b7ec3a]
>> 2006-08-16 10:03:54,987 DEBUG [org.springframework.jms.core.JmsTemplate]
>> Sending created message [ActiveMQTextMessage {commandId = 0,
>> responseRequired = false, messageId = null, originalDestination = null,
>> originalTransactionId = null, producerId = null, destination = null,
>> transactionId = null, expiration = 0, timestamp = 0, arrival = 0,
>> correlationId = null, replyTo = null, persistent = false, type = null,
>> priority = 0, groupID = null, groupSequence = 0, targetConsumerId = null,
>> compressed = false, userID = null, content = null, marshalledProperties =
>> null, dataStructure = null, redeliveryCounter = 0, size = 0, properties =
>> {JMS_DESTINATION=XA_ROUTED}, readOnlyProperties = false, readOnlyBody =
>> false, text = <?xml version="1.0"
>> encoding="UTF-8"?><ns4:PartyAndPartyRolesNDO
>> xmlns:ns4="http://www.omxgroup.com/bb/bong/ndo/party"
>> xmlns:ns2="http://www.omxgroup.com/bb/bong/ws/xatester"
>> xmlns:ns3="http://www.omxgroup.com/bb/bong/ndo/sapbp"><Individual><Id><IdentifierType>SPS</IdentifierType><ObjectType>PARTY</ObjectType><Value>802</Value></Id><Name>Boris
>> Becker</Name><Address><Type>OFFICIAL_ADDRESS</Type><Line1>Upplandsgatan
>> 56</Line1><Line2 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>> xsi:nil="true"/><Line3
>> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>> xsi:nil="true"/><PostalCode>113
>> 28</PostalCode><City>Stockholm</City><Country>SE</Country></Address><Status>NORMAL</Status><OwnedBy
>> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>> xsi:nil="true"/><TaxStatus>NORMAL</TaxStatus><TaxPercentage>0.45</TaxPercentage><LegalEntity
>> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>> xsi:nil="true"/><ManagedBy><IdentifierType>SPS</IdentifierType><ObjectType>PARTY_ROLE</ObjectType><Value>0</Value></ManagedBy><ReportLanguage>EN</ReportLanguage><Template>false</Template><MemberOf><Id><IdentifierType>SPS</IdentifierType><ObjectType>CATEGORY</ObjectType><Value>0</Value></Id></MemberOf><ExtraIdentifiers><IdentifierType>SE_PIN</IdentifierType><ObjectType>PARTY</ObjectType><Value>681201-5555</Value></ExtraIdentifiers><Firstname>Boris</Firstname><Lastname>Becker</Lastname><Title
>> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>> xsi:nil="true"/><TaxDomicile>SE</TaxDomicile><Nationality>SE</Nationality><PlaceOfBirth>Düsseldorf</PlaceOfBirth><DateOfBirth>1974-01-03</DateOfBirth></Individual><CustomerRole><Id><IdentifierType>SPS</IdentifierType><ObjectType>PARTY_ROLE</ObjectType><Value>803</Value></Id><Status>ACTIVE</Status><Comment
>> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>> xsi:nil="true"/><Verified>false</Verified><ContactInfo
>> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>> xsi:nil="true"/><AcceptsMarketInfo>false</AcceptsMarketInfo></CustomerRole></ns4:PartyAndPartyRolesNDO>}]
>> 2006-08-16 10:03:54,987 DEBUG [org.apache.activemq.ActiveMQSession]
>> Sending
>> message: ActiveMQTextMessage {commandId = 0, responseRequired = false,
>> messageId = ID:SE10LT1240-2147-1155715337754-12:22:2:1:1,
>> originalDestination = null, originalTransactionId = null, producerId =
>> ID:SE10LT1240-2147-1155715337754-12:22:2:1, destination =
>> queue://XA_ROUTED,
>> transactionId = null, expiration = 0, timestamp = 1155715434987, arrival
>> =
>> 0, correlationId = null, replyTo = null, persistent = true, type = null,
>> priority = 4, groupID = null, groupSequence = 0, targetConsumerId = null,
>> compressed = false, userID = null, content = null, marshalledProperties =
>> null, dataStructure = null, redeliveryCounter = 0, size = 0, properties =
>> {JMS_DESTINATION=XA_ROUTED}, readOnlyProperties = true, readOnlyBody =
>> true,
>> text = <?xml version="1.0" encoding="UTF-8"?><ns4:PartyAndPartyRolesNDO
>> xmlns:ns4="http://www.omxgroup.com/bb/bong/ndo/party"
>> xmlns:ns2="http://www.omxgroup.com/bb/bong/ws/xatester"
>> xmlns:ns3="http://www.omxgroup.com/bb/bong/ndo/sapbp"><Individual><Id><IdentifierType>SPS</IdentifierType><ObjectType>PARTY</ObjectType><Value>802</Value></Id><Name>Boris
>> Becker</Name><Address><Type>OFFICIAL_ADDRESS</Type><Line1>Upplandsgatan
>> 56</Line1><Line2 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>> xsi:nil="true"/><Line3
>> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>> xsi:nil="true"/><PostalCode>113
>> 28</PostalCode><City>Stockholm</City><Country>SE</Country></Address><Status>NORMAL</Status><OwnedBy
>> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>> xsi:nil="true"/><TaxStatus>NORMAL</TaxStatus><TaxPercentage>0.45</TaxPercentage><LegalEntity
>> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>> xsi:nil="true"/><ManagedBy><IdentifierType>SPS</IdentifierType><ObjectType>PARTY_ROLE</ObjectType><Value>0</Value></ManagedBy><ReportLanguage>EN</ReportLanguage><Template>false</Template><MemberOf><Id><IdentifierType>SPS</IdentifierType><ObjectType>CATEGORY</ObjectType><Value>0</Value></Id></MemberOf><ExtraIdentifiers><IdentifierType>SE_PIN</IdentifierType><ObjectType>PARTY</ObjectType><Value>681201-5555</Value></ExtraIdentifiers><Firstname>Boris</Firstname><Lastname>Becker</Lastname><Title
>> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>> xsi:nil="true"/><TaxDomicile>SE</TaxDomicile><Nationality>SE</Nationality><PlaceOfBirth>Düsseldorf</PlaceOfBirth><DateOfBirth>1974-01-03</DateOfBirth></Individual><CustomerRole><Id><IdentifierType>SPS</IdentifierType><ObjectType>PARTY_ROLE</ObjectType><Value>803</Value></Id><Status>ACTIVE</Status><Comment
>> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>> xsi:nil="true"/><Verified>false</Verified><ContactInfo
>> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>> xsi:nil="true"/><AcceptsMarketInfo>false</AcceptsMarketInfo></CustomerRole></ns4:PartyAndPartyRolesNDO>}
>> 2006-08-16 10:03:55,027 DEBUG
>> [org.apache.activemq.store.journal.JournalMessageStore] Journalled
>> message
>> add for: ID:SE10LT1240-2147-1155715337754-12:22:2:1:1, at: 0:52247
>> 2006-08-16 10:03:55,047 DEBUG
>> [org.springframework.transaction.support.TransactionSynchronizationManager]
>> Removed value [kodo.jdbc.ee.JDBCConnectionFactory@d1d45634] for key
>> [class
>> com.omxgroup.bb.bong.framework.persistence.JdoPmFactorySingleton] from
>> thread [Thread-108]
>> # Throw an exception to force rollback
>> 2006-08-16 10:03:55,047 ERROR [service] Exit
>> XATesterImpl.createPartyAndSendAndRollback() exception:
>> java.lang.RuntimeException: Explicitly thrown exception.
>> 2006-08-16 10:03:55,047 DEBUG
>> [org.springframework.transaction.interceptor.RuleBasedTransactionAttribute]
>> Applying rules to determine whether transaction should rollback on
>> com.omxgroup.bb.bong.framework.errorhandling.SystemException
>> 2006-08-16 10:03:55,047 DEBUG
>> [org.springframework.transaction.interceptor.RuleBasedTransactionAttribute]
>> Winning rollback rule is: null
>> 2006-08-16 10:03:55,047 DEBUG
>> [org.springframework.transaction.interceptor.RuleBasedTransactionAttribute]
>> No relevant rollback rule found: applying superclass default
>> 2006-08-16 10:03:55,047 DEBUG
>> [org.springframework.transaction.interceptor.TransactionInterceptor]
>> Invoking rollback for transaction on
>> com.omxgroup.bb.bong.ws.xatester.XATester.createPartyAndSendAndRollback
>> due
>> to throwable
>> [com.omxgroup.bb.bong.framework.errorhandling.SystemException]
>> 2006-08-16 10:03:55,047 DEBUG
>> [org.springframework.transaction.jta.JtaTransactionManager] Triggering
>> beforeCompletion synchronization
>> 2006-08-16 10:03:55,047 DEBUG
>> [org.springframework.transaction.support.TransactionSynchronizationManager]
>> Removed value
>> [org.springframework.orm.jdo.PersistenceManagerHolder@19f50f]
>> for key [kodo.jdbc.ee.JDBCConnectionFactory@d1d45634] from thread
>> [Thread-108]
>> 2006-08-16 10:03:55,047 DEBUG
>> [org.springframework.orm.jdo.PersistenceManagerFactoryUtils] Closing JDO
>> PersistenceManager
>> 2006-08-16 10:03:55,047 DEBUG
>> [org.springframework.transaction.jta.JtaTransactionManager] Initiating
>> transaction rollback
>> 2006-08-16 10:03:55,047 DEBUG
>> [org.springframework.transaction.jta.JtaTransactionManager] Rolling back
>> JTA
>> transaction
>> 2006-08-16 10:03:55,047 DEBUG
>> [org.springframework.transaction.jta.JtaTransactionManager] Triggering
>> afterCompletion synchronization
>> 2006-08-16 10:03:55,047 DEBUG
>> [org.springframework.transaction.support.TransactionSynchronizationManager]
>> Clearing transaction synchronization
>>
>> Relevant Spring configuration:
>> <bean id="baseJdoTransactionInterceptor" abstract="true"
>>
>> class="org.springframework.transaction.interceptor.TransactionInterceptor">
>>   <property name="transactionManager">
>>     <bean
>> class="org.springframework.transaction.jta.JtaTransactionManager">
>>       <property name="userTransactionName">
>>         <null/>
>>       </property>
>>       <property name="transactionManager" ref="txManager"/>
>>     </bean>
>>   </property>
>> </bean>
>> <bean id="txManager"
>> class="org.springframework.jndi.JndiObjectFactoryBean">
>>   <property name="jndiName">
>>     <value>java:/TransactionManager</value>
>>   </property>
>> </bean>
>> <bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate"
>> abstract="true">
>>   <property name="connectionFactory">
>>     <ref local="jmsConnectionFactory"/>
>>   </property>
>>   <property name="pubSubDomain" value="false"/>
>> </bean>
>> <bean id="broker" class="org.apache.activemq.xbean.BrokerFactoryBean">
>>   <property name="config" value="classpath:activemq.xml"/>
>>   <property name="start" value="true"/>
>> </bean>
>> <bean id="jmsConnectionFactory"
>> class="org.springframework.jndi.JndiObjectFactoryBean">
>>   <property name="jndiName">
>>     <value>java:/activemq/QueueConnectionFactory</value>
>>   </property>
>> </bean>
>>
>> activemq-ds.xml deployed to JBoss contains:
>> <connection-factories>
>>   <tx-connection-factory>
>>     <jndi-name>activemq/QueueConnectionFactory</jndi-name>
>>     <xa-transaction/>
>>     <track-connection-by-tx/>
>>     <rar-name>activemq-ra-4.0.1.rar</rar-name>
>>
>> <connection-definition>javax.jms.QueueConnectionFactory</connection-definition>
>>   </tx-connection-factory>
>> </connection-factories>
>>
>>
>> --
>> View this message in context:
>> http://www.nabble.com/XA-with-ActiveMQ-4.0.1-on-JBoss-4.0.2-tf2113894.html#a5828407
>> Sent from the ActiveMQ - User forum at Nabble.com.
>>
>>
> 
> 
> -- 
> 
> James
> -------
> http://radio.weblogs.com/0112098/
> 
> 

-- 
View this message in context: http://www.nabble.com/XA-with-ActiveMQ-4.0.1-on-JBoss-4.0.2-tf2113894.html#a5903827
Sent from the ActiveMQ - User forum at Nabble.com.


Mime
View raw message