1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171
|
<?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 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="nestedtxn.html" title="Nested Transactions" />
</head>
<body>
<div xmlns="" class="navheader">
<div class="libver">
<p>Library Version 11.2.5.3</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="nestedtxn.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 db.txn;
import com.sleepycat.db.Database;
import com.sleepycat.db.DatabaseConfig;
import com.sleepycat.db.DatabaseEntry;
import com.sleepycat.db.DatabaseException;
import com.sleepycat.db.Environment;
import com.sleepycat.db.EnvironmentConfig;
import java.io.File;
...
Database myDatabase = null;
Environment myEnv = null;
try {
EnvironmentConfig myEnvConfig = new EnvironmentConfig();
myEnvConfig.setInitializeCache(true);
myEnvConfig.setInitializeLocking(true);
myEnvConfig.setInitializeLogging(true);
myEnvConfig.setTransactional(true);
myEnv = new Environment(new File("/my/env/home"),
myEnvConfig);
// Open the database.
DatabaseConfig dbConfig = new DatabaseConfig();
dbConfig.setTransactional(true);
dbConfig.setType(DatabaseType.BTREE);
myDatabase = myEnv.openDatabase(null, // txn handle
"sampleDatabase", // db file name
null, // db name
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="nestedtxn.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"> Nested Transactions</td>
</tr>
</table>
</div>
</body>
</html>
|