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/

Reply via email to