Database Environment Management Example

This example provides a complete class that can open and close an environment. It is both extended and used in subsequent examples in this book to open and close both environments and databases. We do this so as to make the example code shorter and easier to manage. You can find this class in:

JE_HOME/examples/je/gettingStarted/MyDbEnv.java

where JE_HOME is the location where you placed your JE distribution.

Example 2.1 Database Environment Management Class

First we write the normal class declarations. We also set up some private data members that are used to manage environment creation. We use the class constructor to instantiate the EnvironmentConfig object that is used to configure our environment when we open it.

// File MyDbEnv.java
package je.gettingStarted;

import com.sleepycat.je.DatabaseException;
import com.sleepycat.je.Environment;
import com.sleepycat.je.EnvironmentConfig;

import java.io.File;


public class MyDbEnv {

    private Environment myEnv;

    public MyDbEnv() {} 

Next we need a method to open the environment. This is responsible for instantiating our Environment object. Remember that instantiation is what opens the environment (or creates it if the creation property is set to true and the environment does not currently exist).

    public void setup(File envHome, boolean readOnly) 
            throws DatabaseException {

        // Instantiate an environment configuration object
        EnvironmentConfig myEnvConfig = new EnvironmentConfig();
        // Configure the environment for the read-only state as identified
        // by the readOnly parameter on this method call.
        myEnvConfig.setReadOnly(readOnly);
        // If the environment is opened for write, then we want to be 
        // able to create the environment if it does not exist.
        myEnvConfig.setAllowCreate(!readOnly);

        // Instantiate the Environment. This opens it and also possibly
        // creates it.
        myEnv = new Environment(envHome, myEnvConfig);
    } 

Next we provide a getter method that allows us to retrieve the Environment directly. This is needed for later examples in this guide.

    // Getter methods
    public Environment getEnv() {
        return myEnv;
    } 

Finally, we need a method to close our Environment. We wrap this operation in a try block so that it can be used gracefully in a finally statement.

    // Close the environment
    public void close() {
        if (myEnv != null) {
            try {
                myEnv.close();
            } catch(DatabaseException dbe) {
                System.err.println("Error closing environment" + 
                     dbe.toString());
            }
        }
    }
} 

This completes the MyDbEnv class. While not particularly useful as it currently exists, we will build upon it throughout this book so that it will eventually open and close all of the entity stores or databases required by our applications.

We can now use MyDbEnv to open and close a database environment from the appropriate place in our application. For example:

package je.gettingStarted;

import com.sleepycat.je.DatabaseEntry;
import com.sleepycat.je.DatabaseException;

import java.io.File;

...

MyDbEnv exampleDbEnv = new MyDbEnv();

try {    
    exampleDbEnv.setup(new File("/directory/currently/exists"), true);
    ...

} catch(DatabaseException dbe) {
    // Error code goes here
} finally {
    exampleDbEnv.close();
}