/** * Copyright (C) 2009 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.engine.cache; import java.util.concurrent.atomic.AtomicBoolean; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.context.Lifecycle; import com.opengamma.util.ArgumentChecker; import com.sleepycat.je.Database; import com.sleepycat.je.DatabaseConfig; import com.sleepycat.je.Environment; // REVIEW kirk 2010-08-06 -- If this is found to be useful outside of the // caching stuff, it should be moved to OG-Util. /** * A component which wraps a single BerkeleyDB Database. */ public abstract class AbstractBerkeleyDBComponent implements Lifecycle { private static final Logger s_logger = LoggerFactory.getLogger(AbstractBerkeleyDBComponent.class); // Injected inputs: private final Environment _dbEnvironment; private final String _databaseName; // Runtime state: private final AtomicBoolean _started = new AtomicBoolean(false); private Database _database; protected AbstractBerkeleyDBComponent(Environment dbEnvironment, String databaseName) { ArgumentChecker.notNull(dbEnvironment, "dbEnvironment"); ArgumentChecker.notNull(databaseName, "databaseName"); _dbEnvironment = dbEnvironment; _databaseName = databaseName; } /** * Gets the dbEnvironment field. * @return the dbEnvironment */ public Environment getDbEnvironment() { return _dbEnvironment; } /** * Gets the databaseName field. * @return the databaseName */ public String getDatabaseName() { return _databaseName; } /** * Gets the database field. * @return the database */ protected Database getDatabase() { return _database; } /** * Sets the database field. * @param database the database */ private void setDatabase(Database database) { _database = database; } @Override public boolean isRunning() { return _started.get(); } @Override public void start() { s_logger.info("Starting, and opening Database."); DatabaseConfig dbConfig = getDatabaseConfig(); Database database = getDbEnvironment().openDatabase(null, getDatabaseName(), dbConfig); setDatabase(database); postStartInitialization(); _started.set(true); } protected abstract DatabaseConfig getDatabaseConfig(); protected void postStartInitialization() { } @Override public void stop() { s_logger.info("Shutting down Database."); if (getDatabase() != null) { getDatabase().close(); } _started.set(false); } }