java - miembros - que es un metodo en programacion
Cuáles son las opciones livianas que uno tiene para persistir en los objetos Java (10)
¿Cuáles son las opciones livianas que uno tiene para persistir en los objetos Java?
Estoy buscando la solución más fácil posible. No quiero nada sofisticado, simplemente algo simple que funcione con objetos razonablemente simples (algunas colecciones, relaciones y herencia simple) y no traiga demasiada complejidad aparente (si la hay) a la base de código existente.
Las opciones que conozco incluyen Hibernate y frameworks como EMF pero suenan (y han sido experimentados) demasiado complejos y lentos. Me gustaría algo fuera de lo común, preferiblemente orientado a archivos más orientado a la base de datos, que simplemente puedo poner encima de mis simples objetos antiguos de Java.
Esta es una pregunta para principiantes, gracias de antemano por cualquier guía de aclaración de contexto similar a un tutorial.
Prueba la persistencia Simple XML http://simple.sourceforge.net . Es realmente simple y no requiere configuración. Simplemente tome sus POJOs existentes y anótelos, luego puede leerlos y escribirlos en un archivo. Los gráficos de objetos cíclicos son compatibles, así como todas las colecciones de Java. Se puede usar así.
Serializer serializer = new Persister();
MyObject object = serializer.read(MyObject.class, new File("file.xml));
y escribir es igual de fácil
serializer.write(myInstance, new File("file.xml"));
Este es un enfoque extremadamente ligero, no depende del estándar Java 1.5. En comparación con otros objetos para tecnologías XML como JAXB, XStream, Castor, que dependen de una gran cantidad de otros proyectos, Simple XML es muy liviano y eficiente en la memoria.
Si está buscando algo simple, también podría querer los datos en un formato que pueda leer (no un archivo binario o una base de datos). Si ese es el caso, debería consultar JAXB (Enlace XML de Java) que es parte de Java 6 y posterior. Hay otras tecnologías que pueden hacer esto mejor, como XML Beans, pero esta está integrada.
Echa un vistazo a esta página de la API de Java. Es bastante sencillo serializar y deserializar objetos Java.
http://java.sun.com/javase/6/docs/api/javax/xml/bind/JAXBContext.html
Básicamente, usas lo siguiente:
JAXBContext jc = JAXBContext.newInstance( "com.acme.foo" );
// unmarshal from foo.xml
Unmarshaller u = jc.createUnmarshaller();
FooObject fooObj = (FooObject)u.unmarshal( new File( "foo.xml" ) );
// marshal to System.out
Marshaller m = jc.createMarshaller();
m.marshal( fooObj, System.out );
Solo asegúrate de que tu FooObject tenga la anotación @XmlRootElement. Las propiedades de Java Bean se interpretan automáticamente, pero puede usar otras anotaciones para controlar cómo se ve el XML y modelar objetos más complejos.
db4o es una base de datos de objetos, por lo que no hay una configuración de esquema y se adapta bien a los cambios en la estructura de los objetos a lo largo del tiempo.
La opción más simple que conozco es usar Xstream para hacer un archivo xml de CUALQUIER evento de Java.
ObjectOutputStream y ObjectInputStream pueden hacer esto. Está integrado en Java y le permite serializar / deserializar objetos con bastante facilidad.
Lo malo de esto es que si cambias tus objetos no puedes importar objetos antiguos existentes. Tendrá que pensar en una forma de mantenerse compatible con los objetos existentes que podrían haberse guardado en la computadora de un usuario, como agregar un número de versión a sus clases y crear la capacidad de convertir objetos viejos en nuevos.
Más información aquí:
- http://java.sun.com/j2se/1.4.2/docs/api/java/io/ObjectOutputStream.html
- http://java.sun.com/j2se/1.4.2/docs/api/java/io/ObjectInputStream.html
EDITAR: También puede considerar agregar el siguiente atributo a todas sus clases desde el principio. Esto puede permitirle agregar atributos a las clases y aún así poder cargar archivos viejos de Object. En RMI-land esto funciona, pero no estoy seguro de los archivos. Sin embargo, nunca elimines los atributos.
static final long serialVersionUID = 1L;
Puede probar XStream, que es una biblioteca de código abierto. Todo lo que hace es convertir sus POJO en XML, que luego puede guardar en el disco. Es muy fácil de usar y requiere solo unas pocas líneas de código para usar.
Tengo que decir que la curva de aprendizaje inicial para Hibernate es relativamente superficial. Debería poder poner en marcha un sistema de prueba en menos de un día. Es solo cuando desea las funciones más avanzadas donde comienza a ser más pronunciada. Te recomendaría que definitivamente eches un vistazo, quiero decir, ¿qué día queda si no lo eliges?
Habiendo dicho eso, ¿has considerado serializar tus objetos directamente en el disco si solo quieres algo rápido y sucio?
Un enfoque simple es serializar (como en Serializable) sus objetos en el disco.
He utilizado PersistentObject extensivamente en el código de producción y me sirve bien.
Ver esta pregunta similar Alternativa ligera para hibernar . El marco más ligero que conozco es iBatis