Class DatabaseFactory.EnvironmentHolder

java.lang.Object
com.tangosol.io.bdb.DatabaseFactory.EnvironmentHolder
All Implemented Interfaces:
Runnable
Enclosing class:
DatabaseFactory

protected static class DatabaseFactory.EnvironmentHolder extends Object implements Runnable
Holder for Berkeley DB Environment and its Databases.

The Environment and Databases will be automatically flushed upon JVM shutdown or GC of the associated DatabaseFactory. For temporary Environments, the data will also be deleted. These operations are accomplished by registering this class as a JVM shutdown hook.

This logic is maintained externally from DatabaseFactory to allow for the Factory to be GC'd. If the Factory acted as the shutdown hook then it would never be GC'd as the Runtime would always hold a reference to it via the registered shutdown hook.

Author:
mf 2005.10.04
  • Field Details

    • SUB_DIR_NAME

      public static final String SUB_DIR_NAME
      Default directory name for berkeley db environments.
    • ENVIRONMENT_NAME_PREFIX

      public static final String ENVIRONMENT_NAME_PREFIX
      Prefix for temporary environment names.
      See Also:
    • TEMP_FILE_NAME_PREFIX

      public static final String TEMP_FILE_NAME_PREFIX
      Prefix for temporary file names.
      See Also:
    • JE_PROPERTY_PREFIX

      public static final String JE_PROPERTY_PREFIX
      Prefix for all Berkeley DB JE configuration settings.
      See Also:
    • SLEEPYCAT_JE_PROPERTY_PREFIX

      public static final String SLEEPYCAT_JE_PROPERTY_PREFIX
      Another prefix for Berkeley DB JE configuration settings.
      See Also:
    • m_xmlConfig

      protected XmlElement m_xmlConfig
      Configuration.
    • m_dirParent

      protected File m_dirParent
      Configuration setting for parent directory.
    • m_dirEnv

      protected File m_dirEnv
      Environment directory.
    • m_envConfig

      protected com.sleepycat.je.EnvironmentConfig m_envConfig
      Berkeley DB Environment Configuration.
    • m_env

      protected com.sleepycat.je.Environment m_env
      Berkeley DB Environment for managing Databases.
    • m_colRegisteredDbs

      protected Collection m_colRegisteredDbs
      Databases to close prior to deleting the Environment.
    • m_dirLock

      Lock held on the directory associated with the Environment.
    • m_fTemporary

      protected boolean m_fTemporary
      Flag indicating if this is a temporary environment.
    • m_threadShutdownHook

      protected Thread m_threadShutdownHook
      Shutdown hook for closing environment.
  • Constructor Details

    • EnvironmentHolder

      public EnvironmentHolder(BerkeleyDBBinaryStoreManager bdbManager) throws com.sleepycat.je.DatabaseException
      Construct a EnvironmentHolder for a given Berkeley DB Environment.

      Berkeley DB Environments are bound to a single directory. Java File locking is used to ensure that only one JVM uses the Environment. The new environment will be created in a unique sub directory of the specified parent directory.

      Parameters:
      bdbManager - the BinaryStoreManager to create an environment for
      Throws:
      com.sleepycat.je.DatabaseException - if the Berkeley DB Environment could not be created
  • Method Details

    • toString

      public String toString()
      Return a human readable description of the EnvironmentHolder.
      Overrides:
      toString in class Object
      Returns:
      a human readable description of the EnvironmentHolder
    • forgetDatabase

      public void forgetDatabase(com.sleepycat.je.Database db)
      Remove a database handle from the cleanup list.

      Databases which are closed externally may be removed from tracking.

      Parameters:
      db - the Database to remove from list
    • run

      public void run()
      Shutdown hook runnable method.

      This is responsible for cleaning up the databases and associated directories when the JVM exits.

      Specified by:
      run in interface Runnable
    • closeEnvironment

      public void closeEnvironment(boolean fDeregister)
      Close an Environment.

      This includes closing the environment and databases, and if temporary deleting the associated files.

      Parameters:
      fDeregister - indicates if the shutdown hook should be deregistered
    • trackDatabase

      public void trackDatabase(com.sleepycat.je.Database db)
      Add a database handle to the tracking list.

      Databases for the environment must be tracked so that they may be closed prior to closing the environment.

      Parameters:
      db - the Database to add to the list
    • configure

      protected void configure(BerkeleyDBBinaryStoreManager bdbManager)
      Configure the new Environment.
      Parameters:
      bdbManager - the BinaryStoreManager to create an environment for
    • computeTmpDir

      protected File computeTmpDir()
      compute the system's temp directory.
      Returns:
      the system temp directory, or null if it could not be determined
    • createTemporaryEnvironment

      protected void createTemporaryEnvironment() throws com.sleepycat.je.DatabaseException
      Create a temporary Environment.
      Throws:
      com.sleepycat.je.DatabaseException - if environment creation fails
    • createPersistentEnvironment

      protected void createPersistentEnvironment() throws com.sleepycat.je.DatabaseException
      Create a persistent Environment.
      Throws:
      com.sleepycat.je.DatabaseException - if environment creation fails
    • generateEnvironmentName

      protected String generateEnvironmentName()
      Generate a potentially unique Environment name.
      Returns:
      an environment name
    • getEnvironment

      public com.sleepycat.je.Environment getEnvironment() throws com.sleepycat.je.DatabaseException
      Get underlying Berkeley DB Environment.
      Returns:
      the Berkeley DB Environment held by this EnvironmentHolder
      Throws:
      com.sleepycat.je.DatabaseException
    • getXmlConfig

      public XmlElement getXmlConfig()
      Get the XML Configuration.
      Returns:
      the XML Configuration for this Environments.
    • getDirParent

      public File getDirParent()
      Get the Parent Directory.
      Returns:
      the Environment's parent directory
    • getDirEnv

      public File getDirEnv()
      Get the Environment Directory.
      Returns:
      the Environment's directory
    • getEnvConfig

      public com.sleepycat.je.EnvironmentConfig getEnvConfig()
      Get the Environment Configuration.
      Returns:
      the Environment's configuration
    • getRegisteredDbs

      public Collection getRegisteredDbs()
      Get the registered Databases.
      Returns:
      a collection of open Databases from this Environment
    • getDirLock

      Get the DirectoryLock held on a temporary Environment.
      Returns:
      the DirectoryLock held on the temporary Environment
    • isTemporary

      public boolean isTemporary()
      Return true if this is a temporary environment.
      Returns:
      true if this is a temporary environment