1 package org.sourceforge.jemm.database.persistent.berkeley;
2
3 import java.io.File;
4
5 import com.sleepycat.je.DatabaseException;
6 import com.sleepycat.je.Environment;
7 import com.sleepycat.je.EnvironmentConfig;
8 import com.sleepycat.persist.EntityStore;
9 import com.sleepycat.persist.StoreConfig;
10 import com.sleepycat.persist.model.AnnotationModel;
11
12 import org.apache.log4j.Logger;
13 import org.sourceforge.jemm.database.components.StorageEngine;
14 import org.sourceforge.jemm.database.components.StorageEngineException;
15 import org.sourceforge.jemm.database.components.se.StorageEngineClassIF;
16 import org.sourceforge.jemm.database.components.se.StorageEngineClientRefIF;
17 import org.sourceforge.jemm.database.components.se.StorageEngineEnumIF;
18 import org.sourceforge.jemm.database.components.se.StorageEngineGCIF;
19 import org.sourceforge.jemm.database.components.se.StorageEngineObjectIF;
20 import org.sourceforge.jemm.database.components.se.StorageEngineRootIF;
21 import org.sourceforge.jemm.database.components.se.StorageEngineUserLockIF;
22 import org.sourceforge.jemm.database.persistent.berkeley.proxy.ClassIdProxy;
23 import org.sourceforge.jemm.database.persistent.berkeley.proxy.ClassInfoProxy;
24 import org.sourceforge.jemm.database.persistent.berkeley.proxy.EnumInfoProxy;
25 import org.sourceforge.jemm.database.persistent.berkeley.proxy.FieldDataProxy;
26 import org.sourceforge.jemm.database.persistent.berkeley.proxy.FieldInfoProxy;
27 import org.sourceforge.jemm.database.persistent.berkeley.proxy.IDProxy;
28
29 public class BDbStorageEngine implements StorageEngine {
30
31 private static final Logger LOG = Logger.getLogger(BDbStorageEngine.class);
32
33 private final File bdbDir;
34 private Environment bdbEnv;
35
36 private IDManager idManager;
37
38 private BDbStorageEngineClassImpl classImpl;
39 private BDbStorageEngineClientRefImpl clientRefImpl;
40 private BDbStorageEngineEnumImpl enumImpl;
41 private BDbStorageEngineGCImpl gcImpl;
42 private BDbStorageEngineObjectImpl objectImpl;
43 private BDbStorageEngineRootImpl rootImpl;
44 private BDbStorageEngineUserLockImpl userLockImpl;
45
46 private EntityStore store;
47
48 public BDbStorageEngine(File bdbDir) {
49 this.bdbDir = bdbDir;
50 }
51
52 @Override
53 public StorageEngineClassIF getClassIF() {
54 return classImpl;
55 }
56
57 @Override
58 public StorageEngineClientRefIF getClientRefIF() {
59 return clientRefImpl;
60 }
61
62 @Override
63 public StorageEngineEnumIF getEnumIF() {
64 return enumImpl;
65 }
66
67 @Override
68 public StorageEngineGCIF getGCIF() {
69 return gcImpl;
70 }
71
72 @Override
73 public StorageEngineObjectIF getObjectIF() {
74 return objectImpl;
75 }
76
77 @Override
78 public StorageEngineRootIF getRootIF() {
79 return rootImpl;
80 }
81
82 @Override
83 public StorageEngineUserLockIF getUserLockIF() {
84 return userLockImpl;
85 }
86
87 public void initialise() {
88 try {
89 EnvironmentConfig envConfig = new EnvironmentConfig();
90 StoreConfig storeConfig = new StoreConfig();
91
92 envConfig.setAllowCreate(true);
93 storeConfig.setAllowCreate(true);
94 bdbEnv = new Environment(bdbDir, envConfig);
95 AnnotationModel model = new AnnotationModel();
96 storeConfig.setModel(model);
97 model.registerClass(IDProxy.class);
98 model.registerClass(ClassIdProxy.class);
99 model.registerClass(ClassInfoProxy.class);
100 model.registerClass(FieldInfoProxy.class);
101 model.registerClass(FieldDataProxy.class);
102 model.registerClass(EnumInfoProxy.class);
103
104 store = new EntityStore(bdbEnv, "EntityStore", storeConfig);
105 idManager = new IDManager(store);
106 rootImpl = new BDbStorageEngineRootImpl(store);
107 classImpl = new BDbStorageEngineClassImpl(store,idManager);
108 enumImpl = new BDbStorageEngineEnumImpl(store,idManager);
109 objectImpl = new BDbStorageEngineObjectImpl(store,idManager);
110 clientRefImpl = new BDbStorageEngineClientRefImpl(store);
111 gcImpl = new BDbStorageEngineGCImpl(store);
112 userLockImpl = new BDbStorageEngineUserLockImpl(store);
113
114 } catch (DatabaseException dbe) {
115 LOG.error("Error occurred whilst initialing store", dbe);
116 throw new StorageEngineException("Error occurred whilst initialising store",dbe);
117 }
118 }
119
120 public void shutdown() {
121 if (store != null) {
122 try {
123 store.close();
124 store = null;
125 } catch (DatabaseException de) {
126 LOG.error("Error returned when closing store", de);
127 throw new StorageEngineException("Error occured whilst closing store",de);
128 }
129 }
130 if (bdbEnv != null) {
131 try {
132
133 bdbEnv.close();
134 bdbEnv = null;
135 } catch (DatabaseException de) {
136 LOG.error("Error returned when closing env", de);
137 throw new StorageEngineException("Error occured whilst closing env",de);
138 }
139 }
140 }
141 }