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:
|
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:
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:
Refactorings:
|
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:
Open bugs:
|
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:
|
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:
Open bugs:
|
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:
|
0.1.100
|
New features:
|
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:
|
0.1.120
|
New features:
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.
|