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

Markus Jung resolved TOMEE-4518.
--------------------------------
    Resolution: Fixed

> Remove transaction propagation
> ------------------------------
>
>                 Key: TOMEE-4518
>                 URL: https://issues.apache.org/jira/browse/TOMEE-4518
>             Project: TomEE
>          Issue Type: Improvement
>            Reporter: Markus Jung
>            Assignee: Markus Jung
>            Priority: Major
>             Fix For: 10.1.3
>
>          Time Spent: 40m
>  Remaining Estimate: 0h
>
> See [https://lists.apache.org/thread/9hhxsrclzhc49ln74xc029j836d6g7zq]
> Quoting David's initial mail:
> The Geronimo TransactionManager is not capable of supporting a transaction 
> across multiple threads. To my knowledge it uses a ThreadLocal itself to 
> track state and related code such as UserTransaction, 
> TransactionSynchronizationRegistry and JTA as a spec are not capable for 
> coordinating one transaction across multiple threads, nor are specs on top 
> such as JPA.
> After a quick look it indeed looks like Geronimo txmanager internally uses 
> ThreadLocals (e.g. 
> https://github.com/apache/geronimo-txmanager/blob/trunk/geronimo-transaction/src/main/java/org/apache/geronimo/transaction/manager/TransactionManagerImpl.java)
>  to store Transaction state, so we should not try to be smart and propagate 
> it.
> Reading through the concurrency spec I also found no hard requirement to 
> support tx propagation, instead:
> * in §2.3: "The types of contexts to be propagated from a contextualizing 
> application component include JNDI n aming context classloader, and security 
> information. Containers must support propagation of these context types. In 
> addition, containers can choose 
> to support propagation of other types of context." -> sounds like Transaction 
> propagation not being a requirement
> * in §3.3.5 "By default, proxy methods suspend any transactional context on 
> the thread and allow components to manually control global transaction 
> demarcation boundaries. Context objects may optionally begin, commit, and 
> rollback a transaction. See EE.4 for details on transaction management in 
> Jakarta EE. By using an execution property when creating the contextual proxy 
> object, application components can choose to not suspend the transactional 
> context on the thread, and any resources used by the task will be enlisted to 
> that transaction."
> * @ContextServiceDefinition javadoc: "Jakarta EE providers need not support 
> the propagation of transactions to other threads and can reject resource 
> definition annotations that include transaction as a propagated context."



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to