summaryrefslogtreecommitdiff
path: root/docs/gsg/JAVA/mydbenv-persist.html
blob: ffe401c3d7ffdadc27f07e51bcd06b53df6fc242 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <title>MyDbEnv</title>
    <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
    <meta name="generator" content="DocBook XSL Stylesheets V1.73.2" />
    <link rel="start" href="index.html" title="Getting Started with Berkeley DB" />
    <link rel="up" href="dpl_example.html" title="Chapter 6. A DPL Example" />
    <link rel="prev" href="inventoryclass.html" title="Inventory.java" />
    <link rel="next" href="dataaccessorclass.html" title="DataAccessor.java" />
  </head>
  <body>
    <div xmlns="" class="navheader">
      <div class="libver">
        <p>Library Version 12.1.6.1</p>
      </div>
      <table width="100%" summary="Navigation header">
        <tr>
          <th colspan="3" align="center">MyDbEnv</th>
        </tr>
        <tr>
          <td width="20%" align="left"><a accesskey="p" href="inventoryclass.html">Prev</a> </td>
          <th width="60%" align="center">Chapter 6. A DPL Example</th>
          <td width="20%" align="right"> <a accesskey="n" href="dataaccessorclass.html">Next</a></td>
        </tr>
      </table>
      <hr />
    </div>
    <div class="sect1" lang="en" xml:lang="en">
      <div class="titlepage">
        <div>
          <div>
            <h2 class="title" style="clear: both"><a id="mydbenv-persist"></a>MyDbEnv</h2>
          </div>
        </div>
      </div>
      <p>
                The applications that we are building for our example both
                must open and close environments and entity stores. One
                of our applications is writing to the entity store, so this
                application needs to open the store as read-write. It also
                wants to be able to create the store if it does not exist.
            </p>
      <p>
                Our second application only reads from the store. In this
                case, the store should be opened as read-only.
            </p>
      <p>
                We perform these activities by creating a single class that
                is responsible for opening and closing our store and
                environment. This class is shared by both our applications.
                To use it, callers need to only provide the path to the
                environment home directory, and to indicate whether the
                object is meant to be read-only. The class implementation
                is as follows:
            </p>
      <pre class="programlisting">package persist.gettingStarted;

import java.io.File;
import java.io.FileNotFoundException;

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

import com.sleepycat.persist.EntityStore;
import com.sleepycat.persist.StoreConfig;

public class MyDbEnv {

    private Environment myEnv;
    private EntityStore store;

    // Our constructor does nothing
    public MyDbEnv() {}

    // The setup() method opens the environment and store
    // for us.
    public void setup(File envHome, boolean readOnly)
        throws DatabaseException {

        EnvironmentConfig myEnvConfig = new EnvironmentConfig();
        StoreConfig storeConfig = new StoreConfig();

        myEnvConfig.setReadOnly(readOnly);
        storeConfig.setReadOnly(readOnly);

        // If the environment is opened for write, then we want to be 
        // able to create the environment and entity store if 
        // they do not exist.
        myEnvConfig.setAllowCreate(!readOnly);
        storeConfig.setAllowCreate(!readOnly);

        try {
            // Open the environment and entity store
            myEnv = new Environment(envHome, myEnvConfig);
            store = new EntityStore(myEnv, "EntityStore", storeConfig);
        } catch (FileNotFoundException fnfe) {
            System.err.println("setup(): " + fnfe.toString());
            System.exit(-1);
        }

    }

    // Return a handle to the entity store
    public EntityStore getEntityStore() {
        return store;
    }

    // Return a handle to the environment
    public Environment getEnv() {
        return myEnv;
    }

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

        if (myEnv != null) {
            try {
                // Finally, close the environment.
                myEnv.close();
            } catch(DatabaseException dbe) {
                System.err.println("Error closing MyDbEnv: " +
                                    dbe.toString());
               System.exit(-1);
            }
        }
    }
} </pre>
    </div>
    <div class="navfooter">
      <hr />
      <table width="100%" summary="Navigation footer">
        <tr>
          <td width="40%" align="left"><a accesskey="p" href="inventoryclass.html">Prev</a> </td>
          <td width="20%" align="center">
            <a accesskey="u" href="dpl_example.html">Up</a>
          </td>
          <td width="40%" align="right"> <a accesskey="n" href="dataaccessorclass.html">Next</a></td>
        </tr>
        <tr>
          <td width="40%" align="left" valign="top">Inventory.java </td>
          <td width="20%" align="center">
            <a accesskey="h" href="index.html">Home</a>
          </td>
          <td width="40%" align="right" valign="top"> DataAccessor.java</td>
        </tr>
      </table>
    </div>
  </body>
</html>