DataNucleus

Présentation d’un ORM qui monte.

DataNucleus (anciennement JPOX) http://www.datanucleus.org est un projet open source de la société éponyme.
C’est un ORM au même titre qu’Hibernate ou Toplink, en simplifiant on peut résumer en disant qu’Hibernate est l’implémentation de fait de JPA et que DataNucleus est l’implémentation de référence de la norme JDO.
Détails
Version en cours : 1.1
Normes Java supportées : JDO2.3, JPA1, JTA.
Licence : Apache License 2.0
Support des principaux SGBD du marché.
Support JDK5 et des annotations (JPA et JDO).
Support Eclipse, Maven, ANT, intégration native avec Spring

Si DataNucleus reviens sur le devant de la scène c’est essentiellement car il est utilisé par la plate forme Google Application Engine (GAE) pour la persistance. La norme JDO étant l’implémentation mise en avant mais JPA est possible (mais avec des restrictions sur l’implémentation imposée par Google).
Google ayant visiblement choisit JDO dans la bataille des normes de persistance un peu a contre-pied de la tendance actuelle qui plébiscite JPA. Ce qui peut se comprendre par la prise en compte des fichiers pour la persistance dans la norme JDO (et donc un rapprochement plus facile avec Hadoop).

Principales différences avec Hibernate (sans faire un débat JDO versus JPA)

En plus du support des SGBD comme système de persistance : LDAP, fichiers, support format JSON, documents Excel, XML, format OpenDocument (format ouvert de données pour les applications bureautiques inspiré d’OpenOffice).

Implémentation d’une interface d’accès de type REST aux entités persistées (par simple configuration).
On peut créer, modifier, requêter des entités avec des méthodes REST automatiquement générées (c’est un peu gadget pour une utilisation en production mais pourquoi pas pour des exports de masse).
Mais la principale différence est structurelle.
Là où Hibernate utilise la réflexion java et les proxy, DataNucleus préfère l’amélioration du byte code (le code nécessaire au fonctionnement de DataNucleus est généré et ajouté au byte code).
Ainsi les performances à l’exécution sont améliorées ainsi qu’une meilleure gestion du lazy loading (le type des classes persistées est toujours connu), etc.
DataNucleus supporte nativement JMX ce qui facilite la supervision.
Evidemment il y a aussi des défauts :

  • Nécessité d’une phase d’enrichissement du byte Code
  • Communauté moins grande qu’Hibernate

Autres différences

Langage de requête : DataNucleus repose sur JDOQL.
Hibernate API Criteria : Pas d’équivalent dans DataNucleus.
Hibernate Shard (partitionnement horizontal) : Pas d’équivalent dans DataNucleus.
Hibernate Validator : Pas d’équivalent dans DataNucleus mais compensé avec l’arrivée de la JSR 303 (validation de contraintes sur le bean par annotations dans le modèle, spécification basée sur Validator).
Hibernate Search : Pas d’équivalent dans DataNucleus.
Plus d’infos : www.datanucleus.org/products/accessplatform_1_1/datanucleus-accessplatform.pdf