je/docs/TransactionGettingStarted/txnindices.html
2021-06-06 13:46:45 -04:00

162 lines
6.7 KiB
HTML
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?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>Secondary Indices with Transaction Applications</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="txncursor.html" title="Transactional Cursors" />
<link rel="next" href="maxtxns.html" title="Configuring the Transaction Subsystem" />
</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">Secondary Indices with Transaction Applications</th>
</tr>
<tr>
<td width="20%" align="left"><a accesskey="p" href="txncursor.html">Prev</a> </td>
<th width="60%" align="center">Chapter 3. Transaction Basics</th>
<td width="20%" align="right"> <a accesskey="n" href="maxtxns.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="txnindices"></a>Secondary Indices with Transaction Applications</h2>
</div>
</div>
</div>
<p>
You can use transactions with your secondary indices so long as you
<span>
open the secondary index so that it is transactional.
</span>
</p>
<p>
All other aspects of using secondary indices with transactions are
identical to using secondary indices without transactions. In
addition, transaction-protecting
<span>
secondary cursors is performed just as you protect normal
cursors — you simply have to make sure the cursor is
opened using a transaction handle, and that the cursor is
closed before the handle is either either committed or
aborted.
</span>
See <a class="xref" href="txncursor.html" title="Transactional Cursors">Transactional Cursors</a> for details.
</p>
<p>
Note that when you use transactions to protect your database writes, your secondary indices are protected from
corruption because updates to the primary and the secondaries are performed in a single atomic transaction.
</p>
<div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
<h3 class="title">Note</h3>
<p>
If you are using the DPL, then be aware that
you never have to provide a transactional
handle when opening an index, be it a primary
or a secondary. However, if transactions are
enabled for your store, then all of the indexes
that you open will be enabled for transactional
usage. Moreover, any write operation performed
using that index will be done using a
transaction, regardless of whether you
explicitly provide a transactional handle to the
write operation.
</p>
<p>
If you do not explicitly provide a transaction
handle to DPL write operations performed on a
transactional store, then auto commit is
silently used for that operation.
</p>
</div>
<p>
For example:
</p>
<pre class="programlisting">package je.txn;
import com.sleepycat.bind.tuple.TupleBinding;
import com.sleepycat.je.Database;
import com.sleepycat.je.DatabaseType;
import com.sleepycat.je.DatabaseConfig;
import com.sleepycat.je.DatabaseException;
import com.sleepycat.je.Environment;
import com.sleepycat.je.EnvironmentConfig;
import com.sleepycat.je.SecondaryDatabase;
import com.sleepycat.je.SecondaryConfig;
import java.io.FileNotFoundException;
...
// Environment and primary database opens omitted.
SecondaryConfig mySecConfig = new SecondaryConfig();
mySecConfig.setAllowCreate(true);
mySecConfig.setTransactional(true);
SecondaryDatabase mySecDb = null;
try {
// A fake tuple binding that is not actually implemented anywhere.
// The tuple binding is dependent on the data in use.
// See the Getting Started Guide for details
TupleBinding myTupleBinding = new MyTupleBinding();
// Open the secondary. FullNameKeyCreator is not actually implemented
// anywhere. See the Getting Started Guide for details.
FullNameKeyCreator keyCreator =
new FullNameKeyCreator(myTupleBinding);
// Set the key creator on the secondary config object.
mySecConfig.setKeyCreator(keyCreator);
// Perform the actual open. Because this database is configured to be
// transactional, the open is automatically wrapped in a transaction.
// - myEnv is the environment handle.
// - myDb is the primary database handle.
String secDbName = "mySecondaryDatabase";
mySecDb = myEnv.openSecondary(null, secDbName, null, myDb,
mySecConfig);
} 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="txncursor.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="maxtxns.html">Next</a></td>
</tr>
<tr>
<td width="40%" align="left" valign="top">Transactional Cursors </td>
<td width="20%" align="center">
<a accesskey="h" href="index.html">Home</a>
</td>
<td width="40%" align="right" valign="top"> Configuring the Transaction Subsystem</td>
</tr>
</table>
</div>
</body>
</html>