ObJectRelationalBridge
BRIDGING JAVA OBJECTS AND RELATIONAL DATABASES


history

The ObJectRelationalBridge Project started as a tutorial to teach Java developers how to use Java Reflection, Collection classes, weak references and XML api to build a simple but robust persistence framework.

People are never satiesfied with what they have. So when folks saw what I built with them they did not say "Oh, thank you for this ingenious piece of software! It solves all our needs!". Instead they said: "Oops, You don't have Transaction support -- how bad.", "By the way, does your framework comply to ODMG?", "We need a multiuser, multithreaded, scalable ObjectServer, can you do this for us???"

So I began thinking of extending my simple framework to fulfill all these requirements and published my results as a open source project on sourceforge. Below you find a short history of changes in subsequent releases.

Release

Changes

0.1.1

initial public release

0.1.9

first prototype of ODMG compliant interface

0.1.17

New features:

  • working with Identities

  • proxy support in the PersistenceBroker  supports a set of Proxy-techniques, including

    • Lazy Collections, 

    • Configuration of lazy/eager materialization from XML repository,

  • Smart Updates/Inserts

0.1.30

New features:

  • Pessimistic Object Locking

  • Object rollback

  • extending Objectserver infrastructure

  • Configurable JDBC connection pooling

  • PersistenceBroker can produce PrimaryKey Enumerations, useful for EJB finder methods.

  • ANT build scripts

  • Junit regression tests (integrated into build scripts, try build[.sh|.bat] junit)

0.1.41

New features:

  • Using prepared statements,

Refactorings:

  • introducing a inheritance scheme to reduce code duplication between FieldDescriptor, ObjectReferenceDescriptor, CollectionDescriptor

  • Examples in ojb.examples.broker, ojb.examples.proxies moved to test.ojb.broker and rewritten as JUnit tests.

0.1.48

New features:

  • Named Roots, a simple ODMG compliant named roots implementation

Refactorings:

  • finished moving all sample classes from package ojb.examples to test.ojb. All samples are now rewritten as JUnit TestCases and can be run directly from the build script (see QuickStart info)

0.1.63

New features:

  • Query facility in the PersistenceBroker, allows queries by example and queries by filter criteria. In this release joins are not supported. I'm planning to use this query facility as a backend to the OQL implementation.

  • New TestClass test.ojb.broker.PerformanceTest allows profiling to detect performance critical operations. try "build performance".

changes, refactorings:

  • reimplemented the Named Roots Map as a persistent Collection. It is now complety integrated in the transaction mechanism.

  • changed the PersistenceBroker interface to reflect the usage of Query objects. changed all examples accordingly.

  • All PersistenceBroker Object are now declared as "throws PersistenceBrokerException"

  • faster implementation of ojb.broker.metadata.ClassDescriptor::getFieldDescriptorByIndex(int)

bug fixes:

  • prepared statement generation for String attributes in SQLGenerator

Open bugs:

  • The testmethod testWrongDbName in test.ojb.odmg.OdmgExamples still reports a failure.

0.1.70

New features:

  • Support for polymorphism. It is now possible to define extents consisting of several subclasses. The mechanism supports Interfaces as well as base-classes. There are still things that don't support polymorphism: PersistenceBroker.getIteratorByQuery and PersistenceBroker.getPkEnumerationByQuery. (They are Wrappers to JBDC ResultSets and I have no idea how to make ResultSets polymorph ;-)
    There is a new TestClass test.ojb.broker.PolymorphicExtents testing and demonstrating all relevant techniques.

  • New build target browse_db starts the InstantDB tool DBBrowser on the OJB demo database

  • first step towards persistent Collection implementation. I started with a DListImpl. Right now it does not implement more than add(), but persistence support works...

  • A SequenceManager responsible for generating unique values for primary-key columns. This class is aware of extents and maintains uniqueness of pk-values accross any number of tables.

changes, refactorings:

bug fixes:

Open bugs:

    • The testmethod testWrongDbName in test.ojb.odmg.OdmgExamples still reports a failure.

0.1.83

New features:

  • Support for user defined collections. It is now possible to use user defined collections (e.g. typed collections) as Collection attributes. These collections must implement the interface ojb.broker.ManageableCollection to provide minimum interoperability with the PersistenceBroker mechanisms.
    There is a new TestClass test.ojb.broker.TypedCollectionTest testing and demonstrating all relevant techniques.

  • There is a first fully functional ODMG Collection: Dlist. It's implemented by ojb.server.collections.DListImpl. There is a TestClass test.ojb.odmg.DListTest testing and demonstrating the usage of this collection.

