package org.langke.common.bdb;
import java.io.File;
import java.io.FileNotFoundException;
import com.sleepycat.bind.serial.StoredClassCatalog;
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;
public abstract class AbstractBerkeleyDB {
public Environment env;
private static final String CLASS_CATALOG = "java_class_catalog";
protected StoredClassCatalog javaCatalog;
protected Database catalogdatabase;
protected Database database;
public AbstractBerkeleyDB(String homeDirectory,String dbname) {
// 打开env
EnvironmentConfig envConfig = new EnvironmentConfig();
envConfig.setTransactional(true);
envConfig.setAllowCreate(true);
File bdbHomeFile = new File(homeDirectory);
if(!bdbHomeFile.exists())
bdbHomeFile.mkdirs();
env = new Environment(bdbHomeFile, envConfig);
if(database != null)
return;
// 设置DatabaseConfig
DatabaseConfig dbConfig = new DatabaseConfig();
dbConfig.setTransactional(true);
dbConfig.setAllowCreate(true);
// 打开
catalogdatabase = env.openDatabase(null, CLASS_CATALOG, dbConfig);
javaCatalog = new StoredClassCatalog(catalogdatabase);
// 设置DatabaseConfig
DatabaseConfig dbConfig0 = new DatabaseConfig();
dbConfig0.setTransactional(true);
dbConfig0.setAllowCreate(true);
// 打开
database = env.openDatabase(null, dbname, dbConfig);
}
//关闭数据库,关闭环境
public void close() throws DatabaseException {
if(database!=null)
database.close();
if(javaCatalog!=null)
javaCatalog.close();
if(env!=null)
env.close();
}
//put方法
protected abstract void put(Object key,Object value);
//get方法
protected abstract Object get(Object key);
//delete方法
protected abstract Object delete(Object key);
}