Hi, The first time the problem comes when ConsumerInfo message is send while creating a connection. I have attached a stack trace upto calling the getConnection(). The getConnection() method code is as follows
connection = dataSource.getConnection(); *boolean* autoCommit = !inTx; *if* (connection.getAutoCommit() != autoCommit) { connection.setAutoCommit(autoCommit); } In this *inTx* is false, which will result in setting autoCommit to true for an XA connection. begin() method is the only place in which *inTx* is set to true. In this case the JDBCPersistenceAdapter just creates a new TransactionContext and without calling the begin it uses that for issuing getConnection(). Can I pass the Xid information that is available earlier in the stack trace to check whether the connection is XA or not. Or is there any other better way to do it. TransactionContext.getConnection() line: 58 DefaultJDBCAdapter.doGetDestinations(TransactionContext) line: 566 JDBCPersistenceAdapter.getDestinations() line: 95 JournalPersistenceAdapter.getDestinations() line: 145 DestinationFactoryImpl.getDestinations() line: 70 ManagedTopicRegion(AbstractRegion).getInactiveDestinations() line: 256 ManagedTopicRegion(TopicRegion).getInactiveDestinations() line: 256 ManagedTopicRegion(AbstractRegion).addConsumer(ConnectionContext, ConsumerInfo) line: 212 ManagedTopicRegion(TopicRegion).addConsumer(ConnectionContext, ConsumerInfo) line: 110 ManagedRegionBroker(RegionBroker).addConsumer(ConnectionContext, ConsumerInfo) line: 340 TransactionBroker(BrokerFilter).addConsumer(ConnectionContext, ConsumerInfo) line: 86 AdvisoryBroker.addConsumer(ConnectionContext, ConsumerInfo) line: 78 CompositeDestinationBroker(BrokerFilter).addConsumer(ConnectionContext, ConsumerInfo) line: 86 BrokerService$2(MutableBrokerFilter).addConsumer(ConnectionContext, ConsumerInfo) line: 96 TransportConnection.processAddConsumer(ConsumerInfo) line: 586 ConsumerInfo.visit(CommandVisitor) line: 313 TransportConnection.service(Command) line: 294 TransportConnection$1.onCommand(Object) line: 185 ResponseCorrelator.onCommand(Object) line: 95 MutexTransport(TransportFilter).onCommand(Object) line: 65 VMTransportServer$1(VMTransport).syncOneWay(Object) line: 96 VMTransportServer$1(VMTransport).oneway(Object) line: 83 MutexTransport.oneway(Object) line: 47 ResponseCorrelator.asyncRequest(Object, ResponseCallback) line: 69 ResponseCorrelator.request(Object) line: 74 ActiveMQConnection.syncSendPacket(Command) line: 1175 AdvisoryConsumer.<init>(ActiveMQConnection, ConsumerId) line: 46 ActiveMQConnection.ensureConnectionInfoSent() line: 1272 TransactionContext.setXid(Xid) line: 554 TransactionContext.start(Xid, int) line: 299 ActiveMQManagedConnection$1(LocalAndXATransaction).start(Xid, int) line: 136 On 9/25/07, anish pathadan <[EMAIL PROTECTED]> wrote: > Hi > The problem happens only if I use an external XA datasource.I used XA > datasource created in geronimo.This datasource is set inthe Persistence > adapter factory before starting the brokerservice. > It seems that Activemq doesn't recognise it as an XA datasource and tries > to set autocommit to true in TransactionContext. I think the problem can be > solved if I can somehow know whether the transaction is XA or not in > org.apache.activemq.store.jdbc.TransactionContext. > The question is how can I know that???. Or is there any other better way > to solve it? > > > On 9/20/07, anish pathadan <[EMAIL PROTECTED]> wrote: > > > Hi Hiram, > > Thanks for that info.I used the default derby database.I will try > > creating an XA datasouce and using it. > > > > On 9/20/07, Hiram Chirino <[EMAIL PROTECTED] > wrote: > > > > > > How did you configure the ActiveMQ datasource? It's data source > > > should be setup as an XA datasource. > > > > > > On 9/20/07, anish pathadan <[EMAIL PROTECTED]> wrote: > > > > Hi All, > > > > I am trying to send messages to active mq within an XA > > > transaction. I > > > > used jdbc persistence and VM connector. When tried to send message I > > > am > > > > getting an error "unable to set autocommit on within an XA > > > > transaction". This is what I find out after the analysis. > > > > > > > > org.apache.activemq.store.jdbc.TransactionContext's getConnection() > > > and > > > > close() methods tries to set autocommit ON on the jdbc connection. > > > This will > > > > cause the above said exception because getConnection() and close() > > > method is > > > > called within an XA transaction. There is check in this method to > > > see > > > > whether the method is called within a transaction or not. But the > > > variable > > > > is having incorrect value when called within an XA transaction. > > > > > > > > My question is how can I determine whether the method is called > > > within an XA > > > > transaction or not?. Or is there any otherway to solve this issue? > > > > Best Regards, > > > > Anish Pathadan > > > > > > > > > > > > > -- > > > Regards, > > > Hiram > > > > > > Blog: http://hiramchirino.com > > > > > > > > > > > -- > > Best Regards, > > Anish Pathadan > > > > > -- > Best Regards, > Anish Pathadan -- Best Regards, Anish Pathadan