Over a million developers have joined DZone.

DataNucleus AccessPlatform 2.0.0 Released

DZone's Guide to

DataNucleus AccessPlatform 2.0.0 Released

Free Resource

DataNucleus AccessPlatform 2.0.0 has just been released. AccessPlatform provides access to a range of datastores for Java applications using JDO/JPA API's, as well as providing a REST API. It is fully compliant with JDO1, JDO2, JDO2.1, JDO2.2, JPA1, as well as providing complete JDO2.3 support, and the majority of JPA2. It currently supports persistence to RDBMS, db4o, NeoDatis, LDAP, XML, Excel, ODF, JSON, Amazon S3, HBase (HADOOP), as well as Google AppEngine BigTable.

AccessPlatform additionally allows configuration of classes to be persisted using JDO annotations/XML/API or JPA annotations/XML providing access to both JDO and JPA persistence APIs regardless of which configuration method was chosen, offering flexibility not seen in any other persistence tool. Querying of the supported datastores can be performed using JDOQL, JPQL or SQL (dependent on the datastore). By making use of standardised APIs, the process of swapping persistence from one datastore to another is a simple URL change when specifying the datastore. AccessPlatform is made up of a series of OSGi compliant jars, and can be utilised in J2SE, J2EE, or OSGi container environments. By using OSGi together with Eclipse extension-points, DataNucleus is highly extensible so if you wanted to provide support for your own datastore then this would be a relatively simple procedure. AccessPlatform is licensed under the flexible Apache 2 license.

AccessPlatform 2.0 provides the following over and above what AccessPlatform 1.x provides :-

  • Significantly reworked internal API's to aid easier support for other datastores, and datastore features in the future
  • Support for persistence to Amazon S3
  • Support for persistence to HBase (HADOOP)
  • Support for persistence to Oracle Timesten
  • Support for persistence of JodaTime fields
  • Support for auto-generation of primary key classes during enhancement
  • Change default for non-transactional read/write to true for JDO
  • Support atomic non-transactional write persist/delete operations
  • Level 2 Cache is now enabled by default (soft)
  • Split query cache into 3 components : generic compilation, datastore compilation and query results. Added API for managing caching of query results (using JDO or JPA).
  • Cache : Support for pinning/unpinning of query results with Memcache/javax.cache
  • Support for JDO 2.3 Query cancel, and datastore read/write timeout
  • Support for explicit JPA extended persistence context
  • Support for JPA2 metamodel API
  • Support for bean validation with JPA2
  • Support for various new JPA2 JPQL keywords
  • Support for JPA2 1-N FK bidirectional relations
  • Support for JPA2 1-N collection/map of non-persistable objects.
  • Support for JPA2 TypedQuery
  • Support for update/delete-by-query for RDBMS (JPQL)
  • Rewritten RDBMS JPQL implementation building on generic query compiler. This is now the default JPQL implementation for RDBMS, and can be used with the query caching mechanism.
  • Rewritten RDBMS JDOQL implementation building on generic query compiler. This is not currently the default JDOQL implementation but is available to be used, and can be used with the query caching mechanism.
  • LDAP : Support for persistence of recursive object graph to hierarchical structure
  • Add support for PMF/EMF singleton pattern, via persistence property
  • Spatial : Many fixes to handling of JTS types.
  • Many bug fixes, and minor feature additions.

Documentation is available to view online (HTML) or available to download (HTML/PDF).

Limited free support for AccessPlatform is provided by way of our forum. Commercial support and consulting is also provided.

Thanks to NightLabs for their continued hosting, and to SourceForge for source code repositories. Finally, thanks to everyone who has helped in the development of AccessPlatform 2.0 over the last 10 months.


Opinions expressed by DZone contributors are their own.

{{ parent.title || parent.header.title}}

{{ parent.tldr }}

{{ parent.urlSource.name }}