<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!-- NewPage -->
<html lang="en">
<head>
<title>TransactionScoped</title>
<link rel="stylesheet" type="text/css" href="../../stylesheet.css" title="Style">
<script type="text/javascript" src="../../script.js"></script>
</head>
<body>
<script type="text/javascript"><!--
    try {
        if (location.href.indexOf('is-external=true') == -1) {
            parent.document.title="TransactionScoped";
        }
    }
    catch(err) {
    }
//-->
</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="topNav"><a name="navbar.top">
<!--   -->
</a>
<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
<a name="navbar.top.firstrow">
<!--   -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../overview-summary.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../index-all.html">Index</a></li>
<li><a href="../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList">
<li><a href="../../jakarta/transaction/TransactionRolledbackException.html" title="class in jakarta.transaction"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
<li><a href="../../jakarta/transaction/TransactionSynchronizationRegistry.html" title="interface in jakarta.transaction"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../index.html?jakarta/transaction/TransactionScoped.html" target="_top">Frames</a></li>
<li><a href="TransactionScoped.html" target="_top">No&nbsp;Frames</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_top">
<li><a href="../../allclasses-noframe.html">All&nbsp;Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
  allClassesLink = document.getElementById("allclasses_navbar_top");
  if(window==top) {
    allClassesLink.style.display = "block";
  }
  else {
    allClassesLink.style.display = "none";
  }
  //-->
</script>
</div>
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li>Required&nbsp;|&nbsp;</li>
<li>Optional</li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li>Element</li>
</ul>
</div>
<a name="skip.navbar.top">
<!--   -->
</a></div>
<!-- ========= END OF TOP NAVBAR ========= -->
<!-- ======== START OF CLASS DATA ======== -->
<div class="header">
<div class="subTitle">jakarta.transaction</div>
<h2 title="Annotation Type TransactionScoped" class="title">Annotation Type TransactionScoped</h2>
</div>
<div class="contentContainer">
<div class="description">
<ul class="blockList">
<li class="blockList">
<hr>
<br>
<pre>@Retention(value=RUNTIME)
 @Target(value={TYPE,METHOD,FIELD})
public @interface <span class="memberNameLabel">TransactionScoped</span></pre>
<div class="block"><p>The jakarta.transaction.TransactionScoped annotation provides the ability to
 specify a standard CDI scope to define bean instances whose lifecycle is
 scoped to the currently active Jakarta Transactions transaction. This annotation has no effect
 on classes which have non-contextual references such those defined as managed
 beans by the Jakarta EE specification.</p>
 The transaction scope is active when the return from a call to
 <code>UserTransaction.getStatus</code> or
 <code>TransactionManager.getStatus</code>
 is one of the following states:
 <ul>
 <li>Status.STATUS_ACTIVE
 <li>Status.STATUS_MARKED_ROLLBACK
 <li>Status.STATUS_PREPARED
 <li>Status.STATUS_UNKNOWN
 <li>Status.STATUS_PREPARING
 <li>Status.STATUS_COMMITTING
 <li>Status.STATUS_ROLLING_BACK
 </ul>
 <p>It is not intended that the term "active" as defined here in relation to the
 TransactionScoped annotation should also apply to its use in relation to
 transaction context, lifecycle, etc. mentioned elsewhere in this
 specification. The object with this annotation will be associated with the
 current active Jakarta Transactions transaction when the object is used. This association must
 be retained through any transaction suspend or resume calls as well as any
 <code>Synchronization.beforeCompletion</code> callbacks. Any
 <code>Synchronization.afterCompletion</code> methods will be invoked in an undefined
 context. The way in which the Jakarta Transactions transaction is begun and completed
 (for example via UserTransaction, Transactional interceptor, etc.) is of no consequence.
 The contextual references used across different Jakarta Transactions transactions are distinct.
 Refer to the CDI specification for more details on contextual references.
 A <code>jakarta.enterprise.context.ContextNotActiveException</code>
 will be thrown if an object with this annotation is used when the
 transaction context is not active.</p></div>
<dl>
<dt><span class="simpleTagLabel">Since:</span></dt>
<dd>JTA 1.2</dd>
</dl>
</li>
</ul>
</div>
</div>
<!-- ========= END OF CLASS DATA ========= -->
<!-- ======= START OF BOTTOM NAVBAR ====== -->
<div class="bottomNav"><a name="navbar.bottom">
<!--   -->
</a>
<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
<a name="navbar.bottom.firstrow">
<!--   -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../overview-summary.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../index-all.html">Index</a></li>
<li><a href="../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList">
<li><a href="../../jakarta/transaction/TransactionRolledbackException.html" title="class in jakarta.transaction"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
<li><a href="../../jakarta/transaction/TransactionSynchronizationRegistry.html" title="interface in jakarta.transaction"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../index.html?jakarta/transaction/TransactionScoped.html" target="_top">Frames</a></li>
<li><a href="TransactionScoped.html" target="_top">No&nbsp;Frames</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_bottom">
<li><a href="../../allclasses-noframe.html">All&nbsp;Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
  allClassesLink = document.getElementById("allclasses_navbar_bottom");
  if(window==top) {
    allClassesLink.style.display = "block";
  }
  else {
    allClassesLink.style.display = "none";
  }
  //-->
</script>
</div>
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li>Required&nbsp;|&nbsp;</li>
<li>Optional</li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li>Element</li>
</ul>
</div>
<a name="skip.navbar.bottom">
<!--   -->
</a></div>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
</body>
</html>
