<!DOCTYPE html>
<html lang="en">
  <head>

    <meta charset="UTF-8">
      <title>Transaction Annotations</title>
    <meta name="description" content="Apache TomEE">
    <meta name="author" content="Apache TomEE">
    <meta name="google-translate-customization" content="f36a520c08f4c9-0a04e86a9c075ce9-g265f3196f697cf8f-10">
    <meta http-equiv="Pragma" content="no-cache">
    <meta http-equiv="Expires" content="0">
    <meta http-equiv="Cache-Control" content="no-store, no-cache, must-revalidate, max-age=0">

    <!-- Le HTML5 shim, for IE6-8 support of HTML elements -->
    <!--[if lt IE 9]>
      <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
    <![endif]-->

    <!-- Le styles -->
    <link href="./resources/css/bootstrap.css" rel="stylesheet">
    <link href="./resources/css/prettify.css" rel="stylesheet">
    <!--link href="./resources/css/bootstrap-mods.css" rel="stylesheet"-->
    <link href="./resources/css/main.css" rel="stylesheet">
    <link href="./resources/font-awesome-4.6.3/css/font-awesome.min.css" rel="stylesheet">

    <script type="text/javascript">
        var t = encodeURIComponent(document.title.replace(/^\s+|\s+$/g,""));
        var u = encodeURIComponent(""+document.URL);
    
      function fbshare () {
          window.open(
                  "http://www.facebook.com/sharer/sharer.php?u="+u,
                  'Share on Facebook',
                  'width=640,height=426');
      };
      function gpshare () {
          window.open(
                  "https://plus.google.com/share?url="+u,
                  'Share on Google+',
                  'width=584,height=385');
      };
      function twshare () {
          window.open(
                  "https://twitter.com/intent/tweet?url="+u+"&text="+t,
                  'Share on Twitter',
                  'width=800,height=526');
      };
      function pinshare () {
          window.open("//www.pinterest.com/pin/create/button/?url="+u+"&media=http%3A%2F%2Ftomee.apache.org%2Fresources%2Fimages%2Ffeather-logo.png&description="+t,
                  'Share on Pinterest',
                  'width=800,height=526');
      };
    </script>

    <!-- Le fav and touch icons -->
    <link rel="shortcut icon" href="./favicon.ico">
    <link rel="apple-touch-icon" href="./resources/images/apple-touch-icon.png">
    <link rel="apple-touch-icon" sizes="72x72" href="./resources/images/apple-touch-icon-72x72.png">
    <link rel="apple-touch-icon" sizes="114x114" href="./resources/images/apple-touch-icon-114x114.png">

    <script src="./resources/js/prettify.js" type="text/javascript"></script>
    <script src="./resources/js/jquery-latest.js"></script>
    <script src="http://platform.twitter.com/widgets.js" type="text/javascript"></script>
    <script src="./resources/js/common.js"></script>
    <script src="./resources/js/prettyprint.js"></script>
    <!--script src="//assets.pinterest.com/js/pinit.js" type="text/javascript" async></script//-->
    
    <script type="text/javascript">

      var _gaq = _gaq || [];
      _gaq.push(['_setAccount', 'UA-2717626-1']);
      _gaq.push(['_setDomainName', 'apache.org']);
      _gaq.push(['_trackPageview']);

      (function() {
        var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
        ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
      })();

    </script>
  </head>

  <body>

    <div class="topbar" data-dropdown="dropdown">
      <div class="fill">
        <div class="container">
          <a class="brand" href="./index.html">Apache TomEE</a>
          <ul class="nav">
              <li class="dropdown">
                  <a class="dropdown-toggle" data-toggle="dropdown" href="#">
                  Apache
                      <b class="caret"></b>
                  </a>
                  <ul class="dropdown-menu">
                     <!-- <li><a href="./misc/whoweare.html">Who we are?</a></li> -->
                     <!-- <li><a href="./misc/heritage.html">Heritage</a></li> -->
                     <li><a href="http://www.apache.org">Apache Home</a></li>
                     <!-- <li><a href="./misc/resources.html">Resources</a></li> -->
                     <li><a href="./misc/contact.html">Contact</a></li>
                     <li><a href="./misc/legal.html">Legal</a></li>
                     <li><a href="http://www.apache.org/foundation/sponsorship.html">Sponsorship</a></li>
                     <li><a href="http://www.apache.org/foundation/thanks.html">Thanks</a></li>
                     <li class="divider"/>
                     <li><a href="http://www.apache.org/security">Security</a></li>
                  </ul>
              </li>
              <li><a href="./index.html">Home</a></li>
              <li><a href="./downloads.html">Downloads</a></li>
              <li><a href="./documentation.html">Documentation</a></li>
              <li><a href="./examples-trunk/index.html">Examples</a></li>
              <li><a href="./support.html">Support</a></li>
              <li><a href="./contribute.html">Contribute</a></li>
              <li><a href="./security/index.html">Security</a></li>
          </ul>

            <!-- Google CSE Search Box Begins  -->
            <FORM class="pull-right" id="searchbox_010475492895890475512:_t4iqjrgx90" action="http://www.google.com/cse">
                <INPUT type="hidden" name="cx" value="010475492895890475512:_t4iqjrgx90">
                <INPUT type="hidden" name="cof" value="FORID:0">
                <INPUT size="18" width="130" style="width:130px" name="q" type="text" placeholder="Search">
            </FORM>
            <!--<SCRIPT type="text/javascript" src="http://www.google.com/coop/cse/brand?form=searchbox_010475492895890475512:_t4iqjrgx90"></SCRIPT>-->
            <!-- Google CSE Search Box Ends -->
        </div>
      </div>
    </div>

    <div class="container">
    