changes, refactorings:

  • Complete redesign of the ODMG Transaction-mechanism. I unified the concepts of David's TransactionWrapper objects with my idea of ObjectModification objects, that had been responsible for different aspects of the transaction management in OJB.

  • Removed interface IPobject and baseclass Pobject. These were meant as examples for encapsulating PersistenceBroker code in business objects. I don't want to encourage such a poor design any longer...

  • Collection attributs can now be defined without reverse ReferenceAttributes. This design was based on the wrong assumption, that there is always a unique ReferenceAttribute describing the foreignkey relation betweeen the involved tables.
    Now Collection Attributes can be defined without specifying an inverse reverse ReferenceAttribute. To make this possible it's now necessary to specify the list of foreign key attributes (respectively their Descriptor Ids) within the CollectionDescriptor.

  • Harmonized the syntax for ReferenceDescriptors and CollectionsDescriptors in the repository.dtd. Now <auto.retrieve>, <auto.update>, <auto.delete> can be used in both classes. Usage of these tags is now optional. If <auto.retrieve> is ommited, true is the default value. If <auto.update>, <auto.delete> default value is false.

bug fixes:

  • storing of collection attributes did not work due to an error during the last refactoring. No JUnit test detected the error :-(
    Thanks to Sascha for reporting this bug.

Open bugs:

  • The testmethod testWrongDbName in test.ojb.odmg.OdmgExamples still reports a failure. Works correctly in my IDE !?

0.1.98

New features:

  • Now all Collections required by ODMG are implemented: DSet, DBag, DList DArray

  • The DMap ODMG persistent map is now also implemeted.

  • added support for using arrays to model 1-n relations.

  • new method RsIterator::releaseDbResources() can be used to free the JDBC resources used by the Iterator

  • added OJBSearchFilter from OpenEMed project (credits to Sascha)

  • Use JAXP Parser factory to create SAX Parser (credits to Dave)

  • Transaction support in PersistenceBroker

changes, refactorings:

  • proper handling of ClassNotPersistenceCapableExceptions

  • PersistenceBrokerImpl::getObjectByQuery() now also works with QueryByCriteria

  • move package examples to package test

  • removed quoting of column names

Open bugs:

  • The testmethod testWrongDbName in test.ojb.odmg.OdmgExamples still reports a failure. Works correctly in my IDE !?


0.1.100

New features:

  • Wrote a tutorial covering basic techniques to use OJB as a persistence layer.

0.1.110

New features:

- User defined Type- and Value mappings are now configurable per class.


changes, refactorings:

- refactored the PersistenceBroker to use Arrays instead of Vectors for all

timecritical internal operations

- ojb.broker.query.Criteria.toString() now generates better readable statements


bug fixes:

- corrections to OJBSearchFilter (thanks to Sascha)

- fixed an annoying bug in the XmlRepositoryHandler that somtimes damaged

tokens (thanks to Andrew)

- PersistenceBrokerImpl.store(...) does now handle null-values properly

(thanks to Andrew)

- RsIterator.hasNext() now also checks ResultSet.isAfterLast()

(thanks to Andrew)


Open bugs:

- Testmethods in test.ojb.odmg.OdmgExamples still report failures.

in my development environment (VisualAge) I can't reproduce them...

0.1.114

New features:

  • Wrote a tutorial about the usage of the OJB ODMG API. Includes a working tutorial application.

0.1.120

New features:

  • OQL Parser and OQLQuery are implemented

changes, refactorings:

- corrections and modifications to the ODMG tutorial to reflect
the newly implemented OQL interface

- modified the semantics of the register process for ODMG transactions:
now a register also recursively registers all associated objects
(registering a root node will register all child nodes)
- modified the semantics of ODMG transaction commit:
before an object is commited it is compared with its internal clone
to detect modifications.
- These to changes allow to get rid of the markModified operation, which
was neccessary to tell the transaction about object changes.
The Interface PersistenceCapable has been removed to reflect this change.

0.5.136

New features:

- OQL parameter binding operation implemented

- OQL filter operations in ODMG Collection implemented

- wrote a tutorial and a code example covering Conversion Strategies

- DListImpl, DBagImpl, DSetImpl, DMapImpl and the respective Iterators now

provide remove() methods


changes, refactorings:

- removed the prefix __ from the OJB internal tables,

to allow easier ports to Oracle, DB2 and other DBMS

- to minimize the size of serialized Identities they are now GZIPed

- rewrote the RsIterator methods next() and hasNext() to work even

with buggy JDBC 2.0 drivers...

- Creation and preparation of prepared Statements now compliant with JDBC 2.0

drivers for DB2 and Oracle.


bug fixes:

- changed the deletion sequence for dependend objects to prevent

referential integrity violations

0.5.151

New features:

- designed a PersistenceBroker server arcitecture that allows

to run multiple clients against one or more loadbalanced server processes.

This new architecture allows to build highly scalable distributed

applications with OJB.

(distributed Lockhandling is not finished yet.)

The client API remains unchanged, thus the PersistenceBroker

location is completely transparent to the clients.


changes, refactorings:

- I had to rename the whole project to ObJectRelationalBridge as

the old name is trademark protected.

- now running with instantDB 4.0

- major performance enhancements to RsIterator

- StatementsForClass now allows to work with JDBC1.0 and 2.0 Drivers


bug fixes:

- Sasha contributed a bug fix to the query SearchFilter facility.

- getObjectByQuery now supports polymorphism.

- minor bug fies in DList & co.

- release of DB resources in RsIterator fixed.

- PersistenceBroker.store() now places Objects in cache to maintain symmetry with the getXXX() Methods.





$FOOTER$