[ 
https://issues.apache.org/jira/browse/CXF-6425?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Andrei Shakirin updated CXF-6425:
---------------------------------
    Comment: was deleted

(was: After discussion with Christian, I admit that external transactions in 
PollingMessageListenerContainer doesn't make a lot of sense.
If transaction is automatically attached to the thread (for example by 
container), it can be committed only after stop() method. This means that 
single transaction will include receiving more than one JMS message or 
PollingMessageListenerContainer should be stopped every time when message is 
received. Currently I have no valid use case for that.
The code will be update in a way to throw exception if external transaction is 
detected and ensure to commit or rollback transaction in every case (do not 
leave active transactions in thread).)

> Check for external transactions in PollingMessageListenerContainer
> ------------------------------------------------------------------
>
>                 Key: CXF-6425
>                 URL: https://issues.apache.org/jira/browse/CXF-6425
>             Project: CXF
>          Issue Type: Improvement
>          Components: JMS
>    Affects Versions: 3.0.1, 3.1.0
>            Reporter: Andrei Shakirin
>            Assignee: Andrei Shakirin
>
> Currently PollingMessageListenerContainer doesn't check if transaction was 
> already created by container and tries to created nested one.
> That causes the following error:
> {code}
> 10:31:13,826 | WARN | pool-52-thread-1 | essageListenerContainer$XAPoller 128 
> | 158 - org.apache.cxf.cxf-rt-transports-jms - 3.1.1.SNAPSHOT | Unexpected 
> exception. Res
> tarting session and consumer javax.transaction.NotSupportedException: Nested 
> Transactions are not supported
> at 
> org.apache.geronimo.transaction.manager.TransactionManagerImpl.begin(TransactionManagerImpl.java:157)
>  111:org.apache.aries.transaction.manager:1.1.1]
> at 
> org.apache.geronimo.transaction.manager.TransactionManagerImpl.begin(TransactionManagerImpl.java:152)[111:org.apache.aries.transaction.manager:1.1.1]
> at 
> org.apache.cxf.transport.jms.util.PollingMessageListenerContainer$XAPoller.run(PollingMessageListenerContainer.java:107)[158:org.apache.cxf.cxf-rt-transports-jms:3.1.1.SNAPSHOT]
> at 
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)[:1.7.0_21]
> at 
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)[:1.7.0_21]
> at java.lang.Thread.run(Thread.java:722)[:1.7.0_21]
> {code}
> Proposal: check if the transaction already exists and if yes:
> a) not start it explicitly through TransactionManager
> b) in case of exception call setRollbackOnly()



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to