On Wed, Aug 26, 2009 at 12:02 PM, Rajika Kumarasiri <[email protected]> wrote:
hi again,
I located the problem. This happens in ServiceTaskManager.java:396 where we
create a new user transaction in the while loop. The problem occurs when we
try to create a second transaction in the same thread which gives the
mentioned exception. I put the following check in which if a tranasction is
already associated with the current thread of execution we'll live with
it(use-existing-one-or-new). If you are happy with it I can provide it as a
patch.
<code>
if (transactionality == BaseConstants.TRANSACTION_JTA) {
ut = getUserTransaction();
if (ut.getStatus() == Status.STATUS_NO_TRANSACTION) {
ut.begin();
}
}
</code>
-Rajika
>
> On Sun, Aug 2, 2009 at 11:17 PM, Rajika Kumarasiri <[email protected]>wrote:
> hello everybody,
> I just looked into the problem and it seems the current thread is already
> associate with a transaction. I guess we need to get the status of the
> current transaction and if there is an existing one we need to join with it
> otherwise we need to start a transaction.
>
> -Rajika
>
>
>
> hello everybody,
>> I am trying to use JTA transaction in JMS transport. I deployed the the
>> latest synapse war distribution(I studied that we need to have a JTA
>> provider within the J2EE server where we deploy synpase), inside JBoss
>> 5.0.0 GA. It gives the following execption when I use a JTA trasaction
>> (<parameter name="transport.Transactionality">jta</parameter>). It works
>> fine with local transactions(<parameter
>> name="transport.Transactionality">local</parameter>). According to the
>> stack trace it's clear that we are trying to start a new transaction inside
>> the JMS transport while another tx is already in progress. Any help to fix
>> the issue is higly appriciated. Thanks in advance.
>>
>> My axis2.xml configuration for JMS transport listner is as follows.
>>
>> <transportReceiver name='jms'
>> class='org.apache.axis2.transport.jms.JMSListener'>
>> <parameter name='default' locked='false'>
>> <parameter
>> name='java.naming.factory.initial'>org.jnp.interfaces.NamingContextFactory</parameter>
>> <parameter
>> name='java.naming.provider.url'>jnp://localhost:1099</parameter>
>> <parameter
>> name='java.naming.factory.url.pkgs'>org.jboss.naming:org.jnp.interfaces</parameter>
>> <parameter
>> name='transport.jms.ConnectionFactoryJNDIName'>ConnectionFactory</parameter>
>> <parameter name="transport.Transactionality">jta</parameter>
>> <parameter
>> name="transport.UserTxnJNDIName">java:comp/UserTransaction</parameter>
>> </parameter>
>> </transportReceiver>
>>
>>
>> 21:51:41,679 INFO [STDOUT] 21:51:41,678 ERROR [ServiceTaskManager]
>> Listener Task is already associated with a transaction
>> javax.transaction.NotSupportedException:
>> BaseTransaction.checkTransactionState -
>> [com.arjuna.ats.internal.jta.transaction.arjunacore.alreadyassociated]
>> [com.arjuna.ats.internal.jta.transaction.arjunacore.alreadyassociated]
>> thread is already associated with a transaction!
>> at
>> com.arjuna.ats.internal.jta.transaction.arjunacore.BaseTransaction.begin(BaseTransaction.java:79)
>> at
>> com.arjuna.ats.jbossatx.BaseTransactionManagerDelegate.begin(BaseTransactionManagerDelegate.java:65)
>> at
>> org.jboss.tm.usertx.client.ServerVMClientUserTransaction.begin(ServerVMClientUserTransaction.java:137)
>> at
>> org.apache.axis2.transport.jms.ServiceTaskManager$MessageListenerTask.run(ServiceTaskManager.java:394)
>> at
>> org.apache.axis2.transport.base.threads.NativeWorkerPool$1.run(NativeWorkerPool.java:58)
>> at
>> java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:650)
>> at
>> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:675)
>> at java.lang.Thread.run(Thread.java:595)
>> 21:51:41,679 INFO [STDOUT] 21:51:41,679 ERROR [NativeWorkerPool] Uncaught
>> exception
>> org.apache.axis2.transport.jms.AxisJMSException: Listener Task is already
>> associated with a transaction
>> at
>> org.apache.axis2.transport.jms.ServiceTaskManager.handleException(ServiceTaskManager.java:957)
>> at
>> org.apache.axis2.transport.jms.ServiceTaskManager.access$700(ServiceTaskManager.java:48)
>> at
>> org.apache.axis2.transport.jms.ServiceTaskManager$MessageListenerTask.run(ServiceTaskManager.java:397)
>> at
>> org.apache.axis2.transport.base.threads.NativeWorkerPool$1.run(NativeWorkerPool.java:58)
>> at
>> java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:650)
>> at
>> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:675)
>> at java.lang.Thread.run(Thread.java:595)
>> Caused by: javax.transaction.NotSupportedException:
>> BaseTransaction.checkTransactionState -
>> [com.arjuna.ats.internal.jta.transaction.arjunacore.alreadyassociated]
>> [com.arjuna.ats.internal.jta.transaction.arjunacore.alreadyassociated]
>> thread is already associated with a transaction!
>> at
>> com.arjuna.ats.internal.jta.transaction.arjunacore.BaseTransaction.begin(BaseTransaction.java:79)
>> at
>> com.arjuna.ats.jbossatx.BaseTransactionManagerDelegate.begin(BaseTransactionManagerDelegate.java:65)
>> at
>> org.jboss.tm.usertx.client.ServerVMClientUserTransaction.begin(ServerVMClientUserTransaction.java:137)
>> at
>> org.apache.axis2.transport.jms.ServiceTaskManager$MessageListenerTask.run(ServiceTaskManager.java:394)
>> ... 4 more
>> 21:51:41,697 INFO [STDOUT] 21:51:41,678 ERROR [ServiceTaskManager]
>> Listener Task is already associ
>>
>>
>>
>>
>> --
>> http://wso2.org
>> http://llvm.org
>> http://www.minix3.org/
>>
>>
>>
>
>
> --
> http://wso2.org
> http://llvm.org
> http://www.minix3.org/
>
>
>
--
http://wso2.org
http://llvm.org
http://www.minix3.org/