Recientemente he evaluado y elegido un marco de persistencia para un proyecto de Java y mis hallazgos son los siguientes:
Lo que estoy viendo es que el apoyo a favor de JDO es principalmente:
- puede usar fuentes de datos que no sean SQL, db4o, hbase, ldap, bigtable, couchdb (complementos para cassandra), etc.
- puede cambiar fácilmente de una fuente de datos sql a no sql y viceversa.
- sin objetos proxy y, por lo tanto, menos dolor con respecto a las implementaciones de hashcode () y equals ()
- Se necesita más POJO y, por lo tanto, menos soluciones alternativas
- admite más relaciones y tipos de campo
y el apoyo a favor de JPA es principalmente:
- más popular
- jdo está muerto
- no utiliza la mejora de bytecode
Estoy viendo muchas publicaciones pro-JPA de desarrolladores de JPA que claramente no han usado JDO / Datanucleus que ofrecen argumentos débiles para no usar JDO.
También estoy viendo muchas publicaciones de usuarios de JDO que han migrado a JDO y como resultado están mucho más felices.
Con respecto a que JPA es más popular, parece que esto se debe en parte al soporte del proveedor RDBMS en lugar de ser técnicamente superior. (A mí me suena como VHS / Betamax).
JDO y su implementación de referencia Datanucleus claramente no está muerto, como lo demuestra la adopción de Google para GAE y el desarrollo activo en el código fuente (http://sourceforge.net/projects/datanucleus/).
He visto una serie de quejas sobre JDO debido a la mejora del código de bytes, pero todavía no hay una explicación de por qué es malo.
De hecho, en un mundo cada vez más obsesionado por las soluciones NoSQL, JDO (y la implementación del núcleo de datos) parece una apuesta mucho más segura.
Recién comencé a usar JDO / Datanucleus y lo configuré para poder cambiar fácilmente entre usar db4o y mysql. Es útil para el desarrollo rápido usar db4o y no tener que preocuparse demasiado por el esquema de base de datos y luego, una vez que el esquema se estabilice para implementarse en una base de datos. También me siento seguro de que más adelante, podría implementar toda / parte de mi aplicación en GAE o aprovechar el almacenamiento distribuido / reducir el mapa a la hbase / hadoop / cassandra sin demasiada refactorización.
Encontré el obstáculo inicial de comenzar con Datanucleus un poco complicado: la documentación en el sitio web de datanucleus es un poco difícil de abordar; los tutoriales no son tan fáciles de seguir como me hubiera gustado. Dicho esto, la documentación más detallada sobre la API y el mapeo es muy buena una vez que pasa la curva de aprendizaje inicial.
La respuesta es, depende de lo que quieras. Prefiero tener un código más limpio, sin bloqueo del proveedor, más orientado a pojo, las opciones nosql y los versos más populares.
Si desea la sensación cálida y quisquillosa de que está haciendo lo mismo que la mayoría de los otros desarrolladores / ovejas, elija JPA / hibernate. Si desea liderar en su campo, pruebe JDO / Datanucleus y tome una decisión.