je/docs/TransactionGettingStarted/autocommit.html

167 lines
6.3 KiB
HTML
Raw Permalink Normal View History

2021-06-06 17:46:45 +00:00
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Auto Commit</title>
<link rel="stylesheet" href="gettingStarted.css" type="text/css" />
<meta name="generator" content="DocBook XSL Stylesheets V1.73.2" />
<link rel="start" href="index.html" title="Getting Started with Berkeley DB, Java Edition Transaction Processing" />
<link rel="up" href="usingtxns.html" title="Chapter 3. Transaction Basics" />
<link rel="prev" href="abortresults.html" title="Aborting a Transaction" />
<link rel="next" href="txncursor.html" title="Transactional Cursors" />
</head>
<body>
<div xmlns="" class="navheader">
<div class="libver">
<p>Library Version 12.2.7.5</p>
</div>
<table width="100%" summary="Navigation header">
<tr>
<th colspan="3" align="center">Auto Commit</th>
</tr>
<tr>
<td width="20%" align="left"><a accesskey="p" href="abortresults.html">Prev</a> </td>
<th width="60%" align="center">Chapter 3. Transaction Basics</th>
<td width="20%" align="right"> <a accesskey="n" href="txncursor.html">Next</a></td>
</tr>
</table>
<hr />
</div>
<div class="sect1" lang="en" xml:lang="en">
<div class="titlepage">
<div>
<div>
<h2 class="title" style="clear: both"><a id="autocommit"></a>Auto Commit</h2>
</div>
</div>
</div>
<p>
While transactions are frequently used to provide atomicity to
multiple database
<span>
or store
</span>
operations, it is sometimes necessary to perform
a single database
<span>
or store
</span>
operation under the control of a transaction.
Rather than force you to obtain a transaction, perform the single
write operation, and then either commit or abort the transaction,
you can automatically group this sequence of events using
<span class="emphasis"><em>auto commit</em></span>.
</p>
<p>
To use auto commit:
</p>
<div class="orderedlist">
<ol type="1">
<li>
<p>
Open your environment and your databases
<span>
or store
</span>
so that they support
transactions. See <a class="xref" href="enabletxn.html" title="Chapter 2. Enabling Transactions">Enabling Transactions</a>
for details.
</p>
</li>
<li>
<p>
Do not provide a transactional handle to the method that is
performing the database
<span>
or store
</span>
write operation.
</p>
</li>
</ol>
</div>
<p>
Note that auto commit is not available for cursors. You must always
open your cursor using a transaction if you want the cursor's
operations to be transactional protected. See
<a class="xref" href="txncursor.html" title="Transactional Cursors">Transactional Cursors</a> for details on using
transactional cursors.
</p>
<div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
<h3 class="title">Note</h3>
<p>
Never have more than one active transaction in your thread
at a time. This is especially a problem if you mix an
explicit transaction with another operation that uses auto
commit. Doing so can result in undetectable deadlocks.
</p>
</div>
<p>
For example, the following uses auto commit to perform the database write operation:
</p>
<pre class="programlisting">package je.txn;
import com.sleepycat.je.Database;
import com.sleepycat.je.DatabaseConfig;
import com.sleepycat.je.DatabaseEntry;
import com.sleepycat.je.DatabaseException;
import com.sleepycat.je.Environment;
import com.sleepycat.je.EnvironmentConfig;
import java.io.File;
...
Database myDatabase = null;
Environment myEnv = null;
try {
EnvironmentConfig myEnvConfig = new EnvironmentConfig();
myEnvConfig.setTransactional(true);
myEnv = new Environment(new File("/my/env/home"),
myEnvConfig);
// Open the database. Create it if it does not already exist.
DatabaseConfig dbConfig = new DatabaseConfig();
dbConfig.setTransactional(true);
myDatabase = myEnv.openDatabase(null,
"sampleDatabase",
dbConfig);
String keyString = "thekey";
String dataString = "thedata";
DatabaseEntry key =
new DatabaseEntry(keyString.getBytes("UTF-8"));
DatabaseEntry data =
new DatabaseEntry(dataString.getBytes("UTF-8"));
// Perform the write. Because the database was opened to
// support transactions, this write is performed using auto commit.
myDatabase.put(null, key, data);
} catch (DatabaseException de) {
// Exception handling goes here
} </pre>
</div>
<div class="navfooter">
<hr />
<table width="100%" summary="Navigation footer">
<tr>
<td width="40%" align="left"><a accesskey="p" href="abortresults.html">Prev</a> </td>
<td width="20%" align="center">
<a accesskey="u" href="usingtxns.html">Up</a>
</td>
<td width="40%" align="right"> <a accesskey="n" href="txncursor.html">Next</a></td>
</tr>
<tr>
<td width="40%" align="left" valign="top">Aborting a Transaction </td>
<td width="20%" align="center">
<a accesskey="h" href="index.html">Home</a>
</td>
<td width="40%" align="right" valign="top"> Transactional Cursors</td>
</tr>
</table>
</div>
</body>
</html>