While transactions are frequently used to provide atomicity to multiple container operations, it is sometimes necessary to perform a single container 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 auto commit.
To use auto commit:
Open your environment and your containers so that they support transactions. See Enabling Transactions for details.
Do not provide a transactional handle to the method that is performing the container write operation.
For example, the following uses auto commit to perform the container write operation:
package dbxml.txn;
import com.sleepycat.db.DatabaseException;
import com.sleepycat.db.Environment;
import com.sleepycat.db.EnvironmentConfig;
import com.sleepycat.dbxml.XmlContainer;
import com.sleepycat.dbxml.XmlContainerConfig;
import com.sleepycat.dbxml.XmlException;
import com.sleepycat.dbxml.XmlManager;
import com.sleepycat.dbxml.XmlManagerConfig;
import java.io.File;
import java.io.FileNotFoundException;
...
Environment myEnv = null;
File envHome = new File("/export1/testEnv");
XmlManager myManager = null;
XmlContainer myContainer = null;
try {
EnvironmentConfig envConf = new EnvironmentConfig();
envConf.setAllowCreate(true); // If the environment does not
// exits, create it.
envConf.setInitializeCache(true); // Turn on the shared memory
// region.
envConf.setInitializeLocking(true); // Turn on the locking subsystem.
envConf.setInitializeLogging(true); // Turn on the logging subsystem.
envConf.setTransactional(true); // Turn on the transactional
// subsystem.
myEnv = new Environment(envHome, envConf);
XmlManagerConfig managerConfig = new XmlManagerConfig();
myManager = new XmlManager(myEnv, managerConfig);
XmlContainerConfig containerConf = new XmlContainerConfig();
containerConf.setTransactional(true);
containerConf.setAllowCreate(true);
String containerName = "myContainer.dbxml";
myContainer = myManager.openContainer(containerName, containerConf);
String file = "doc1.xml";
try {
// Need an update context for the put.
XmlUpdateContext theContext = myManager.createUpdateContext();
// Get the input stream.
XmlInputStream theStream =
myManager.createLocalFileInputStream(file1);
// Put the document. Because the container was opened to
// support transactions, this write is performed using
// auto commit.
myContainer.putDocument(file, // The document's name
theStream, // The actual document.
theContext, // The update context
// (required).
0); // Put flags.
} catch (XmlException e) {
System.out.println("Error in document write: ");
System.out.println(e.what());
}
} catch (DatabaseException de) {
// Exception handling goes here
} catch (FileNotFoundException fnfe) {
// Exception handling goes here
} catch (Exception e) {
// Exception handling goes here
} finally {
try {
if (myManager != null) {
myManager.close();
}
if (myEnv != null) {
myEnv.close();
}
} catch (Exception ce) {
// Exception handling goes here
} catch (DatabaseException de) {
// Exception handling goes here
}
}