<span class="Apple-style-span" style="font-family: arial, sans-serif; font-size: 13px; background-color: rgb(255, 255, 255); "><p><b>Section 2.4.1.</b></p><p>TODO There are six standard scopes...  (not five)</p><p>TODO (Then list @TransactionScope as one of those scopes.)</p>
</span><span class="Apple-style-span" style="font-family: arial, sans-serif; font-size: 13px; background-color: rgb(255, 255, 255); "><b>Section 6.7.8 Transaction Context Lifecycle</b></span><div><span class="Apple-style-span" style="font-family: arial, sans-serif; font-size: 13px; background-color: rgb(255, 255, 255); "><br>
</span></div><div><span class="Apple-style-span" style="font-family: arial, sans-serif; font-size: 13px; background-color: rgb(255, 255, 255); "><p>This should work with various types of transaction management systems, but it is defined in terms of JTA for ease of documentation by associating it with a known, specified JSR standard.</p>
<div><br></div></span></div><div><span class="Apple-style-span" style="font-family: arial, sans-serif; font-size: 13px; background-color: rgb(255, 255, 255); "></span><span class="Apple-style-span" style="font-family: arial, sans-serif; font-size: 13px; background-color: rgb(255, 255, 255); ">The transaction context is provided by a built-in context object for the built-in scope type @TransactionScoped. The transaction scope is active when TransactionManager.begin is called (when the status goes to active), and ends when TransactionManager.commit or TransactionManager.rollback is called. </span><span class="Apple-style-span" style="font-family: arial, sans-serif; font-size: 13px; background-color: rgb(255, 255, 255); "><p>
The transaction context is shared between all beans involved in the transaction. The transaction context is destroyed when transaction is rolledback, or committed.</p><p>An event with the TransactionEvent as payload and with qualifier @Initialized(TransactionScoped.class) is fired when the transaction context is initialized and moved to the active state and an event with qualifier @Destroyed(TransactionScoped.class) when the transaction context is destroyed.</p>
</span><span class="Apple-style-span" style="font-family: arial, sans-serif; font-size: 13px; background-color: rgb(255, 255, 255); ">Design Notes: CDI transaction context could work with JTA by registering with a Synchronization callback with the Transaction object in JTA. Then CDI will listen for the STATUS_ACTIVE state to indicate a transaction is active,  STATUS_ROLLEDBACK to be notified of a rollback and lastly STATUS_COMMITTED to be notified of a commit. The contextual instances will be stored directly or indirectly in the TransactionSynchronizationRegistry when STATUS_ACTIVE is handled, and removed when the </span><span class="Apple-style-span" style="font-family: arial, sans-serif; font-size: 13px; background-color: rgb(255, 255, 255); ">STATUS_ROLLEDBACK or </span><span class="Apple-style-span" style="font-family: arial, sans-serif; font-size: 13px; background-color: rgb(255, 255, 255); ">STATUS_COMMITTED is handled.</span></div>
<div><font class="Apple-style-span" face="arial, sans-serif"><br></font></div><div><font class="Apple-style-span" face="arial, sans-serif">If a transaction is suspended, the transactional scoped data is not impacted. It is only the transaction active status or its final state of committed or rolledback that impacts the lifecycle of the CDI transaction context.<br>
</font><div><br></div>-- <br><b>Rick Hightower</b><br>(415) 968-9037 <br><a href="http://www.google.com/profiles/RichardHightower" target="_blank">Profile</a> <br><br>
</div>