Ich habe kürzlich ein Persistenz-Framework für ein Java-Projekt evaluiert und ausgewählt. Meine Ergebnisse lauten wie folgt:
Was ich sehe ist, dass die Unterstützung für JDO in erster Linie ist:
- Sie können Nicht-SQL-Datenquellen, db4o, hbase, ldap, bigtable, couchdb (Plugins für Cassandra) usw. verwenden.
- Sie können problemlos von einer SQL- zu einer Nicht-SQL-Datenquelle und umgekehrt wechseln.
- Keine Proxy-Objekte und daher weniger Schmerzen in Bezug auf Hashcode () - und Equals () - Implementierungen
- Mehr POJO und damit weniger Problemumgehungen erforderlich
- unterstützt mehr Beziehungs- und Feldtypen
und die Unterstützung zugunsten von JPA ist in erster Linie:
- bekannter
- jdo ist tot
- verwendet keine Bytecode-Verbesserung
Ich sehe viele Pro-JPA-Posts von JPA-Entwicklern, die JDO / Datanucleus eindeutig nicht verwendet haben und schwache Argumente dafür liefern, JDO nicht zu verwenden.
Ich sehe auch viele Beiträge von JDO-Benutzern, die auf JDO migriert sind und daher viel glücklicher sind.
In Bezug auf die Popularität von JPA scheint dies teilweise auf die Unterstützung von RDBMS-Anbietern zurückzuführen zu sein, anstatt technisch überlegen zu sein. (Klingt für mich nach VHS / Betamax).
JDO und seine Referenzimplementierung Datanucleus ist eindeutig nicht tot, wie die Übernahme durch Google für GAE und die aktive Entwicklung des Quellcodes (http://sourceforge.net/projects/datanucleus/) zeigt.
Ich habe eine Reihe von Beschwerden über JDO aufgrund der Bytecode-Verbesserung gesehen, aber noch keine Erklärung dafür, warum es schlecht ist.
In einer Welt, die immer mehr von NoSQL-Lösungen besessen ist, scheint JDO (und die Implementierung des Datenkerns) eine viel sicherere Wahl zu sein.
Ich habe gerade angefangen, JDO / Datanucleus zu verwenden, und habe es so eingerichtet, dass ich problemlos zwischen der Verwendung von db4o und mysql wechseln kann. Für eine schnelle Entwicklung ist es hilfreich, db4o zu verwenden und sich nicht zu viele Gedanken über das DB-Schema zu machen. Sobald das Schema stabilisiert ist, kann es in einer Datenbank bereitgestellt werden. Ich bin auch zuversichtlich, dass ich später meine gesamte / einen Teil meiner Anwendung für GAE bereitstellen oder verteilten Speicher nutzen / Karten reduzieren / a hbase / hadoop / cassandra reduzieren kann, ohne zu viel Refactoring.
Ich fand die anfängliche Hürde beim Einstieg in Datanucleus etwas schwierig - Die Dokumentation auf der Datanucleus-Website ist etwas schwierig - die Tutorials sind nicht so einfach zu befolgen, wie ich es mir gewünscht hätte. Trotzdem ist die detailliertere Dokumentation der API und des Mappings sehr gut, sobald Sie die anfängliche Lernkurve überwunden haben.
Die Antwort ist, es kommt darauf an, was Sie wollen. Ich hätte lieber saubereren Code, No-Vendor-Lock-In, Pojo-orientierter, nosql-Optionen versus populärere.
Wenn Sie das warme, pingelige Gefühl haben möchten, dass Sie das Gleiche tun wie die meisten anderen Entwickler / Schafe, wählen Sie JPA / Ruhezustand. Wenn Sie auf Ihrem Gebiet führend sein möchten, testen Sie JDO / Datanucleus und entscheiden Sie sich selbst.