J'ai récemment évalué et choisi un cadre de persistance pour un projet java et mes conclusions sont les suivantes:
Ce que je constate, c'est que le soutien en faveur de JDO est avant tout:
- vous pouvez utiliser des sources de données non-sql, db4o, hbase, ldap, bigtable, couchdb (plugins pour cassandra) etc.
- vous pouvez facilement passer d'une source de données sql à non-sql et vice-versa.
- pas d'objets proxy et donc moins de douleur en ce qui concerne les implémentations de hashcode () et equals ()
- plus de POJO et donc moins de solutions de contournement requises
- prend en charge plus de types de relations et de champs
et le soutien en faveur de JPA est principalement:
- plus populaire
- jdo est mort
- n'utilise pas d'amélioration du bytecode
Je vois beaucoup de messages pro-JPA de développeurs JPA qui n'ont clairement pas utilisé JDO / Datanucleus offrant des arguments faibles pour ne pas utiliser JDO.
Je vois également beaucoup de messages d'utilisateurs de JDO qui ont migré vers JDO et qui en sont beaucoup plus heureux.
En ce qui concerne le fait que JPA soit plus populaire, il semble que cela soit dû en partie au support du fournisseur de SGBDR plutôt qu'à sa supériorité technique. (Cela ressemble à VHS / Betamax pour moi).
JDO et son implémentation de référence Datanucleus n'est clairement pas mort, comme le montre son adoption par Google pour GAE et son développement actif sur le code source (http://sourceforge.net/projects/datanucleus/).
J'ai vu un certain nombre de plaintes à propos de JDO en raison de l'amélioration du bytecode, mais aucune explication pour le moment ne explique pourquoi c'est mauvais.
En fait, dans un monde de plus en plus obsédé par les solutions NoSQL, JDO (et l'implémentation datanucleus) semble un pari beaucoup plus sûr.
Je viens de commencer à utiliser JDO / Datanucleus et je l'ai configuré pour que je puisse basculer facilement entre l'utilisation de db4o et mysql. Il est utile pour un développement rapide d'utiliser db4o et de ne pas avoir à se soucier trop du schéma de base de données, puis, une fois le schéma stabilisé, de se déployer sur une base de données. Je suis également convaincu que plus tard, je pourrais déployer tout / partie de mon application sur GAE ou profiter du stockage distribué / réduire la carte à la hbase / hadoop / cassandra sans trop de refactorisation.
J'ai trouvé l'obstacle initial pour démarrer avec Datanucleus un peu délicat - La documentation sur le site Web de datanucleus est un peu difficile à saisir - les tutoriels ne sont pas aussi faciles à suivre que je l'aurais souhaité. Cela dit, la documentation plus détaillée sur l'API et la cartographie est très bonne une fois que vous avez dépassé la courbe d'apprentissage initiale.
La réponse est que cela dépend de ce que vous voulez. Je préférerais avoir un code plus propre, pas de verrouillage du fournisseur, plus orienté vers pojo, des vers d'options nosql plus populaires.
Si vous voulez avoir le sentiment chaleureux et difficile de faire la même chose que la majorité des autres développeurs / moutons, choisissez JPA / hibernate. Si vous voulez être leader dans votre domaine, testez JDO / Datanucleus et faites-vous votre propre opinion.