View Javadoc

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 				// Finally, close environment.
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 }