| <html><head> | 
 |       <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> | 
 |    <title>2.  The EntityTransaction Interface</title><link rel="stylesheet" href="css/docbook.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.72.0"><link rel="start" href="manual.html" title="Apache OpenJPA 1.2 User's Guide"><link rel="up" href="jpa_overview_trans.html" title="Chapter 9.  Transaction"><link rel="prev" href="jpa_overview_trans.html" title="Chapter 9.  Transaction"><link rel="next" href="jpa_overview_query.html" title="Chapter 10.  JPA Query"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">2.  | 
 |             The EntityTransaction Interface | 
 |         </th></tr><tr><td width="20%" align="left"><a accesskey="p" href="jpa_overview_trans.html">Prev</a> </td><th width="60%" align="center">Chapter 9.  | 
 |         Transaction | 
 |     </th><td width="20%" align="right"> <a accesskey="n" href="jpa_overview_query.html">Next</a></td></tr></table><hr></div><div class="section" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="jpa_overview_trans_local"></a>2.  | 
 |             The EntityTransaction Interface | 
 |         </h2></div></div></div><a class="indexterm" name="d0e5625"></a><div class="mediaobject"><table border="0" summary="manufactured viewport for HTML img" cellspacing="0" cellpadding="0" width="129"><tr><td><img src="img/jpa-transaction.png"></td></tr></table></div><p> | 
 | JPA integrates with your container's <span class="emphasis"><em>managed</em></span> transactions, | 
 | allowing you to use the container's declarative transaction demarcation and its | 
 | Java Transaction API (JTA) implementation for transaction management. Outside of | 
 | a container, though, you must demarcate transactions manually through JPA. The | 
 | <code class="classname">EntityTransaction</code> interface controls unmanaged | 
 | transactions in JPA. | 
 |         </p><pre class="programlisting"> | 
 | public void begin(); | 
 | public void commit(); | 
 | public void rollback(); | 
 | </pre><p> | 
 |         <a class="indexterm" name="d0e5646"></a> | 
 |         <a class="indexterm" name="d0e5652"></a> | 
 |         <a class="indexterm" name="d0e5658"></a> | 
 |         <a class="indexterm" name="d0e5664"></a> | 
 |         <a class="indexterm" name="d0e5670"></a> | 
 | The <code class="methodname">begin</code>, <code class="methodname">commit</code>, and | 
 | <code class="methodname">rollback</code> methods demarcate transaction boundaries. The | 
 | methods should be self-explanatory: <code class="methodname">begin</code> starts a | 
 | transaction, <code class="methodname">commit</code> attempts to commit the | 
 | transaction's changes to the datastore, and <code class="methodname">rollback</code> | 
 | aborts the transaction, in which case the datastore is "rolled back" to its | 
 | previous state. JPA implementations will automatically roll back transactions if | 
 | any exception is thrown during the commit process. | 
 |         </p><p> | 
 | Unless you are using an extended persistence context, committing or rolling back | 
 | also ends the persistence context. All managed entites will be detached from the | 
 | <code class="classname">EntityManager</code>. | 
 |         </p><pre class="programlisting"> | 
 | public boolean isActive(); | 
 | </pre><p> | 
 |         <a class="indexterm" name="d0e5703"></a> | 
 | Finally, the <code class="methodname">isActive</code> method returns <code class="literal">true | 
 | </code> if the transaction is in progress (<code class="methodname">begin</code> | 
 | has been called more recently than <code class="methodname">commit</code> or | 
 | <code class="methodname">rollback</code>), and <code class="literal">false</code> otherwise. | 
 |         </p><div class="example"><a name="jpa_overview_trans_group"></a><p class="title"><b>Example 9.1.  | 
 |                 Grouping Operations with Transactions | 
 |             </b></p><div class="example-contents"><pre class="programlisting"> | 
 | public void transferFunds(EntityManager em, User from, User to, double amnt) { | 
 |     // note: it would be better practice to move the transaction demarcation | 
 |     // code out of this method, but for the purposes of example... | 
 |     Transaction trans = em.getTransaction(); | 
 |     trans.begin(); | 
 |     try | 
 |     { | 
 |         from.decrementAccount(amnt); | 
 |         to.incrementAccount(amnt); | 
 |         trans.commit(); | 
 |     } | 
 |     catch (RuntimeException re) | 
 |     { | 
 |         if (trans.isActive()) | 
 |             trans.rollback();   // or could attempt to fix error and retry | 
 |         throw re; | 
 |     } | 
 | } | 
 | </pre></div></div><br class="example-break"></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="jpa_overview_trans.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="jpa_overview_trans.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="jpa_overview_query.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 9.  | 
 |         Transaction | 
 |      </td><td width="20%" align="center"><a accesskey="h" href="manual.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 10.  | 
 |         JPA Query | 
 |     </td></tr></table></div></body></html> |