-*- outline -*- * Structure: ** cls/clsName_2_clsId.db - Relates ClassName to Class Object id. [className:String]->[clsId:long] ** cls/clsId_2_cls.db - Relates a Class ID to a Class Desc. [cldId:long]->[classStorageVersion:int][classObject:encoded] ** For each class with stored objects: *** obj/{objectClassName}/objId_2_obj.db - Stores all objects of a given class. [objId:long]->[objStorageVersion:int][clsId:long][object:encoded] *** obj/{objectClassName}/objId_2_objVersion.db - Stores all object mutation serial numbers. Used to track for colliding transaction. [objId:long]->[objVersion:long] ** named/objName_2_objId.db - Relates global object identifiers to object ids [objectName:String]->[objId:long] *** named/objId_2_objName.db - Inverse. [objectName:String]->[objId:long] * Support ** Need GDBM or NDBM binding for Java. Should implement map interface but for ** Need encoding and mutation tracking events for Java. ** Package "storage": *** Store - defines a storage /* Public */ public Store(FilePath place); /* Internal */ public long allocateClsId(); public void storeClass(Cache cache, long clsId, Class cls); public Class loadClass(Cache cache, long clsId); public Class loadClass(Cache cache, String name); public long allocateObjId(); public void storeObject(Cache cache, long clsId, Object obj); public Object loadObject(Cache cache, long clsId); public Object loadObject(Cache cache, String name); public ClassEnumerator classes(); public ObjectEnumerator objects(Class cls); public ObjectSubclassEnumerator objectIsa(Class cls); public void readLock(); public void writeLock(); public long allocateObjId(); public void storeObject(Cache cache, long objId, Object obj, Cache); public Object loadObject(Cache cache, long objId); *** Enumerator - enumerates objects from a Store *** ClassEnumerator - enumerates all classes in the system *** ObjectEnumerator - enumerates all object of a specific class *** ObjectSubclassEnumerator - enumerates all objects of all subclasses of a class *** QueryEnumerator - enumerates an enumeration where a specific test is performed *** Table - defines a key-value table. public Table(FilePath place); public boolean has(byte[] key); public byte[] load(byte[] key); public void store(byte[] key, byte[] value); *** Encoder - encodes an object to a stream. public Encoder(OutputStream out, Cache cache); public void writeBoolean(boolean), writeByte(byte ) ... writeDouble() public void writeObject(Object obj); *** Decoder - decodes an object to a stream. public Decoder(InputStream out, Cache cache); public boolean readBoolean(), readByte() ... readDouble() public Object readObject(); *** Session - manages session with a Store. public Session(Store store); public Class loadClass(String name); public long storeObject(Object obj); public long objId(Object obj); public Object loadObject(long objId); public long storeObject(Object obj, String objName); public Object loadObject(String objId); public ClassEnumerator classes(); public ObjectEnumerator objects(Class cls); public ObjectSubclassEnumerator objectsIsa(Class cls); *** Cache - cache objects loaded during a Session. private Map objToId = new HashMap(); /* Probably use JNI to speed this up. */ private Map objIdToObj = new HashMap(); public Object get(long id); public long get(Object obj); public void set(long id, Object obj); *** Transaction - tracks mutations to loaded objects private Map obj /* probably use JNI to speed this up. */ public Transaction(Session session); public void abort(); public void commit();