stasis/je-7.5.11/docs/java/com/sleepycat/je/LockConflictException.html

421 lines
16 KiB
HTML
Raw Normal View History

2019-06-25 20:12:40 +00:00
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!-- NewPage -->
<html lang="en">
<head>
<!-- Generated by javadoc (1.8.0_151) on Tue Oct 31 17:36:45 EDT 2017 -->
<title>LockConflictException (Oracle - Berkeley DB Java Edition API)</title>
<meta name="date" content="2017-10-31">
<link rel="stylesheet" type="text/css" href="../../../style.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="LockConflictException (Oracle - Berkeley DB Java Edition API)";
}
}
catch(err) {
}
//-->
var methods = {"i0":10,"i1":10};
var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
var altColor = "altColor";
var rowColor = "rowColor";
var tableTab = "tableTab";
var activeTableTab = "activeTableTab";
</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="class-use/LockConflictException.html">Use</a></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 class="aboutLanguage"><b>Berkeley DB Java Edition</b><br><font size=\"-1\"> version 7.5.11</font>
</div>
</div>
<div class="subNav">
<ul class="navList">
<li><a href="../../../com/sleepycat/je/JoinCursor.html" title="class in com.sleepycat.je"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
<li><a href="../../../com/sleepycat/je/LockMode.html" title="enum in com.sleepycat.je"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../index.html?com/sleepycat/je/LockConflictException.html" target="_top">Frames</a></li>
<li><a href="LockConflictException.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>Nested&nbsp;|&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li>Constr&nbsp;|&nbsp;</li>
<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li>Constr&nbsp;|&nbsp;</li>
<li><a href="#method.detail">Method</a></li>
</ul>
</div>
<a name="skip.navbar.top">
<!-- -->
</a></div>
<!-- ========= END OF TOP NAVBAR ========= -->
<!-- ======== START OF CLASS DATA ======== -->
<div class="header">
<div class="subTitle">com.sleepycat.je</div>
<h2 title="Class LockConflictException" class="title">Class LockConflictException</h2>
</div>
<div class="contentContainer">
<ul class="inheritance">
<li>java.lang.Object</li>
<li>
<ul class="inheritance">
<li>java.lang.Throwable</li>
<li>
<ul class="inheritance">
<li>java.lang.Exception</li>
<li>
<ul class="inheritance">
<li>java.lang.RuntimeException</li>
<li>
<ul class="inheritance">
<li><a href="../../../com/sleepycat/je/DatabaseException.html" title="class in com.sleepycat.je">com.sleepycat.je.DatabaseException</a></li>
<li>
<ul class="inheritance">
<li><a href="../../../com/sleepycat/je/OperationFailureException.html" title="class in com.sleepycat.je">com.sleepycat.je.OperationFailureException</a></li>
<li>
<ul class="inheritance">
<li>com.sleepycat.je.LockConflictException</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
<div class="description">
<ul class="blockList">
<li class="blockList">
<dl>
<dt>All Implemented Interfaces:</dt>
<dd>java.io.Serializable</dd>
</dl>
<dl>
<dt>Direct Known Subclasses:</dt>
<dd><a href="../../../com/sleepycat/je/DeadlockException.html" title="class in com.sleepycat.je">DeadlockException</a>, <a href="../../../com/sleepycat/je/LockNotAvailableException.html" title="class in com.sleepycat.je">LockNotAvailableException</a>, <a href="../../../com/sleepycat/je/rep/LockPreemptedException.html" title="class in com.sleepycat.je.rep">LockPreemptedException</a>, <a href="../../../com/sleepycat/je/LockTimeoutException.html" title="class in com.sleepycat.je">LockTimeoutException</a>, <a href="../../../com/sleepycat/je/TransactionTimeoutException.html" title="class in com.sleepycat.je">TransactionTimeoutException</a></dd>
</dl>
<hr>
<br>
<pre>public abstract class <span class="typeNameLabel">LockConflictException</span>
extends <a href="../../../com/sleepycat/je/OperationFailureException.html" title="class in com.sleepycat.je">OperationFailureException</a></pre>
<div class="block">The common base class for all exceptions that result from record lock
conflicts during read and write operations.
<p>This exception normally indicates that a transaction may be retried.
Catching this exception, rather than its subclasses, is convenient and
recommended for handling lock conflicts and performing transaction retries
in a general purpose manner. See below for information on performing
transaction retries.</p>
<p>The exception carries two arrays of transaction ids, one of the owners and
the other of the waiters, at the time of the lock conflict. This
information may be used along with the <a href="../../../com/sleepycat/je/Transaction.html#getId--"><code>Transaction
ID</code></a> for diagnosing locking problems. See <a href="../../../com/sleepycat/je/LockConflictException.html#getOwnerTxnIds--"><code>getOwnerTxnIds()</code></a> and <a href="../../../com/sleepycat/je/LockConflictException.html#getWaiterTxnIds--"><code>getWaiterTxnIds()</code></a>.</p>
<p>The <a href="../../../com/sleepycat/je/Transaction.html" title="class in com.sleepycat.je"><code>Transaction</code></a> handle is invalidated as a result of this
exception.</p>
<a name="retries"><h3>Performing Transaction Retries</h3></a>
<p>If a lock conflict occurs during a transaction, the transaction may be
retried by performing the following steps. Some applications may also wish
to sleep for a short interval before retrying, to give other concurrent
transactions a chance to finish and release their locks.</p>
<ol>
<li>Close all cursors opened under the transaction.</li>
<li>Abort the transaction.</li>
<li>Begin a new transaction and repeat the operations.</li>
</ol>
<p>To handle <a href="../../../com/sleepycat/je/LockConflictException.html" title="class in com.sleepycat.je"><code>LockConflictException</code></a> reliably for all types of JE
applications including JE-HA applications, it is important to handle it when
it is thrown by all <a href="../../../com/sleepycat/je/Database.html" title="class in com.sleepycat.je"><code>Database</code></a> and <a href="../../../com/sleepycat/je/Cursor.html" title="class in com.sleepycat.je"><code>Cursor</code></a> read and write
operations.</p>
<p>The following example code illustrates the recommended approach. Note
that the <code>Environment.beginTransaction</code> and <code>Transaction.commit</code>
calls are intentially inside the <code>try</code> block. When using JE-HA, this
will make it easy to add a <code>catch</code> for other exceptions that can be
resolved by retrying the transaction, such as consistency exceptions.</p>
<pre class="code">
void doTransaction(final Environment env,
final Database db1,
final Database db2,
final int maxTries)
throws DatabaseException {
boolean success = false;
long sleepMillis = 0;
for (int i = 0; i &lt; maxTries; i++) {
// Sleep before retrying.
if (sleepMillis != 0) {
Thread.sleep(sleepMillis);
sleepMillis = 0;
}
Transaction txn = null;
try {
txn = env.beginTransaction(null, null);
final Cursor cursor1 = db1.openCursor(txn, null);
try {
final Cursor cursor2 = db2.openCursor(txn, null);
try {
// INSERT APP-SPECIFIC CODE HERE:
// Perform read and write operations.
} finally {
cursor2.close();
}
} finally {
cursor1.close();
}
txn.commit();
success = true;
return;
} catch (LockConflictException e) {
sleepMillis = LOCK_CONFLICT_RETRY_SEC * 1000;
continue;
} finally {
if (!success) {
if (txn != null) {
txn.abort();
}
}
}
}
// INSERT APP-SPECIFIC CODE HERE:
// Transaction failed, despite retries.
// Take some app-specific course of action.
}</pre>
<p>For more information on transactions and lock conflicts, see <a
href="../../../../TransactionGettingStarted/index.html"
target="_top">Writing Transactional Applications</a>.</p></div>
<dl>
<dt><span class="simpleTagLabel">Since:</span></dt>
<dd>4.0</dd>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../serialized-form.html#com.sleepycat.je.LockConflictException">Serialized Form</a></dd>
</dl>
</li>
</ul>
</div>
<div class="summary">
<ul class="blockList">
<li class="blockList">
<!-- ========== METHOD SUMMARY =========== -->
<ul class="blockList">
<li class="blockList"><a name="method.summary">
<!-- -->
</a>
<h3>Method Summary</h3>
<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colLast" scope="col">Method and Description</th>
</tr>
<tr id="i0" class="altColor">
<td class="colFirst"><code>long[]</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/sleepycat/je/LockConflictException.html#getOwnerTxnIds--">getOwnerTxnIds</a></span>()</code>
<div class="block">Returns an array of longs containing transaction ids of owners at the
the time of the timeout.</div>
</td>
</tr>
<tr id="i1" class="rowColor">
<td class="colFirst"><code>long[]</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../com/sleepycat/je/LockConflictException.html#getWaiterTxnIds--">getWaiterTxnIds</a></span>()</code>
<div class="block">Returns an array of longs containing transaction ids of waiters at the
the time of the timeout.</div>
</td>
</tr>
</table>
<ul class="blockList">
<li class="blockList"><a name="methods.inherited.from.class.com.sleepycat.je.DatabaseException">
<!-- -->
</a>
<h3>Methods inherited from class&nbsp;com.sleepycat.je.<a href="../../../com/sleepycat/je/DatabaseException.html" title="class in com.sleepycat.je">DatabaseException</a></h3>
<code><a href="../../../com/sleepycat/je/DatabaseException.html#getMessage--">getMessage</a></code></li>
</ul>
<ul class="blockList">
<li class="blockList"><a name="methods.inherited.from.class.java.lang.Throwable">
<!-- -->
</a>
<h3>Methods inherited from class&nbsp;java.lang.Throwable</h3>
<code>addSuppressed, fillInStackTrace, getCause, getLocalizedMessage, getStackTrace, getSuppressed, initCause, printStackTrace, printStackTrace, printStackTrace, setStackTrace, toString</code></li>
</ul>
<ul class="blockList">
<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
<!-- -->
</a>
<h3>Methods inherited from class&nbsp;java.lang.Object</h3>
<code>clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait</code></li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
<div class="details">
<ul class="blockList">
<li class="blockList">
<!-- ============ METHOD DETAIL ========== -->
<ul class="blockList">
<li class="blockList"><a name="method.detail">
<!-- -->
</a>
<h3>Method Detail</h3>
<a name="getOwnerTxnIds--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getOwnerTxnIds</h4>
<pre>public&nbsp;long[]&nbsp;getOwnerTxnIds()</pre>
<div class="block">Returns an array of longs containing transaction ids of owners at the
the time of the timeout.</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>an array of longs containing transaction ids of owners at the
the time of the timeout.</dd>
</dl>
</li>
</ul>
<a name="getWaiterTxnIds--">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>getWaiterTxnIds</h4>
<pre>public&nbsp;long[]&nbsp;getWaiterTxnIds()</pre>
<div class="block">Returns an array of longs containing transaction ids of waiters at the
the time of the timeout.</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>an array of longs containing transaction ids of waiters at the
the time of the timeout.</dd>
</dl>
</li>
</ul>
</li>
</ul>
</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="class-use/LockConflictException.html">Use</a></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 class="aboutLanguage"><b>Berkeley DB Java Edition</b><br><font size=\"-1\"> version 7.5.11</font>
</div>
</div>
<div class="subNav">
<ul class="navList">
<li><a href="../../../com/sleepycat/je/JoinCursor.html" title="class in com.sleepycat.je"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
<li><a href="../../../com/sleepycat/je/LockMode.html" title="enum in com.sleepycat.je"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../index.html?com/sleepycat/je/LockConflictException.html" target="_top">Frames</a></li>
<li><a href="LockConflictException.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>Nested&nbsp;|&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li>Constr&nbsp;|&nbsp;</li>
<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li>Constr&nbsp;|&nbsp;</li>
<li><a href="#method.detail">Method</a></li>
</ul>
</div>
<a name="skip.navbar.bottom">
<!-- -->
</a></div>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<p class="legalCopy"><small><font size=1>Copyright (c) 2002, 2017 Oracle and/or its affiliates. All rights reserved.</font> </small></p>
</body>
</html>