BRIDGING
JAVA OBJECTS AND RELATIONAL DATABASES
The PersistenceBroker allows Java Programmers to store and retrieve Java Objects in/from JDBC-compliant RDBMS
Transparent persistence: Persistent classes don't have to inherit from a persistent base class or to implement an interface.
Persistence by reachability: All Objects associated to a persistent object by references are made persitent too.
Mapping support for 1:1, 1:n and m:n associations.
Automatic assignment of foreign key values.
The Object / Relational mapping is defined in an XML Repository. The mapping is completely dynamic and can be manipulated at runtime for maximum flexibility
Classes can be mapped to an arbitrary number of JDBC datasources.
The Broker uses an internal ObjectCache which
maintains object identity (multiple lookups on a given table with same primary key will return one and the same object !)
reduces read and write overhead against databases
prevents circular reads in object read phase
is fully garbage collectable through usage of soft references (if objects are referenced by the ObjectCache but not from any Client-Application they can be reclaimed by the garbage collector)
The CacheMechanism is pluggable and can be easily replaced with user-defined implementations. There are also some predefined implementations available.
Provides a cache synchronization mechanism to avoid data corruption when using multiple OJB servers.
Configurable Lazy Materialization through Proxy support in the PersistenceBroker. The user can implement specific Proxy classes or let OJB generate dynamic Proxies.
Support for Polymorphism and ODMG Extents. You can use Interface-types and abstract classes as attribute types in your persistent classes. Queries are also aware of extents: A query against a baseclass or interface will return matches from derived classes, even if they are mapped to different DB-tables
Support for Java Array- and Collection-attributes in persistent classes. The attribute-types can be Arrays, java.util.Collection or may be user defined collections that implement the interface ojb.broker.ManageableCollection.
Sequence-Managing. The SequenceManager is aware of extents and maintains uniqueness of ids accross any number of tables. Sequence Numbering can be declared in the mappping repository.
Reusing Prepared Statements, internal connection pooling.
Supports BMP Entity Beans (see demo code in package test.ojb.ejb). The caching technique improve the performance of EJB applications.
Integrates smoothly in controlled environments like EJB containers (wrt. SecurityManagers and JNDI based Datasources).
ODMG compliant API, a Tutorial, and TestCases are included
(see package test.ojb.odmg)
Important
notes:
OQL is currently not fully implemented. (Aggregations and Method Invocations)
ODMG implicit locking is partly implemented but does currently not maintain transaction isolation properly. To achieve safe transaction isolation client application must use explicit lock acquisition.
Scalable client / server architecture that allows to build massively distributed systems.
Distributed Lockmanagement supporting four pessimistic Transaction Isolation Levels (uncommited or "dirty" reads, commited reads, repeatable reads, serializable transactions).
Optimistic locking support. Users may declare int or long fields as version attributes or java.sql.Timestamp fields as timestamp attributes.
Cache synchronisation for distributed caches.
Comes along with fully functional demo applications running against HSQLDB.
Quality assurance taken seriously: More than 120 JUnit-TestCases for regression tests. JUnit tests integrated into the build scripts.
Provides Log4J logging facilities.
100 %: pure Java, Open Source, LGPL
$FOOTER$