Quiero desarrollar mi proyecto en Google App Engine con Struts2. Para la base de datos tengo dos opciones JPA y JDO. ¿Podrían sugerirme por favor? Ambos son nuevos para mí y necesito aprenderlos. Así que me centraré en uno después de sus respuestas.
Gracias.
java
google-app-engine
jpa
jdo
Tahir Akram
fuente
fuente
El grupo de Google GAE / J tiene varias publicaciones sobre esto mismo. Hacía una búsqueda allí y miraba las opiniones de la gente. Recibirá un mensaje muy diferente a las opiniones expresadas anteriormente. También céntrese en el hecho de que BigTable no es un RDBMS. Utilice la herramienta adecuada para el trabajo
fuente
Acabo de ver esta comparación entre JPA y JDO por los propios DataNucleus: - http://www.datanucleus.org/products/accessplatform_2_1/jdo_jpa_faq.html Una revelación .
fuente
Soy un usuario feliz de JDO. Sigan con el buen trabajo chicos.
fuente
Las personas que afirman que JDO está muerto no carecen de mérito. Esto es lo que leí en el libro Pro EJB 3 Java Persistence API: "Poco después, Sun anunció que JDO se reduciría al modo de mantenimiento de especificación y que la API de Java Persistence se basaría tanto en JDO como en los otros proveedores de persistencia y se convertiría en el único soporte compatible estándar en el futuro ". El autor Mike Keith es el líder de co-especificación en EJB3. Por supuesto, es un gran partidario de JPA, pero dudo que sea lo suficientemente parcial como para mentir.
Es cierto que cuando se publicó el libro, la mayoría de los principales proveedores se unieron detrás de JPA en lugar de JDO, aunque JDO tiene características técnicas más avanzadas que JPA. No es sorprendente porque los grandes actores en el mundo de EE, como IBM / Oracle, también son grandes proveedores de RDBMS. Más clientes utilizan RDMBS que no RDMBS en sus proyectos. JDO estaba muriendo hasta que GAE le dio un gran impulso. Tiene sentido porque el almacén de datos GAE no es una base de datos relacional. Algunas características de JPA no funcionan con bigtable, como consultas de agregación, consultas de unión, relaciones de propiedad de varios a varios. Por cierto, GAE es compatible con JDO 2.3 mientras que solo es compatible con JPA 1.0. Recomendaré JDO si GAE es su plataforma de nube de destino.
fuente
Para el registro, es Google App Engine (GAE), por lo que jugamos con las reglas de Google, no con las reglas de Oracle / Sun.
Debajo, JPA no es adecuado para GAE, es inestable y no funciona como se esperaba. Tampoco Google está dispuesto a apoyarlo, pero es lo mínimo.
Y por otra parte, JDO es bastante estable en GAE y está (en cierta medida) bien documentado por Google.
Sin embargo, Google no recomienda ninguno de ellos.
http://code.google.com/appengine/docs/java/datastore/overview.html
La API de bajo nivel brindará el mejor rendimiento y GAE se trata de rendimiento.
http://gaejava.appspot.com/
Por ejemplo, agregue 10 entidades
fuente
En la carrera entre JDO vs JPA solo puedo estar de acuerdo con los carteles de datanucleus.
En primer lugar, y también lo más importante, los carteles de datanucleus saben lo que están haciendo. Después de todo, están desarrollando una biblioteca persistente y están familiarizados con modelos de datos distintos del relacional, por ejemplo, Big Table. Estoy seguro de que si un desarrollador para hibernate estuviera aquí, diría: "todas nuestras suposiciones al construir nuestras bibliotecas centrales están estrechamente acopladas al modelo relacional, hibernate no está optimizado para GAE".
En segundo lugar, JPA es, sin duda, de uso más generalizado, ser parte de la pila oficial de Java EE ayuda un poco, pero eso no significa necesariamente que sea mejor. De hecho, JDO, si lees sobre él, corresponde a un nivel más alto de abstracción que JPA. JPA está estrechamente acoplado al modelo de datos RDBMS.
Desde el punto de vista de la programación, usar las API de JDO es una opción mucho mejor, porque conceptualmente está comprometiendo mucho menos. Teóricamente, puede cambiar a cualquier modelo de datos que desee, siempre que el proveedor que utilice sea compatible con la base de datos subyacente. (En la práctica, rara vez logra un nivel tan alto de transparencia, porque se encontrará configurando sus claves primarias en el objeto de GAE y se vinculará a un proveedor de base de datos específico, por ejemplo, Google). Sin embargo, aún será más fácil migrar.
En tercer lugar, puede usar Hibernate, Eclipse Link e incluso Spring con GAE. Google parece haber hecho un gran esfuerzo para permitirle utilizar los marcos en los que está acostumbrado a crear sus aplicaciones. Pero lo que la gente se da cuenta cuando crea sus aplicaciones GAE como si se ejecutaran en RDBMS es que son lentas. La primavera en GAE es LENTA. Puede buscar en Google videos de IO de Google sobre este tema para ver que es cierto.
Además, adherirse a las normas es algo muy sensato, en principio lo aplaudo. Por otro lado, el hecho de que JPA sea parte de la pila Java EE hace que la gente, a veces, pierda la noción de opciones. Tenga en cuenta, si lo desea, que Java Server Faces también forma parte de la pila Java EE. Y es una solución increíblemente ordenada para el desarrollo de GUI web. Pero al final, ¿por qué la gente, las personas más inteligentes si puedo decirlo, se desvían de este estándar y usan GWT en su lugar?
En todo esto, tengo que decir que hay algo muy importante para JPA. Eso es Guice y su conveniente soporte para JPA. Parece que Google no fue tan inteligente como de costumbre en este punto y están contentos, por ahora, de no ser compatible con JDO. Sigo pensando que pueden permitírselo, y eventualmente Guice también engullirá a JDO ... o tal vez no.
fuente
Vaya JDO. Incluso si no tienes experiencia en él, no es difícil de aprender, ¡y tendrás una nueva habilidad en tu haber!
fuente
Lo que creo que es terrible de usar
JDO
en el momento de escribir esto es que el único proveedor de implementación esDatanucleus
y los inconvenientes de eso es la falta de competencia que conduce a numerosos problemas como:extensions
StackOverflow
Siempre espero que alguien comience a implementar la
JDO
especificación por sí mismo, tal vez entonces ofrezcan algo más y, con suerte, más atención gratuita a la comunidad y no siempre se preocupen por que se les pague por el apoyo, sin decir que losDatanucleus
autores solo se preocupan por el apoyo comercial. , pero solo digo.Personalmente considero que los
Datanucleus
autores no tienen obligación alguna con ellosDatanucleus
mismos ni con su comunidad. Pueden abandonar todo el proyecto en cualquier momento y nadie puede juzgarlos por ello, es su esfuerzo y su propiedad. Pero debes saber en lo que te estás metiendo. Verá, cuando uno de nosotros los desarrolladores busca un marco para usar, no puede castigar ni ordenar al autor del marco, pero por otro lado, ¡necesita que su trabajo esté listo! Si tuvieras tiempo para escribir ese marco, ¿por qué buscarías uno en primer lugar?Por otro lado, en
JDO
sí mismo tiene algunas complicaciones como el ciclo de vida de los objetos y cosas que no son muy intuitivas y comunes (creo).Editar: Ahora sé que también
JPA
aplica el mecanismo del ciclo de vida del objeto, por lo que parece inevitable tratar con los estados del ciclo de vida de las entidades persistentes si desea utilizar una API ORM estándar (es decir,JPA
oJDO
)Lo que más me gusta
JDO
es la capacidad de trabajar con CUALQUIER sistema de gestión de bases de datos sin un esfuerzo considerable.fuente
GAE / J está programado para agregar MYSQL antes de fin de año.
fuente
JPA es el camino a seguir, ya que parece ser impulsado como una API estandarizada y recientemente ha ganado impulso en EJB3.0 .. JDO parece haber perdido el impulso.
fuente
¡Ninguno!
Usa Objectify, porque es más barato (usa menos recursos) y es más rápido. FYI: http://paulonjava.blogspot.mx/2010/12/tuning-google-appengine.html
Objectify le permite conservar, recuperar, eliminar y consultar sus propios objetos escritos.
@Entity class Car { @Id String vin; // Can be Long, long, or String String color; } ofy().save().entity(new Car("123123", "red")).now(); Car c = ofy().load().type(Car.class).id("123123").now(); ofy().delete().entity(c);
fuente