<div class="page-header">
    <small><a href="./index.html">Home</a></small><br>
    <h1>Transaction Annotations

        <div style="float: right; position: relative; bottom: -10px; ">
            <a onclick="javascript:gpshare()" class="gp-share sprite" title="Share on Google+">share [gp]</a>
            <a onclick="javascript:fbshare()" class="fb-share sprite" title="Share on Facebook">share [fb]</a>
            <a onclick="javascript:twshare()" class="tw-share sprite" title="Share on Twitter">share [tw]</a>
            <a onclick="javascript:pinshare()" class="pin-share sprite" title="Share on Pinterest">share [pin]</a>
            <a data-toggle="modal" href="#edit" class="edit-page" title="Contribute to this Page">contribute</a>
        </div>
    </h1>
</div>

<p><em>Also see <a href="testing-transactions-example.html">Testing Transactions</a>
 for an example of how to use and test EJB transaction attributes</em></p>

<p>The <em>javax.ejb.TransactionAttribute</em> annotation (@TransactionAttribute) can
be applied to a bean class or it's methods.</p>

<p>Usage of the @TransactionAttribute requires you to specify one of six
different transaction attribute types defined via the
javax.ejb.TransactionAttributeType enum.</p>

<ul>
<li>TransactionAttributeType.<em>MANDATORY</em></li>
<li>TransactionAttributeType.<em>REQUIRED</em></li>
<li>TransactionAttributeType.<em>REQUIRES_NEW</em></li>
<li>TransactionAttributeType.<em>SUPPORTS</em></li>
<li>TransactionAttributeType.<em>NOT_SUPPORTED</em></li>
<li>TransactionAttributeType.<em>NEVER</em></li>
</ul>

<p>Per EJB 3.0 the default transaction attribute for all EJB 3.0 applications
is <em>REQUIRED</em>.  The default transaction attribute for EJB 2.1, 2.0 and 1.1
applications is vendor specific.  In OpenEJB EJB 2.1, 2.0 and 1.1
applications also use <em>REQUIRED</em> as the default.</p>

<p><a name="TransactionAnnotations-AttributeTypessummary"></a></p>

<h2>Attribute Types summary</h2>

<p>A simplistic way to visualize the transaction attributes is as follows.</p>

<table>
<tr><td> </th><th> Failing </th><th> Correcting </th><th> No Change </th></tr>
<tr><th> Transacted </td><td> MANDATORY </td><td> REQUIRED, REQUIRES_NEW </td><td> SUPPORTS </td></tr>
<tr><th> Not Transacted </td><td> NEVER </td><td> NOT_SUPPORTED </td><td> SUPPORTS </td></tr>
</table>

