1<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
3<html xmlns="http://www.w3.org/1999/xhtml">
4  <head>
5    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
6    <title>Auto Commit</title>
7    <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
8    <meta name="generator" content="DocBook XSL Stylesheets V1.73.2" />
9    <link rel="start" href="index.html" title="Getting Started with Berkeley DB Transaction Processing" />
10    <link rel="up" href="usingtxns.html" title="Chapter 3. Transaction Basics" />
11    <link rel="prev" href="abortresults.html" title="Aborting a Transaction" />
12    <link rel="next" href="nestedtxn.html" title="Nested Transactions" />
13  </head>
14  <body>
15    <div class="navheader">
16      <table width="100%" summary="Navigation header">
17        <tr>
18          <th colspan="3" align="center">Auto Commit</th>
19        </tr>
20        <tr>
21          <td width="20%" align="left"><a accesskey="p" href="abortresults.html">Prev</a> </td>
22          <th width="60%" align="center">Chapter 3. Transaction Basics</th>
23          <td width="20%" align="right"> <a accesskey="n" href="nestedtxn.html">Next</a></td>
24        </tr>
25      </table>
26      <hr />
27    </div>
28    <div class="sect1" lang="en" xml:lang="en">
29      <div class="titlepage">
30        <div>
31          <div>
32            <h2 class="title" style="clear: both"><a id="autocommit"></a>Auto Commit</h2>
33          </div>
34        </div>
35      </div>
36      <p>
37            While transactions are frequently used to provide atomicity to
38            multiple database 
39            <span>
40                    or store
41            </span>
42            operations, it is sometimes necessary to perform
43            a single database 
44            <span>
45                    or store
46            </span>
47            operation under the control of a transaction.
48            Rather than force you to obtain a transaction, perform the single 
49            write operation, and then either commit or abort the transaction,
50            you can automatically group this sequence of events using
51            <span class="emphasis"><em>auto commit</em></span>.
52        </p>
53      <p>
54            To use auto commit:
55        </p>
56      <div class="orderedlist">
57        <ol type="1">
58          <li>
59            <p>
60                        Open your environment and your databases 
61                        <span>
62                            or store
63                        </span>
64                        so that they support
65                    transactions.  See <a class="xref" href="enabletxn.html" title="Chapter 2. Enabling Transactions">Enabling Transactions</a> 
66                    for details.
67                </p>
68          </li>
69          <li>
70            <p>
71                    Do not provide a transactional handle to the method that is
72                    performing the database 
73                        <span>
74                            or store
75                        </span>
76                    write operation.
77                </p>
78          </li>
79        </ol>
80      </div>
81      <p>
82            Note that auto commit is not available for cursors. You must always
83            open your cursor using a transaction if you want the cursor's
84            operations to be transactional protected. See 
85            <a class="xref" href="txncursor.html" title="Transactional Cursors">Transactional Cursors</a> for details on using
86            transactional cursors.
87        </p>
88      <div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
89        <h3 class="title">Note</h3>
90        <p>
91                Never have more than one active transaction in your thread
92                at a time. This is especially a problem if you mix an
93                explicit transaction with another operation that uses auto
94                commit. Doing so can result in undetectable deadlocks.
95            </p>
96      </div>
97      <p>
98            For example, the following uses auto commit to perform the database write operation:
99        </p>
100      <pre class="programlisting">package db.txn;
101                                                                                                                                     
102import com.sleepycat.db.Database;
103import com.sleepycat.db.DatabaseConfig;
104import com.sleepycat.db.DatabaseEntry;
105import com.sleepycat.db.DatabaseException;
106import com.sleepycat.db.Environment;
107import com.sleepycat.db.EnvironmentConfig;
108
109import java.io.File;
110                                                                                                                                     
111...
112                                                                                                                                     
113Database myDatabase = null;
114Environment myEnv = null;
115try {
116    EnvironmentConfig myEnvConfig = new EnvironmentConfig();
117    myEnvConfig.setInitializeCache(true);
118    myEnvConfig.setInitializeLocking(true);
119    myEnvConfig.setInitializeLogging(true);
120    myEnvConfig.setTransactional(true);
121
122    myEnv = new Environment(new File("/my/env/home"),
123                              myEnvConfig);
124
125    // Open the database.
126    DatabaseConfig dbConfig = new DatabaseConfig();
127    dbConfig.setTransactional(true);
128    dbConfig.setType(DatabaseType.BTREE);
129    myDatabase = myEnv.openDatabase(null,              // txn handle
130                                    "sampleDatabase",  // db file name
131                                    null,              // db name
132                                    dbConfig);
133    String keyString = "thekey";
134    String dataString = "thedata";
135    DatabaseEntry key = 
136        new DatabaseEntry(keyString.getBytes("UTF-8"));
137    DatabaseEntry data = 
138        new DatabaseEntry(dataString.getBytes("UTF-8"));
139
140    // Perform the write. Because the database was opened to 
141    // support transactions, this write is performed using auto commit.
142    myDatabase.put(null, key, data);
143
144} catch (DatabaseException de) {
145    // Exception handling goes here
146} </pre>
147    </div>
148    <div class="navfooter">
149      <hr />
150      <table width="100%" summary="Navigation footer">
151        <tr>
152          <td width="40%" align="left"><a accesskey="p" href="abortresults.html">Prev</a> </td>
153          <td width="20%" align="center">
154            <a accesskey="u" href="usingtxns.html">Up</a>
155          </td>
156          <td width="40%" align="right"> <a accesskey="n" href="nestedtxn.html">Next</a></td>
157        </tr>
158        <tr>
159          <td width="40%" align="left" valign="top">Aborting a Transaction </td>
160          <td width="20%" align="center">
161            <a accesskey="h" href="index.html">Home</a>
162          </td>
163          <td width="40%" align="right" valign="top"> Nested Transactions</td>
164        </tr>
165      </table>
166    </div>
167  </body>
168</html>
169