Apache OpenJPA, an open-source implementation of the Java Persistence API (JPA), recently released version 1.0.0. InfoQ spoke with OpenJPA project lead Patrick Linskey to learn more about this release.
Linskey described some important OpenJPA features and extensions:
- JPA 1.0 compliant - Fully implements the JPA 1.0 specification, and is targeted mainly at relational database management systems (RDMBS)
- Enterprise-grade - Contains many enterprise-level features such as memory management, scale-building, and cluster-building
- Quality of Service (QoS) extensions - Clustered performance caching, fetch access pattern control and tuning, and lightweight memory footprints for large transactions
- Advanced RDMBS feature extensions - Support for savepoints and pessimistic locking
- JPA contract improvements - well-defined and useful rollback behaviour, expansion of
@GeneratedValue
to all numeric field types, expanded lazy loading/dirty tracking capabilities - Support for JAXB-managed fields - fields can map directly to XML column types in the database, and some direct querying of XML can be done from OpenJPA queries
Linskey also mentioned that BEA's Kodo is based off of OpenJPA, although they do not follow similar release cycles - Kodo tends to be released in sync with BEA's WebLogic application server.
In addition to BEA WebLogic using OpenJPA as it's JPA implementation through Kodo, Apache Geronimo's recent 2.0 release also uses OpenJPA through the Apache OpenEJB project. OpenJPA is also used in several other products, and Linskey identified Compass project lead Shay Banon as a key to the integration between Compass and OpenJPA. Linskey was also asked what the future plans were for OpenJPA:
Now that the JPA2 spec team is starting to get underway, obviously, that is a big focus for us. The JPA 1.0 specification covers a large amount of what most users will need to build applications, but there are a few important areas of the O/R mapping problem that the JPA spec does not yet cover. Beefing up this coverage is a big focus of ours for the next JPA specification release.
From a product standpoint, we have a number of ideas around cache optimization for heavy-write environments and further enhancements for highly-concurrent applications running in multi-core environments. We've also done a bunch of work around support for accessing OpenJPA via alternate programming models, such as SCA's Service Data Objects specification, or other dynamic APIs.
For more details about OpenJPA, please take a look at a recent InfoQ presentation in which Patrick Linskey discusses OpenJPA and the JPA specification in detail.