<p>The "<em>Transacted</em>" and "<em>Not Transacted</em>" categories represent the
container guarantee, i.e. if the bean method will or will not be invoked in
a transaction.  The "<em>Failing</em>", "<em>Correcting</em>", and "<em>No Change</em>"
categories represent the action take by the container to achieve that
guarantee.</p>

<p>For example, <em>Never</em> and <em>Mandatory</em> are categorized as "<em>Failing</em>" and
will cause the container to throw an exception to the caller if there is
(Tx Never) or is not (Tx Mandatory) a transaction in progress when the
method is called.  The attributes <em>Required</em>, <em>RequiresNew</em>, and
<em>NotSupported</em> are categorized as "<em>Correcting</em>" as they will cause the
container to adjust the transactional state automatically as needed to
match the desired state, rather than blocking the invocation by throwing an
exception.</p>

<p><a name="TransactionAnnotations-DetaileddescriptionofeachAttribute"></a></p>

<h3>Detailed description of each Attribute</h3>

<p><a name="TransactionAnnotations-MANDATORY"></a></p>

<h4>MANDATORY</h4>

<p>A <em>MANDATORY</em> method is guaranteed to always be executed in a transaction. 
However, it's the caller's job to take care of suppling the transaction. 
If the caller attempts to invoke the method <em>outside</em> of a transaction,
then the container will block the call and throw them an <em>exception</em>.</p>

<p><a name="TransactionAnnotations-REQUIRED"></a></p>

<h4>REQUIRED</h4>

<p>A <em>REQUIRED</em> method is guaranteed to always be executed in a transaction. 
If the caller attempts to invoke the method <em>outside</em> of a transaction, the
container will <em>start</em> a transaction, execute the method, then <em>commit</em> the
transaction.</p>

<p><a name="TransactionAnnotations-REQUIRES_NEW"></a></p>

<h4>REQUIRES_NEW</h4>

<p>A <em>REQUIRES</em>NEW_ method is guaranteed to always be executed in a
transaction.  If the caller attempts to invoke the method <em>inside or
outside</em> of a transaction, the container will still <em>start</em> a transaction,
execute the method, then <em>commit</em> the transaction.  Any transaction the
caller may have in progress will be <em>suspended</em> before the method execution
then <em>resumed</em> afterward.</p>

<p><a name="TransactionAnnotations-NEVER"></a></p>

<h4>NEVER</h4>

<p>A <em>NEVER</em> method is guaranteed to never be executed in a transaction. 
However, it's the caller's job to ensure there is no transaction.  If the
caller attempts to invoke the method <em>inside</em> of a transaction, then the
container will block the call and throw them an <em>exception</em>.</p>

<p><a name="TransactionAnnotations-NOT_SUPPORTED"></a></p>

<h4>NOT_SUPPORTED</h4>

<p>A <em>NOT</em>SUPPORTED_ method is guaranteed to never be executed in a
transaction.  If the caller attempts to invoke the method <em>inside</em> of a
transaction, the container will <em>suspend</em> the caller's transaction, execute
the method, then <em>resume</em> the caller's transaction.</p>

<p><a name="TransactionAnnotations-SUPPORTS"></a></p>

<h4>SUPPORTS</h4>

<p>A <em>SUPPORTS</em> method is guaranteed to adopt the exact transactional state of
the caller.  These methods can be invoked by caller's <em>inside or outside</em>
of a transaction.  The container will do nothing to change that state.</p>

<p><a name="TransactionAnnotations-OnMethods"></a></p>

<h2>On Methods</h2>

<pre><code>@Stateless
public static class MyBean implements MyBusinessInterface {

    @TransactionAttribute(TransactionAttributeType.MANDATORY)
    public String codeRed(String s) {
    return s;
    }

    public String codeBlue(String s) {
    return s;
    }
}
</code></pre>

<ul>
<li><em>codeRed</em> will be invoked with the attribute of <em>MANDATORY</em></li>
<li><em>codeBlue</em> will be invoked with the default attribute of <em>REQUIRED</em></li>
</ul>

<p><a name="TransactionAnnotations-OnClasses"></a></p>

<h2>On Classes</h2>

<pre><code>@Stateless
@TransactionAttribute(TransactionAttributeType.MANDATORY)
public static class MyBean implements MyBusinessInterface {

    public String codeRed(String s) {
    return s;
    }

    public String codeBlue(String s) {
    return s;
    }
}
</code></pre>

