Class 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 Detail

      • 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:
        Constant Field Values
      • TEMP_FILE_NAME_PREFIX

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

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

        public static final String SLEEPYCAT_JE_PROPERTY_PREFIX
        Another prefix for Berkeley DB JE configuration settings.
        See Also:
        Constant Field Values
      • 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_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 Detail

      • 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 Detail

      • 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
      • isTemporary

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