tutorial - ¿Cuál es la mejor manera de conservar datos en una aplicación de escritorio Java?
netbeans (6)
Tengo un gran árbol de objetos Java en mi aplicación de escritorio y estoy tratando de decidir sobre la mejor manera de persistir como un archivo en el sistema de archivos.
Algunos pensamientos que tuve fueron:
Haga rodar mi propio serializador usando DataOutputStream : Esto me daría el mayor control de lo que había en el archivo, pero a costa de micro administrarlo.
Serialización recta y antigua utilizando ObjectOutputStream y sus diversas clases relacionadas : aunque no me han vendido, los datos me parecen frágiles. El cambio de la estructura de cualquier objeto rompe las instancias serializadas de la misma. Así que estoy encerrado en lo que parece ser una horrible pesadilla de control de versiones.
Serialización XML : no es tan frágil, pero es mucho más lenta que la serialización directa. Se puede transformar fuera de mi programa.
JavaDB : lo consideré porque me siento cómodo escribiendo aplicaciones JDBC. La diferencia aquí es que la instancia de la base de datos solo persistiría mientras se estaba abriendo o guardando el archivo. No es bonito, pero ... se presta para migrar a una arquitectura de servidor central si surge la necesidad más tarde e introduce la posibilidad de cuestionar el modelo de datos de una manera más simple.
Tengo curiosidad por ver lo que otras personas piensan. Y espero haber perdido un enfoque obvio y más simple que los anteriores.
Aquí hay algunas opciones más seleccionadas de las respuestas a continuación:
- Una base de datos de objetos : tiene una infraestructura significativamente menor que ORM y se realiza con mayor rapidez que un enfoque XML. gracias aku
Eche un vistazo a Hibernate como una forma más sencilla de interactuar con una base de datos.
En mi experiencia, probablemente sea mejor usar una base de datos integrada. SQL, aunque es menos que perfecto, suele ser mucho más fácil que diseñar un formato de archivo que funcione bien y sea confiable.
No he usado JavaDB, pero he tenido buena suerte con H2 y SQLite . SQLite es una biblioteca C lo que significa un poco más de trabajo en términos de implementación. Sin embargo, tiene la ventaja de almacenar toda la base de datos en una única biblioteca multiplataforma. Básicamente, es un formato de archivo genérico preempaquetado. SQLite ha sido tan útil que incluso he comenzado a usarlo en lugar de archivos de texto en scripts.
Tenga cuidado al usar Hibernate si está trabajando con un pequeño problema de persistencia. Agrega mucha complejidad y gastos generales de biblioteca. Hibernate es realmente agradable si está trabajando con una gran cantidad de tablas, pero probablemente será engorroso si solo necesita algunas tablas.
Me gustaría ir a la opción final de JavaDB (distribución de Derby de Sun) y usar una capa relacional de objetos como Hibernate o iBatis . El uso de los primeros tres enfoques significa que va a dedicar más tiempo a la creación de un motor de base de datos que al desarrollo de características de la aplicación.
XStream de codehaus.org
Serialización / deserialización XML en gran parte sin codificación. Puedes usar anotaciones para ajustarlo. Trabajando bien en dos proyectos donde trabajo.
Vea la presentación de mi grupo de usuarios en http://cjugaustralia.org/?p=61
db4objects podría ser la mejor opción
Creo que depende de lo que necesites Veamos las opciones:
1) Descartado imediatelly! Ni siquiera voy a justificar. :)
2) Si necesita una persistencia simple, rápida y de un solo método, apéguese a ella. ¡Persistirá el gráfico de datos completo tal como está! Tenga cuidado de cuánto tiempo va a mantener los objetos persistentes. Como usted mismo señaló, el control de versiones puede ser un problema.
3) Más lento que (2), necesita código adicional y puede ser editado por el usuario. Solo lo usaría, se supone que los datos deben ser utilizados por un cliente en otro idioma.
4) Si necesita consultar sus datos de todos modos, quédese con la solución DB.
Bueno, creo que ya respondiste tu pregunta :)