<ul>
<li><em>codeRed</em> and <em>codeBlue</em> will be invoked with the attribute of
<em>MANDATORY</em></li>
</ul>

<p><a name="TransactionAnnotations-Mixedonclassesandmethods"></a></p>

<h2>Mixed on classes and methods</h2>

<pre><code>@Stateless
@TransactionAttribute(TransactionAttributeType.SUPPORTS)
public static class MyBean implements MyBusinessInterface {

    @TransactionAttribute(TransactionAttributeType.NEVER)
    public String codeRed(String s) {
    return s;
    }

    public String codeBlue(String s) {
    return s;
    }

    @TransactionAttribute(TransactionAttributeType.REQUIRED)
    public String codeGreen(String s) {
    return s;
    }
}
</code></pre>

<ul>
<li><em>codeRed</em> will be invoked with the attribute of <em>NEVER</em></li>
<li><em>codeBlue</em> will be invoked with the attribute of <em>SUPPORTS</em></li>
<li><em>codeGreen</em> will be invoked with the attribute of <em>REQUIRED</em></li>
</ul>

<p><a name="TransactionAnnotations-IllegalUsage"></a></p>

<h1>Illegal Usage</h1>

<p>Generally, transaction annotationss cannot be made on AroundInvoke methods
and most callbacks.</p>

<p>The following usages of @TransactionAttribute have no effect.</p>

<pre><code>@Stateful
public class MyStatefulBean implements  MyBusinessInterface  {

    @PostConstruct
    @TransactionAttribute(TransactionAttributeType.NEVER)
    public void constructed(){

    }

    @PreDestroy
    @TransactionAttribute(TransactionAttributeType.NEVER)
    public void destroy(){

    }

    @AroundInvoke
    @TransactionAttribute(TransactionAttributeType.NEVER)
    public Object invoke(InvocationContext invocationContext) throws Exception {
    return invocationContext.proceed();
    }

    @PostActivate
    @TransactionAttribute(TransactionAttributeType.NEVER)
    public void activated(){

    }

    @PrePassivate
    @TransactionAttribute(TransactionAttributeType.NEVER)
    public void passivate(){

    }
}
</code></pre>




        <div id="edit" class="modal hide fade in" style="display: none; ">
            <div class="modal-header">
                <a class="close" data-dismiss="modal">x</a>

                <h3>Thank you for contributing to the documentation!</h3>
            </div>
            <div class="modal-body">
                <h4>Any help with the documentation is greatly appreciated.</h4>
                <p>All edits are reviewed before going live, so feel free to do much more than fix typos or links.  If you see a page that could benefit from an entire rewrite, we'd be thrilled to review it.  Don't be surprised if we like it so much we ask you for help with other pages :)</p>
                <small>NOTICE: unless indicated otherwise on the pages in question, all editable content available from apache.org is presumed to be licensed under the Apache License (AL) version 2.0 and hence all submissions to apache.org treated as formal Contributions under the license terms.</small>
                <!--[if gt IE 6]>
                <h4>Internet Explorer Users</h4>
                <p>If you are not an Apache committer, click the Yes link and enter a <i>anonymous</i> for the username and leave the password empty</p>
                <![endif]-->

            </div>
            <div class="modal-footer">
                Do you have an Apache ID?
                <a href="javascript:void(location.href='https://cms.apache.org/redirect?uri='+escape(location.href))" class="btn">Yes</a>
                <a href="javascript:void(location.href='https://anonymous:@cms.apache.org/redirect?uri='+escape(location.href))" class="btn">No</a>
            </div>
        </div>
        <script src="./resources/js/bootstrap-modal.js"></script>

        <footer>
            <p>Copyright &copy; 1999-2016 The Apache Software Foundation, Licensed under the Apache License, Version 2.0.
                Apache TomEE, TomEE, Apache, the Apache feather logo, and the Apache TomEE project logo are trademarks of The Apache Software Foundation.
                All other marks mentioned may be trademarks or registered trademarks of their respective owners.</p>
        </footer>

    </div> <!-- /container -->

    <!-- Javascript
    ================================================== -->
    <!-- Placed at the end of the document so the pages load faster -->
    <script src="./resources/js/bootstrap-dropdown.js"></script>

  </body>
</html>
