blob: 6d175217aa46c0abe3ff0fe00cbf08146a8116ab [file] [log] [blame]
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<link rel="shortcut icon" type="image/x-icon" href="../../../../favicon.ico" />
<title>
UnitOfWork
| Guice
</title>
<link href="../../../../../javadoc/assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
<link href="../../../../../javadoc/assets/customizations.css" rel="stylesheet" type="text/css" />
<script src="../../../../../javadoc/assets/search_autocomplete.js" type="text/javascript"></script>
<script src="../../../../../javadoc/assets/jquery-resizable.min.js" type="text/javascript"></script>
<script src="../../../../../javadoc/assets/android-developer-docs.js" type="text/javascript"></script>
<script src="../../../../../javadoc/assets/prettify.js" type="text/javascript"></script>
<script type="text/javascript">
setToRoot("../../../../", "../../../../../javadoc/assets/");
</script>
<script src="../../../../../javadoc/assets/android-developer-reference.js" type="text/javascript"></script>
<script src="../../../../../javadoc/assets/navtree_data.js" type="text/javascript"></script>
<script src="../../../../../javadoc/assets/customizations.js" type="text/javascript"></script>
<noscript>
<style type="text/css">
html,body{overflow:auto;}
#body-content{position:relative; top:0;}
#doc-content{overflow:visible;border-left:3px solid #666;}
#side-nav{padding:0;}
#side-nav .toggle-list ul {display:block;}
#resize-packages-nav{border-bottom:3px solid #666;}
</style>
</noscript>
</head>
<body class="Guice_3.0">
<div id="header">
<div id="headerLeft">
<span id="masthead-title">Guice</span>
</div>
<div id="headerRight">
<div id="search" >
<div id="searchForm">
<form accept-charset="utf-8" class="gsc-search-box"
onsubmit="return submit_search()">
<table class="gsc-search-box" cellpadding="0" cellspacing="0"><tbody>
<tr>
<td class="gsc-input">
<input id="search_autocomplete" class="gsc-input" type="text" size="33" autocomplete="off"
title="search developer docs" name="q"
value="search developer docs"
onFocus="search_focus_changed(this, true)"
onBlur="search_focus_changed(this, false)"
onkeydown="return search_changed(event, true, '../../../../')"
onkeyup="return search_changed(event, false, '../../../../')" />
<div id="search_filtered_div" class="no-display">
<table id="search_filtered" cellspacing=0>
</table>
</div>
</td>
<td class="gsc-search-button">
<input type="submit" value="Search" title="search" id="search-button" class="gsc-search-button" />
</td>
<td class="gsc-clear-button">
<div title="clear results" class="gsc-clear-button">&nbsp;</div>
</td>
</tr></tbody>
</table>
</form>
</div><!-- searchForm -->
</div><!-- search -->
<div id="api-level-toggle">
<input type="checkbox" id="apiLevelCheckbox" onclick="toggleApiLevelSelector(this)" />
<label for="apiLevelCheckbox" class="disabled">Filter by API Level: </label>
<select id="apiLevelSelector">
<!-- option elements added by buildApiLevelSelector() -->
</select>
</div>
<script>
var SINCE_DATA = [ 'Guice_1.0', 'Guice_2.0', 'Guice_3.0' ];
var SINCE_LABELS = [ 'Guice_1.0', 'Guice_2.0', 'Guice_3.0' ];
buildApiLevelSelector();
addLoadEvent(changeApiLevel);
</script>
</div>
</div><!-- header -->
<div class="g-section g-tpl-240" id="body-content">
<div class="g-unit g-first side-nav-resizable" id="side-nav">
<div id="swapper">
<div id="nav-panels">
<div id="resize-packages-nav">
<div id="packages-nav">
<div id="index-links"><nobr>
<a href="../../../../packages.html" >Package Index</a> |
<a href="../../../../classes.html" >Class Index</a></nobr>
</div>
<ul>
<li class="api apilevel-Guice_1.0">
<a href="../../../../com/google/inject/package-summary.html">com.google.inject</a></li>
<li class="api apilevel-Guice_2.0">
<a href="../../../../com/google/inject/assistedinject/package-summary.html">com.google.inject.assistedinject</a></li>
<li class="api apilevel-Guice_1.0">
<a href="../../../../com/google/inject/binder/package-summary.html">com.google.inject.binder</a></li>
<li class="api apilevel-Guice_3.0">
<a href="../../../../com/google/inject/grapher/package-summary.html">com.google.inject.grapher</a></li>
<li class="api apilevel-Guice_3.0">
<a href="../../../../com/google/inject/grapher/graphviz/package-summary.html">com.google.inject.grapher.graphviz</a></li>
<li class="api apilevel-Guice_1.0">
<a href="../../../../com/google/inject/jndi/package-summary.html">com.google.inject.jndi</a></li>
<li class="api apilevel-Guice_1.0">
<a href="../../../../com/google/inject/matcher/package-summary.html">com.google.inject.matcher</a></li>
<li class="api apilevel-Guice_2.0">
<a href="../../../../com/google/inject/multibindings/package-summary.html">com.google.inject.multibindings</a></li>
<li class="api apilevel-Guice_1.0">
<a href="../../../../com/google/inject/name/package-summary.html">com.google.inject.name</a></li>
<li class="selected api apilevel-Guice_3.0">
<a href="../../../../com/google/inject/persist/package-summary.html">com.google.inject.persist</a></li>
<li class="api apilevel-Guice_3.0">
<a href="../../../../com/google/inject/persist/finder/package-summary.html">com.google.inject.persist.finder</a></li>
<li class="api apilevel-Guice_3.0">
<a href="../../../../com/google/inject/persist/jpa/package-summary.html">com.google.inject.persist.jpa</a></li>
<li class="api apilevel-Guice_1.0">
<a href="../../../../com/google/inject/servlet/package-summary.html">com.google.inject.servlet</a></li>
<li class="api apilevel-Guice_1.0">
<a href="../../../../com/google/inject/spi/package-summary.html">com.google.inject.spi</a></li>
<li class="api apilevel-Guice_2.0">
<a href="../../../../com/google/inject/spring/package-summary.html">com.google.inject.spring</a></li>
<li class="api apilevel-Guice_2.0">
<a href="../../../../com/google/inject/throwingproviders/package-summary.html">com.google.inject.throwingproviders</a></li>
<li class="api apilevel-Guice_1.0">
<a href="../../../../com/google/inject/tools/jmx/package-summary.html">com.google.inject.tools.jmx</a></li>
<li class="api apilevel-Guice_2.0">
<a href="../../../../com/google/inject/util/package-summary.html">com.google.inject.util</a></li>
</ul><br/>
</div> <!-- end packages -->
</div> <!-- end resize-packages -->
<div id="classes-nav">
<ul>
<li><h2>Interfaces</h2>
<ul>
<li class="api apilevel-Guice_3.0"><a href="../../../../com/google/inject/persist/PersistService.html">PersistService</a></li>
<li class="selected api apilevel-Guice_3.0"><a href="../../../../com/google/inject/persist/UnitOfWork.html">UnitOfWork</a></li>
</ul>
</li>
<li><h2>Classes</h2>
<ul>
<li class="api apilevel-Guice_3.0"><a href="../../../../com/google/inject/persist/PersistFilter.html">PersistFilter</a></li>
<li class="api apilevel-Guice_3.0"><a href="../../../../com/google/inject/persist/PersistModule.html">PersistModule</a></li>
</ul>
</li>
<li><h2>Annotations</h2>
<ul>
<li class="api apilevel-Guice_3.0"><a href="../../../../com/google/inject/persist/Transactional.html">Transactional</a></li>
</ul>
</li>
</ul><br/>
</div><!-- end classes -->
</div><!-- end nav-panels -->
<div id="nav-tree" style="display:none">
<div id="index-links"><nobr>
<a href="../../../../packages.html" >Package Index</a> |
<a href="../../../../classes.html" >Class Index</a></nobr>
</div>
</div><!-- end nav-tree -->
</div><!-- end swapper -->
</div> <!-- end side-nav -->
<script>
if (!isMobile) {
$("<a href='#' id='nav-swap' onclick='swapNav();return false;' style='font-size:10px;line-height:9px;margin-left:1em;text-decoration:none;'><span id='tree-link'>Use Tree Navigation</span><span id='panel-link' style='display:none'>Use Panel Navigation</span></a>").appendTo("#side-nav");
chooseDefaultNav();
if ($("#nav-tree").is(':visible')) {
init_default_navtree("../../../../");
} else {
addLoadEvent(function() {
scrollIntoView("packages-nav");
scrollIntoView("classes-nav");
});
}
$("#swapper").css({borderBottom:"2px solid #aaa"});
} else {
swapNav(); // tree view should be used on mobile
}
</script>
<div class="g-unit" id="doc-content">
<div id="api-info-block">
<div class="sum-details-links">
</div><!-- end sum-details-links -->
<div class="api-level">
Since: <a href="../../../../guide/appendix/api-levels.html#levelGuice_3.0">API Level Guice_3.0</a>
</div>
</div><!-- end api-info-block -->
<!-- ======== START OF CLASS DATA ======== -->
<div id="jd-header">
public
interface
<h1>UnitOfWork</h1>
</div><!-- end header -->
<div id="naMessage"></div>
<div id="jd-content" class="api apilevel-Guice_3.0">
<table class="jd-inheritance-table">
<tr>
<td colspan="1" class="jd-inheritance-class-cell">com.google.inject.persist.UnitOfWork</td>
</tr>
</table>
<div class="jd-descr">
<h2>Class Overview</h2>
<p>This interface is used to gain manual control over the unit of work. This is mostly to do
work in non-request, non-transactional threads. Or where more fine-grained control over the unit
of work is required. Starting and ending a unit of work directly corresponds to opening and
closing a <code>Session</code>, <code>EntityManager</code> or <code>ObjectContainer</code> respectively.
<p> The
Unit of Work referred to by UnitOfWork will always be local to the calling thread. Be careful to
end() in a finally block. Neither JPA, nor Hibernate supports threadsafe sessions (reasoning
behind thread-locality of Unit of Work semantics).
<ul>
<li>Using UnitOfWork with the PersistFilter inside a request is not recommended.</li>
<li>Using UnitOfWork with session-per-txn strategy is not terribly clever either.</li>
<li>Using UnitOfWork with session-per-request strategy but *outside* a request (i.e. in a
background or bootstrap thread) is probably a good use case.</li>
</ul></p>
</div><!-- jd-descr -->
<div class="jd-descr">
<h2>Summary</h2>
<!-- ========== METHOD SUMMARY =========== -->
<table id="pubmethods" class="jd-sumtable"><tr><th colspan="12">Public Methods</th></tr>
<tr class="alt-color api apilevel-Guice_3.0" >
<td class="jd-typecol"><nobr>
abstract
void</nobr>
</td>
<td class="jd-linkcol" width="100%"><nobr>
<span class="sympad"><a href="../../../../com/google/inject/persist/UnitOfWork.html#begin()">begin</a></span>()</nobr>
<div class="jd-descrdiv">Starts a Unit Of Work.</div>
</td></tr>
<tr class=" api apilevel-Guice_3.0" >
<td class="jd-typecol"><nobr>
abstract
void</nobr>
</td>
<td class="jd-linkcol" width="100%"><nobr>
<span class="sympad"><a href="../../../../com/google/inject/persist/UnitOfWork.html#end()">end</a></span>()</nobr>
<div class="jd-descrdiv">Declares an end to the current Unit of Work.</div>
</td></tr>
</table>
</div><!-- jd-descr (summary) -->
<!-- Details -->
<!-- XML Attributes -->
<!-- Enum Values -->
<!-- Constants -->
<!-- Fields -->
<!-- Public ctors -->
<!-- ========= CONSTRUCTOR DETAIL ======== -->
<!-- Protected ctors -->
<!-- ========= METHOD DETAIL ======== -->
<!-- Public methdos -->
<h2>Public Methods</h2>
<A NAME="begin()"></A>
<div class="jd-details api apilevel-Guice_3.0">
<h4 class="jd-details-title">
<span class="normal">
public
abstract
void
</span>
<span class="sympad">begin</span>
<span class="normal">()</span>
</h4>
<div class="api-level">
<div>
Since: <a href="../../../../guide/appendix/api-levels.html#levelGuice_3.0">API Level Guice_3.0</a>
</div>
</div>
<div class="jd-details-descr">
<div class="jd-tagdata jd-tagdescr"><p>Starts a Unit Of Work. Underneath, causes a session to the data layer to be opened. If there
is already one open, the invocation will do nothing. In this way, you can define arbitrary
units-of-work that nest within one another safely.
Transaction semantics are not affected.
</p></div>
</div>
</div>
<A NAME="end()"></A>
<div class="jd-details api apilevel-Guice_3.0">
<h4 class="jd-details-title">
<span class="normal">
public
abstract
void
</span>
<span class="sympad">end</span>
<span class="normal">()</span>
</h4>
<div class="api-level">
<div>
Since: <a href="../../../../guide/appendix/api-levels.html#levelGuice_3.0">API Level Guice_3.0</a>
</div>
</div>
<div class="jd-details-descr">
<div class="jd-tagdata jd-tagdescr"><p>Declares an end to the current Unit of Work. Underneath, causes any open session to the data
layer to close. If there is no Unit of work open, then the call returns silently. You can
safely invoke end() repeatedly.
<p>
Transaction semantics are not affected.
</p></div>
</div>
</div>
<!-- ========= METHOD DETAIL ======== -->
<!-- ========= END OF CLASS DATA ========= -->
<A NAME="navbar_top"></A>
<div id="footer">
Generated by <a href="http://code.google.com/p/doclava/">Doclava</a>.
</div> <!-- end footer -->
</div> <!-- jd-content -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
<script type="text/javascript">
init(); /* initialize android-developer-docs.js */
</script>
</body>
</html>