要在应用程序中使用事务,必须将其打开。 要做到这一点,你必须:
为您的环境启用事务。 您可以使用EnvironmentConfig.setTransactional()方法或使用je.env.isTransactional je.properties参数执行此操作。
如果您使用DPL,则为您的商店启用交易。 您可以使用StoreConfig.setTransactional()方法执行此操作。
事务启用数据库。 如果您使用的是基础API,请为数据库启用事务。 您可以使用DatabaseConfig.setTransactional()方法执行此操作,然后在事务中打开数据库。 请注意,通常的做法是将自动提交用于事务保护数据库打开。 要使用自动提交,您仍必须按此处所述启用事务,但在打开数据库时不必显式使用事务。 下一节将给出一个例子
2.1 打开一个事务Environment 和Store 或者 Database
要为您的环境启用事务,必须初始化事务子系统。 例如,使用DPL执行此操作:
import com.sleepycat.je.DatabaseException;
import com.sleepycat.je.Environment;
import com.sleepycat.je.EnvironmentConfig;
import com.sleepycat.persist.EntityStore;
import com.sleepycat.persist.StoreConfig;
import java.io.File;
...
Environment myEnv = null;
EntityStore myStore = null;
try {
EnvironmentConfig myEnvConfig = new EnvironmentConfig();
StoreConfig storeConfig = new StoreConfig();
myEnvConfig.setTransactional(true);
storeConfig.setTransactional(true);
myEnv = new Environment(new File("/my/env/home"),
myEnvConfig);
myStore = new EntityStore(myEnv, "EntityStore", storeConfig);
} catch (DatabaseException de) {
// Exception handling goes here
}
...
当使用基础API需要这么做
Environment myEnv = null;
try {
EnvironmentConfig myEnvConfig = new EnvironmentConfig();
myEnvConfig.setTransactional(true);
myEnv = new Environment(new File("/my/env/home"),
myEnvConfig);
} catch (DatabaseException de) {
// Exception handling goes here
}
然后,您可以像创建非事务性系统一样创建和打开数据库。 唯一的区别是您必须将DatabaseConfig.setTransactional()设置为true。 请注意,您的数据库打开必须受事务保护。 但是,如果不为openDatabase()方法提供事务句柄,则使用自动提交自动保护open。 通常,自动提交用于此目的。 例如:
import com.sleepycat.je.Database;
import com.sleepycat.je.DatabaseConfig;
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);
} catch (DatabaseException de) {
// Exception handling goes here
}
切勿关闭具有活动事务的数据库或存储。 在关闭数据库之前,请确保已解决所有事务(已提交或已中止)。