Avaliei recentemente e escolhi uma estrutura de persistência para um projeto java e minhas descobertas são as seguintes:
O que estou vendo é que o apoio a favor da JDO é principalmente:
- você pode usar fontes de dados não-sql, db4o, hbase, ldap, bigtable, couchdb (plugins para cassandra) etc.
- você pode alternar facilmente de uma fonte de dados sql para não-sql e vice-versa.
- nenhum objeto proxy e, portanto, menos problemas com relação às implementações hashcode () e equals ()
- mais POJO e, portanto, menos soluções alternativas necessárias
- suporta mais tipos de relacionamento e campo
e o apoio a favor da JPA é principalmente:
- mais popular
- jdo está morto
- não usa aprimoramento de bytecode
Estou vendo muitas postagens pró-JPA de desenvolvedores de JPA que claramente não usaram o JDO / Datanucleus oferecendo argumentos fracos por não usar o JDO.
Também estou vendo muitas postagens de usuários do JDO que migraram para o JDO e são muito mais felizes como resultado.
Quanto à JPA ser mais popular, parece que isso se deve em parte ao suporte do fornecedor do RDBMS, em vez de ser tecnicamente superior. (Parece VHS / Betamax para mim).
O JDO e seu Datanucleus de implementação de referência claramente não estão mortos, como mostra a adoção do Google pelo GAE e desenvolvimento ativo no código-fonte (http://sourceforge.net/projects/datanucleus/).
Vi várias reclamações sobre o JDO devido ao aprimoramento do bytecode, mas ainda não há explicação para o motivo.
De fato, em um mundo que está ficando cada vez mais obcecado pelas soluções NoSQL, o JDO (e a implementação do datanucleus) parece uma aposta muito mais segura.
Acabei de começar a usar o JDO / Datanucleus e o configurei para que eu possa alternar facilmente entre o uso do db4o e o mysql. É útil para o desenvolvimento rápido usar o db4o e não precisar se preocupar muito com o esquema do banco de dados; depois, quando o esquema estiver estabilizado para implantar em um banco de dados. Também me sinto confiante de que, mais tarde, eu poderia implantar toda / parte do meu aplicativo no GAE ou aproveitar o armazenamento distribuído / reduzir o mapa a la hbase / hadoop / cassandra sem muita refatoração.
Achei um pouco complicado começar com o Datanucleus - a documentação no site do datanucleus é um pouco difícil de entender - os tutoriais não são tão fáceis de seguir quanto eu gostaria. Dito isto, a documentação mais detalhada sobre a API e o mapeamento é muito boa quando você passa pela curva de aprendizado inicial.
A resposta é: depende do que você deseja. Prefiro ter opções nosql de código mais limpo, sem fornecedor-lock-in, mais orientado a pojo e versos mais populares.
Se você deseja a sensação agitada de estar fazendo o mesmo que a maioria dos outros desenvolvedores / ovelhas, escolha JPA / hibernate. Se você quer liderar em seu campo, teste o JDO / Datanucleus e faça sua própria decisão.