Di recente ho valutato e scelto un framework di persistenza per un progetto java e i miei risultati sono i seguenti:
Quello che vedo è che il supporto a favore di JDO è principalmente:
- puoi usare fonti di dati non sql, db4o, hbase, ldap, bigtable, couchdb (plugin per cassandra) ecc.
- puoi passare facilmente da un'origine dati sql a non sql e viceversa.
- nessun oggetto proxy e quindi meno problemi per quanto riguarda le implementazioni di hashcode () e equals ()
- più POJO e quindi meno soluzioni alternative necessarie
- supporta più relazioni e tipi di campi
e il supporto a favore dell'APP è principalmente:
- più popolare
- jdo è morto
- non utilizza il miglioramento del bytecode
Sto vedendo molti post pro-JPA di sviluppatori JPA che chiaramente non hanno usato JDO / Datanucleus offrendo argomenti deboli per non usare JDO.
Inoltre sto vedendo molti post degli utenti JDO che sono migrati a JDO e di conseguenza sono molto più felici.
Per quanto riguarda il fatto che JPA sia più popolare, sembra che ciò sia dovuto in parte al supporto del fornitore RDBMS piuttosto che a un livello tecnicamente superiore. (A me sembra VHS / Betamax).
JDO e la sua implementazione di riferimento Datanucleus non è chiaramente morto, come dimostra l'adozione da parte di Google di GAE e lo sviluppo attivo sul codice sorgente (http://sourceforge.net/projects/datanucleus/).
Ho visto una serie di lamentele riguardo a JDO a causa del miglioramento del bytecode, ma non ho ancora spiegato perché sia male.
In effetti, in un mondo che sta diventando sempre più ossessionato dalle soluzioni NoSQL, JDO (e l'implementazione del datanucleus) sembra una scommessa molto più sicura.
Ho appena iniziato a utilizzare JDO / Datanucleus e l'ho configurato in modo da poter passare facilmente dall'uso di db4o a mysql. È utile per lo sviluppo rapido utilizzare db4o e non doversi preoccupare troppo dello schema DB e quindi, una volta stabilizzato lo schema da distribuire in un database. Sono anche fiducioso che in seguito, potrei distribuire tutta / parte della mia applicazione a GAE o sfruttare l'archiviazione distribuita / ridurre la mappa a livello di base / hadoop / cassandra senza troppo refactoring.
Ho trovato l'ostacolo iniziale di iniziare con Datanucleus un po 'complicato - La documentazione sul sito Web di Datanucleus è un po' difficile da affrontare - i tutorial non sono facili da seguire come mi sarebbe piaciuto. Detto questo, la documentazione più dettagliata sull'API e sulla mappatura è molto buona una volta superata la curva di apprendimento iniziale.
La risposta è, dipende da cosa vuoi. Preferirei avere codice più pulito, no-vendor-lock-in, più orientato al pojo, opzioni nosql versi più popolari.
Se vuoi la calda sensazione che stai facendo lo stesso della maggior parte degli altri sviluppatori / pecore, scegli JPA / ibernazione. Se vuoi guidare nel tuo campo, prova JDO / Datanucleus e decidi.