BDB 事务篇 第2章 Enabling Transactions 启用事务处理

要在应用程序中使用事务,必须将其打开。 要做到这一点,你必须:

为您的环境启用事务。 您可以使用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
}

切勿关闭具有活动事务的数据库或存储。 在关闭数据库之前,请确保已解决所有事务(已提交或已中止)。

猜你喜欢

转载自blog.csdn.net/hadues/article/details/81030499