Ahora tengo un programa de Java cuyas clases son actualmente POJOs y se almacenan en memoria volátil. Estos deben persistir. Según entiendo, dos opciones populares son JDO y Java Persistence API. Para alguien que sabe poco sobre SQL, Torque, etc., ¿cuál es la forma más fácil de agregar persistencia a los datos de mi programa?¿Cuál es la forma más fácil de persistir en los objetos java?
Respuesta
La forma tradicional de serializar al sistema de archivos es usar Java Serialisation. Sin embargo, debe implementar Serializable en todas partes.
Una solución más simple es serializar a XML (y luego volcar al sistema de archivos) usando XStream. No necesita implementar ninguna interfaz, y la mayoría de las cosas se serializan y deserializan sin más intervención. Puede personalizar aún más la serialización si es necesario. El único problema que he tenido es serialising una clase interna sin serialising intencionalmente la clase externa que contiene (esto es debido a la implícita referencia this
)
Serialice los objetos al sistema de archivos si no conoce SQL o bases de datos relacionales.
Deberá aprender JDBC para usar JDO, JPA, Hibernate o cualquier otra cosa. A menos que tus POJO sean terriblemente complejos, te recomiendo que comiences allí y sigas subiendo.
Asegúrese de conocer la normalización y el diseño adecuado de los índices.
Para usar JDO, JPA o Hibernate, claramente no necesita conocer JDBC ya que ese es el punto de esas API.Utilizan JDBC bajo las cubiertas cuando persisten en RDBMS, por lo que la complejidad está oculta para usted – DataNucleus
No estoy de acuerdo, no es aconsejable usarlos sin conocer JDBC. La complejidad está oculta, pero es una abstracción permeable. – duffymo
No es una abstracción que gotea con JDO, aunque ciertamente JPA e Hibernate están estrechamente vinculados a JDBC. Depende de qué API el encuestador decida ir – DataNucleus
Parece que es posible que desee continuar en una base de datos. Sin embargo, para evitar las complejidades de un DB, una solución simple para persistentes POJOs al sistema de archivos es serializarlos en un documento XML. La API de Java 1.6 incluye el marco JAXB que se encuentra en el paquete javax.xml.bind. Para utilizar JAXB que Anotación esencialmente su POJO y crear métodos marshal y unmarshal así:
@XmlRootElement(name="Foo")
public class Foo {
@XmlElement(name="Bar")
public int mBar;
public static void marshal(Foo foo, OutputStream out) IOException {
try {
JAXBContext jc = JAXBContext.newInstance(Foo.class);
Marshaller marshaller = jc.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.marshal(qaConfig, out);
}
catch (JAXBException ex) {
throw new IOException(ex);
}
finally {
out.close();
}
}
public static Foo unmarshal(InputStream in) throws IOException {
try {
JAXBContext jc = JAXBContext.newInstance(Foo.class);
Unmarshaller unmarshaller = jc.createUnmarshaller();
return (Foo)unmarshaller.unmarshal(in);
}
catch (JAXBException ex) {
throw new IOException(ex);
}
finally {
in.close();
}
}
}
Digamos que usted persiste una instancia de Foo donde mbar es de 42 a continuación, esta solución podría producir un archivo XML de este modo:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Foo>
<Bar>42</Bar>
</Foo>
DataNucleus oculta todo el marshalling y unmarshalling del usuario y simplemente agrega anotaciones JDO o JPA a las clases que desean persistir. Menos código. Menos para manejar – DataNucleus
La forma más sencilla que encontré hasta ahora es db4o:
ObjectContainer db = Db4o.openFile(location);
db.store(myObject);
List<MyObject> myObjects = db.query(MyObject.class);
Además, hay maneras realmente agradables de consultar de otras maneras.
Tristemente: en octubre de 2014, Actian se negó a continuar buscando y promocionando activamente la oferta de productos comerciales db4o para nuevos clientes. http://supportservices.actian.com/versant/default.html – Jonathan
Si la serialización es una opción, considere usar una API de prevalencia como prevalayer o Space4J (más reciente). Acerca de la prevalencia de objetos:
La prevalencia es un concepto iniciado por Klaus Wuestefeld sobre cómo almacenar datos de una manera orientada a objetos reales, utilizando solo instantáneas de memoria, registros de transacciones y serialización.
Consulte this article para obtener más información sobre este tema (más en Google).
Space4j también ofrece clústeres e indexaciones transparentes. – TraderJoeChicago
DataNucleus es la forma más fácil, ya que proporciona las API JDO y JPA para la persistencia en prácticamente cualquier tipo de almacén de datos que siempre desee. ¿Por qué escribir todo ese código JAXB en una de las otras respuestas cuando DataNucleus lo hace por usted? Todo respaldado por los estándares de Java
- 1. ¿Cuál es la forma más fácil de hacer 'es' en Java?
- 2. C#: ¿cuál es la forma más fácil de restar tiempo?
- 3. ¿Cuál es la forma más fácil de animar una línea?
- 4. ¿Cuál es la forma más fácil de conservar datos en una aplicación de iPhone?
- 5. ¿Cuál es la forma más fácil de establecer mensajes de datos binarios personalizados en Java?
- 6. ¿Cuál es la forma más fácil de analizar un archivo INI en Java?
- 7. ¿Cuál es la forma más fácil de implementar Scala PartialFunction en Java?
- 8. ¿Cuál es la forma más fácil de usar el código fuente C en una aplicación Java?
- 9. ¿Cuál es la forma más fácil de hacer la negación en los desencadenantes?
- 10. ¿Cuál es la forma más fácil de paralelizar una tarea en Java?
- 11. ¿Cuál es la forma más fácil de llenar los vacíos en una lista de números?
- 12. ¿Cuál es la forma más fácil de eliminar todos los atributos de un XML en C#?
- 13. ¿Cuál es la forma más fácil de generar xml en C++?
- 14. ¿La forma más fácil de crear una GUI en Java?
- 15. ¿Cuál es la forma más fácil de guardar una consulta LINQ para su uso posterior?
- 16. Cuál es la forma más fácil de convertir latitud y longitud a los valores dobles
- 17. ¿Cuál es la forma más fácil para que una aplicación Java reciba el correo electrónico entrante?
- 18. ¿Cuál es la mejor/más rápida/la forma más fácil de contraer todos los proyectos en Visual Studio?
- 19. ¿Cuál es la forma más fácil de crear un sitio web de reserva de citas?
- 20. ¿Cuál es la forma más fácil de probar la membresía de clase en coffeescript?
- 21. ¿Cuál es la forma más fácil o más rápida de hacer que CSS represente lo mismo en todos los navegadores?
- 22. Android Eclipse: ¿Cuál es la forma más fácil de duplicar una clase?
- 23. ¿Cuál es la forma más fácil de extraer datos de un PDF?
- 24. ¿Cuál es la forma más fácil de convertir la lista con str en list con int?
- 25. ¿Cuál es la forma más fácil de agregar atajos de teclado globales en Windows?
- 26. ¿Cuál es la forma más fácil de obtener datos espaciales de sql 08 en un mapa?
- 27. ¿Cuál es la forma más fácil/más barata de crear una base de datos SQL basada en la nube?
- 28. ¿Cuál es la forma más fácil de descomponer archivos XAML grandes en mi aplicación?
- 29. ¿Cuál es la forma más fácil de imprimir texto en pantalla en OpenGL?
- 30. ¿Cuál es la forma más fácil de conservar mapas/estructuras en Clojure?
Para todo lo que es (no) sagrado, mantente lo más lejos posible de Torque. – ChssPly76