view software/eXist/mpdl-modules/src/de/mpg/mpiwg/berlin/mpdl/donatus/xmlrpc/DonatusBerkeleyDbEnv.java @ 0:408254cf2f1d

Erstellung
author Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
date Wed, 24 Nov 2010 17:24:23 +0100
parents
children
line wrap: on
line source

package de.mpg.mpiwg.berlin.mpdl.donatus.xmlrpc;

import java.io.File;

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 class DonatusBerkeleyDbEnv {
  private File envPath;
  private Environment env;
  private Database lemmaDb;
  private Database variantDb;

  public DonatusBerkeleyDbEnv() {
  }

  public void setup(boolean readOnly) throws DatabaseException {
    EnvironmentConfig envConfig = new EnvironmentConfig();
    DatabaseConfig dbConfig = new DatabaseConfig();
    // If the environment is read-only, then make the databases read-only too.
    envConfig.setReadOnly(readOnly);
    dbConfig.setReadOnly(readOnly);
    // If the environment is opened for write, then we want to be able to create the environment and databases if they do not exist.
    envConfig.setAllowCreate(!readOnly);
    dbConfig.setAllowCreate(!readOnly);
    // Allow transactions if we are writing to the database
    envConfig.setTransactional(!readOnly);
    dbConfig.setTransactional(!readOnly);
    // Open the environment
    envPath = new File(DonatusConstants.BERKELEY_DB_DIR);
    env = new Environment(envPath, envConfig);
    // open databases (and create them if not existent)
    lemmaDb = env.openDatabase(null, "LemmaDB", dbConfig);
    variantDb = env.openDatabase(null, "VariantDB", dbConfig);
  }

  public void removeDatabases() {
    try {
      lemmaDb.close();
      variantDb.close();
      env.removeDatabase(null, "LemmaDB");    
      env.removeDatabase(null, "VariantDB");    
    } catch (DatabaseException e) {
      e.printStackTrace();  // TODO
    }
  }
  
  public Environment getEnv() {
    return env;
  }

  public Database getLemmaDB() {
    return lemmaDb;
  }

  public Database getVariantDB() {
    return variantDb;
  }

  public void close() {
    if (env != null) {
      try {
        lemmaDb.close();
        variantDb.close();
        env.close();
      } catch(DatabaseException e) {
        e.printStackTrace();  // TODO
      }
    }
  }
}