--- Release version 1.01 21.02.2003 ------------------------------------- Initial release --- Release version 1.02 25.02.2003 ------------------------------------- 1. Support value types 2. Add FieldIndex interface 3. Fix bug in unique index support --- Release version 1.03 03.03.2003 ------------------------------------- 1. Fix bug in LinkImpl constructor 2. Make it possible to treate any class which is not persistent capable as value (by setting perst.implicit.values system property to true) 3. Make it possible to call IPersistent.deallocate multiple times. --- Release version 1.04 12.03.2003 ------------------------------------- 1. Fix bug in rollback method 2. Add IPersistent.onLoad method 3. Fix bug in BtreeFieldIndex 4. Add TestLink example --- Release version 1.05 04.04.2003 ------------------------------------- 1. Add optional garbage collection --- Release version 1.06 09.04.2003 ------------------------------------- 1. Add object level locking --- Release version 1.07 18.04.2003 ------------------------------------- 1. Add Persistent.modify method, allowing to mark object as dirty. Object will be automatically saved during transaction commit. 2. Add index iterator. 3. Add spatial index. --- Release version 1.08 22.04.2003 ------------------------------------- 1. Implement more sophisticated iterators for index search 2. Fix bug in R-Tree --- Release version 1.09 06.05.2003 ------------------------------------- 1. Fix bug in packing array of strings. 2. Fix bug with handling int keys in B-Tree --- Release version 1.10 28.05.2003 ------------------------------------- 1. Add Storage.isOpened() method 2. Change store() with modify() in Btree implementation 3. Derive IPersistent interface from java.io.Serializable --- Release version 1.11 09.06.2003 ------------------------------------- 1. Add methods for database import/export in XML format. --- Release version 1.12 18.06.2003 ------------------------------------- 1. Fix bug in Btree (replacing existed values in scalar index) 2. Optional usage of Java serialization mechanism to serialize non-persistent object. --- Release version 1.13 04.07.2003 ------------------------------------- 1. Make it possible to provide user specific implementation of PERST file interface. For example it can be used to work with flash card or encrypted files. --- Release version 1.14 09.07.2003 ------------------------------------- 1. Add Storage.getObjectByOID method 2. Add autoincremented field support: FieldIndex.append method --- Release version 1.15 16.07.2003 ------------------------------------- 1. Add Index.entryInterator() method which makes it possible to access both key and value. --- Release version 1.16 23.07.2003 ------------------------------------- 1. Fix bug in index iterator (iterating through empty index) --- Release version 1.17 01.08.2003 ------------------------------------- 1. Store weak references in modified object list to make it possible to GC to reclaim these objects 2. Support sets of persistent objects (Storage.createSet method) --- Release version 1.18 19.09.2003 ------------------------------------- 1. Add Link.iterator and Link.toArray(IPersistent[] arr) methods --- Release version 1.19 24.09.2003 ------------------------------------- 1. Provide new implementation of modified object list. Old implementation introduced in version 1.17 and based on weak reference in finalize method in Persistent class can cause loose of modifications if weak reference is cleared by GC, but finalize method is not invoked before transaction commit. --- Release version 1.20 03.10.2003 ------------------------------------- 1. Add FieldIndex.contains method 2. Replace '$' in Java identifiers during XML export --- Release version 1.21 07.10.2003 ------------------------------------- 1. Support of main-memory databases. --- Release version 1.22 17.10.2003 ------------------------------------- 1. Add SortedCollection container class 2. Fix bugs in main-memory database support 3. Fix bug with lost modifications --- Release version 2.01 23.10.2003 ------------------------------------- 1. Automatic scheme evaluation support. Attention: database format is incompatible with version 1.22! 2. New implementation of modified object list 3. Make it possible to tune most of database parameters using Storage.setProperty/Storage.setProperties methods --- Release version 2.02 07.11.2003 ------------------------------------- 1. Support indices for byte arrays 2. Support compound indices --- Release version 2.03 19.11.2003 ------------------------------------- 1. Add IPersistent.invalidate method. Transaction rollback will now invalidate all modified objects. 2. Support per-thread transactions (Storage.beginTransaction and Storage.endTranasction methods) 3. Yet another attempt to eliminate modification list and handle modified object using weak references. --- Release version 2.04 26.11.2003 ------------------------------------- 1. Introduce IPersistentSet interface which is now returned by Storage.createSet method --- Release version 2.05 28.11.2003 ------------------------------------- 1. Make it possible to profile storage memory using Storage.getMemoryDump() method --- Release version 2.07 14.12.2003 ------------------------------------- 1. Fix critical bug in object index relocation algorithm 2. Fix bug in recovery procedure --- Release version 2.08 20.12.2003 ------------------------------------- 1. Add Blob class 2. Make it possible to specify in Index string key directly without Key wrapper. --- Release version 2.09 23.12.2003 ------------------------------------- 1. Fix bug in Link.insert method 2. Add Storage.setClassLoader and Storage.getClassLoader methods --- Release version 2.10 30.12.2003 ------------------------------------- 1. Fix bug in XML import --- Release version 2.11 07.01.2004 ------------------------------------- 1. Add Storage.backup method which can be used for online backups and database compactification 2. Add support of time series --- Release version 2.12 12.01.2004 ------------------------------------- 1. Fix bug in backup method --- Release version 2.13 24.01.2004 ------------------------------------- 1. Add 007 benchmark --- Release version 2.14 30.01.2004 ------------------------------------- 1. Providing transparent interface to Perst using AspectJ. This interface was originally designed by atrick Morris-Suzuki and later changed by me. 2. Fix bug in object modification mechanism which can cause deadlock. 3. Make it possible to specify part of compound key in query --- Release version 2.15 06.02.2004 ------------------------------------- 1. Yet another implementation of transparent iterface to Perst using JAssist --- Release version 2.16 10.02.2004 ------------------------------------- 1. Version of Perst interface for JDK 1.5 (generic container classes) 2. Fix bug in Persistent.invalidate method --- Release version 2.17 26.02.2004 ------------------------------------- 1. Add check for concurrent modifications in B-Tree iterator 2. Add Projection class 3. Add Index.getPrefix, Index.prefixIterator, FieldIndex.getPrefix and FieldIndex.prefixIterator methods 4. Fix bugs in RelationImpl class --- Release version 2.18 07.03.2004 ------------------------------------- 1. Add default comparer for SortedCollection class (expecting that members of collection implement Comparable interface) 2. Fix bug in Index.set method for non-unique indices 3. Support of database file encryption --- Release version 2.19 18.03.2004 ------------------------------------- 1. Fix bug in file encyption --- Release version 2.20 04.04.2004 ------------------------------------- 1. Add Link.Pin and Link.Unpin methods. Do not implicitely pin accessed Link elements. 2. Change class descriptor loading algorithm to avoid stack overflow in applications with large number of classes 3. Detect bugs related with incorrect serialization of persistent object as raw or value type 4. Fix bug in automatic scheme evaluation implementation. --- Release version 2.21 16.04.2004 ------------------------------------- 1. Add Index.getKeyType(), FieldIndex.getIndexedClass() and FieldIndex.getKeyFields() methods 2. Add Index.prefixSearch method which can be used to locate keys which are prefixes of the specified word. --- Release version 2.22 30.04.2004 ------------------------------------- 1. Implement reallocatable bitmap (now database size is not limited by dbDatabaseOffsetBits constant) --- Release version 2.23 09.05.2004 ------------------------------------- 1. Make StorageImpl.swizzle and StorageImpl.unswizzle method protected to be allow their redefinition in derived class. 2. Make it possible to store Java primitive objects wrappers (Integer, Double...) and references to persistent object in raw field. --- Release version 2.24 17.05.2004 ------------------------------------- 1. Index.remove(Key), Index.set(Key,IPersistent), FieldIndex.remove(Key) and FieldIndex.set(IPersistent) methods now return reference to the removed/replaced object. --- Release version 2.25 28.05.2004 ------------------------------------- 1. Optimized version of T-Tree algorithm --- Release version 2.26 07.06.2004 ------------------------------------- 1. Automatic generation of default constructor for persistent classes 2. Fix bug in FieldIndex.remove(Key) introduced in version 2.24 --- Release version 2.27 15.06.2004 ------------------------------------- 1. Add MultiFile class 2. Use Thread.currentThread().getContextClassLoader().loadClass() instead of Class.forName() 3. Use PersistentObjectInputStream class which is able to correctly resolve references to persistent classes from serialized transient objects. 4. Fix bug in XMLExporter.exportBinary 5. Change R-Tree and rectangle implementation to calculate rectangles area using long type --- Release version 2.29 05.07.2004 ------------------------------------- 1. Make it possible to use Storage.gc() for verification of consistency of database. Now this method returns number of deallocated (garbage objects) and detects dangling references in the database. 2. Add SpatialIndexR2 and RectangleR2 classes for spatial objects with floating point coordinates. Also new spatial index is more efficient for large collections (it doesn't pin all its pages in memory). SpatialIndexR2 class provides iterator to accessed overlaped object one-by-one. 3. Add SpatialIndex.getWrappingRectangle() and SpatialIndexR2.getWrappingRectangle() methods 4. Add Link.setSize() method. 5. Add MappedFile class based on java.nio package for mapping database file on virtual memory (JDK 1.5 version only) --- Release version 2.30 15.07.2004 ------------------------------------- 1. Fix bug in JAssist translator class --- Release version 2.31 06.08.2004 ------------------------------------- 1. Support final fields in peristent object. 2. Add L2List and L2ListElem classes 3. Fix bug in importing/exporting of raw fields introduced in version 2.23 --- Release version 2.32 21.08.2004 ------------------------------------- 1. Fix bug in Launcher.java class to be compatible with new Perst class loading policy introduced in version 2.26 2. Add support of enum fields for JDK 1.5 3. Fix critical synchronization bug in writing modified objects to the disk 4. Fix problem with building JDK 1.5 version of Perst with latest javac compiler 5. Support new kind of per-thread transactions: serializable transactions 6. Alternative B-Tree implementation (as normal Java object and not using direct access database pages). New implementation of B-Tree will be used instead of old implementation if "perst.alternative.btree" property is set. New B-Tree has incompatible format with old B-Tree, so you could not use old database or XML export file with new indices. Alternative B-Tree is needed to provide serializable transaction (old one could not be used). Also it provides better performance (about 3 times comaring with old implementation) because of object caching. And B-Tree supports keys of user defined types. 7. Fix bug in Index.set method 8. Fix bug in packing array of string 9. Fields of java.lang.Object and java.lang.Comparable type are now serialized decpite to whether "perst.serialize.transient.objects" property was set or not 10. Add Persistent onStore method which is invoked before object is stored in the database --- Release version 2.33 27.08.2004 ------------------------------------- 1. Background garbage collection 2. Add Storage.getUsedSize() and Storage.getDatabaseSize() methods --- Release version 2.34 16.09.2004 ------------------------------------- 1. Add "perst.file.noflush" property. When it is assigne true value, Perst will not perform flush of file during transaction commit. It will greatly increase performance because eliminate synchronous write to the disk (when program has to wait until all changed are actually written to the disk). But it can cause database corruption in case of OS or power failure (but abnormal termination of application itself should not cause the problem, because all data which were written to the file, but is not yet saved to the disk is stored in OS file buffers and sooner or later them will be written to the disk) 2. Fix possible problems with GC memory consistency verification for T-Tree and R-Tree classes --- Release version 2.35 02.10.2004 ------------------------------------- 1. Fix problem with supporting compound keys in alternative implementation of B-Tree 2. Fix bug (cuase inefficient execution) in TimeSeries.Contains method. 3. Support new version of JAssist --- Release version 2.36 07.10.2004 ------------------------------------- 1. Make it possible to specify encoding for storing string (done by Michael Samblanet ) 2. Handle null values of enum fields 3. Add StorageListener class 4. Fix compilation problems with latest J2SE 5.0. --- Release version 2.37 10.10.2004 ------------------------------------- 1. Add PATRICIA Trie container 2. Fix problem with generated by JAssist pack/unpack functions introduced in 2.36 version --- Release version 2.38 29.10.2004 ------------------------------------- 1. Fix bugs in XML import/export 2. Fix check for invalid OID in Storage.getPos method 3. Change BLOB implementation to support work with very large BLOBs (proposed by Mikhail Kotelnikov ) 4. Fix bug with restoring autoincrement counter in XML import 5. Add TimeSeries.Deallocate wethod 6. Fix bug in backup with compactification (incorrect setting of bitmap end) --- Release version 2.39 14.11.2004 ------------------------------------- 1. Fix problems with handling weak references and finalization 2. Make it possible to SoftReference instead of WeakReference for object cache 3. Replace elements of Link with stubs after storing Link in the database to avoid memory overflow caused by pinning objects in memory. 4. Add Ttree.Deallocate method 5. Fix bug in SpatialIndexR2 creation in JDK 1.5 version of Perst. --- Release version 2.40 16.11.2004 ------------------------------------- 1. Add LRU object cache. Make it possible for user to selcet between "weak", "soft" and "lru" cache implementation. 2. Add PersistentString class to be able to store string in the database as independent object. 3. Fix bug in Persistent.assignOid method introduced in version 2.39 4. Fix bug in Link.indexOf method introduced in version 2.39 5. Fix synchronization problem (deadlock) in background GC activation --- Release version 2.41 28.11.2004 ------------------------------------- 1. Change entry interator for AltBtree to resolve references in lazy way (only when requested) 2. Fix bug in comparison of int keys in multifield index 3. Fix problems with supporting more than 2^28 objects --- Release version 2.42 06.12.2004 ------------------------------------- 1. Fix bug in range search implementation in T-Tree (SortedCollection) 2. Make it possible to specify different range types (inclusive/exclusive) in SortedCollection search methods --- Release version 2.43 10.12.2004 ------------------------------------- 1. Add BitIndex collection (allowing to select object by bit vector of boolean properties) --- Release version 2.44 14.12.2004 ------------------------------------- 1. Add optional file locking to prevent modification of database file by more than one application --- Release version 2.45 16.12.2004 ------------------------------------- 1. Derive Index and FieldIndex interface from common base GenericIndex 2. Index, FieldIndex and SortedCollections are now implemting Collection interface in JDK 1.5 --- Release version 2.46 19.12.2004 ------------------------------------- 1. Add Storage.makePersistent method and change implementation of Persistent.makePersistent. Now makePersistent method only assigns OID to the object but doesn't store it in the database 2. Add Storage.createThickIndex method for efficient support of indices with a lot of duplicate values of of the key 3. Add Storage.createScalableSet method for efficient (space and speed) support of set of references small as well as large number of members 4. Introduce IterableIterator class tp JDK 1.5 API which makes it possible to use collection interators in "for" construction 5. Make it possible to pass key values in Index and FieldIndex methods without creating Key wrapper in JDK 1.5 API --- Release version 2.47 28.12.2004 ------------------------------------- 1. Revisted collections in JDK 1.5 API (now all collections implmements Collection interface) 2. Rewrite R-Tree iterator implementation 3. Fix bug in multified index key field lookup (if key belons to the base class) --- Release version 2.48 03.01.2005 ------------------------------------- 1. Replication support. Now Perst supports master-slaves replication model. Single master node replicates changes to one or more slave nodes. It is possible to access database at slave nodes in read-only mode. Look at TestReplic example. --- Release version 2.49 09.01.2005 ------------------------------------- 1. Change implementation of Link to automatically set modified bit in contaning object. Now it is not necessary to explicitly call modify() for object which Link component is updated. --- Release version 2.50 25.01.2005 ------------------------------------- 1. Change Perst license. Starting from this version Perst it is necessary to buy commercial license for using Perst in commercial products. 2. Fix race condition problem in Persistent.Load method --- Release version 2.51 07.02.2005 ------------------------------------- 1. Integrate JSQL - make it possible to select collection members using SQL-like queries 2. Support remove() method for Btree and AltBtree selection iterators --- Release version 2.52 11.02.2005 ------------------------------------- 1. Add Database class emulating object-relational database on top of Perst --- Release version 2.53 22.02.2005 ------------------------------------- 1. Fix problems with handling null values of enum fields in JDK 1.5 version. 2. Support concurrent iterators (recover iterator state instead of throwing ConcurrentModificationException if underlying collection is modified outside iterator) --- Release version 2.54 02.03.2005 ------------------------------------- 1. Make database format tolerant to order of members in class in the particular JVM --- Release version 2.55 21.03.2005 ------------------------------------- 1. Add versioning support (Version and VersionHistory classes) 2. Make it possible to postion BLOB output stream to the arbitrary position 3. Add Perst interface to Lucene full text search engine (store Lucene indices in Perst storage) --- Release version 2.56 19.05.2005 ------------------------------------- 1. Add "perst.slave.connection.timeout" storage property allowing to specify connection timeout for replicated model. 2. Do not insert entries in object cache during finalization 3. Change behavior of Storage.makePeristent method. Now by default it works as prior version 2.46 - immediately storing object in the storage. To avoid such behavior, set "perst.force.store" property to false. In this case object will be just assigned OID and marked as modified (unfortunately garbage collection and finalization in Java is implemented in such way, that in this case application intensively putting roots of objects trees in index can cause memory overflow. --- Release version 2.57 08.06.2005 ------------------------------------- 1. Add Storage.merge(Iterator[]) and Storage.join(Iterator[]) to efficiently merge and join results of several index searches. It allows efficient implementation of complex search conditions. 2. Force assignment of OID to objects referenced by fields used as a key in FieldIndex when object is inserted in index. 3. Fix problems with JRocket JVM. 4. Fix problem with interference of explicit deallocation of objects and garbage collection --- Release version 2.58 19.06.2005 ------------------------------------- 1. Support compound indices (before Perst supports only compound multi-field indices) 2. Support RDF data model (http://www.w3.org/RDF/): store/fetch/searching RDF data, XML based queries 3. Change implentation of contains() method in Perst collection to be consistent with JDK collections (comparison using equals method). Add containsObject method which is more efficient and check if collection contains specified object instance. 4. Change Database class to support table inheritance and polymorphic queries.