2009-06-10 14 views
16

A menudo me encuentro necesitando una solución de persistencia rápida (en términos de código), liviana (en términos de tiempo de ejecución, dependencias) para simplemente un montón de objetos, principalmente entre reinicios de aplicaciones.Quick'n'dirty persistence

Normalmente recurro a algún hack de serialización de Java, pero me pregunto si hay algo mejor por ahí.

¿Has utilizado algo similar?


Para que quede claro, una solución basada en la APP es no ligera en mi libro, y una basada en JDBC es no rápida.


actualización: estoy a favor de los marcos de configuración a menos más de los que requieren configuración. Por ejemplo, la solución de serialización de Java requiere un implements Serializable y funciona. Una solución JPA, ya sea con anotaciones o con archivos de mapeo, sería demasiado pesada.

Actualización 2: Para que quede claro, no creo que la serialización sea un hack. En realidad, es un mecanismo muy poderoso, solo que lo estoy usando de forma harapienta cuando hago persistencia.

+0

+1 para la pregunta que podría necesitar pronto – KLE

Respuesta

10

prefiero XStream: Sólo un tarro necesario, rápido y muy fácil de usar

+0

Sí. XStream es muy simple de usar. – Nat

+0

Interesante- gracias –

+0

+1 de hecho – KLE

5

Probar iBatis. Lo he usado recientemente en un proyecto en el que quería una abstracción JDBC sin ORM/spring/container/etc.

Fácil de instalar, solo un par de pequeños frascos, y la configuración es muy flexible. No le dará la flexibilidad de hibernación, et. Al cambio-el-db-en-un-momento-aviso. Alabama. pero es bastante liviano

+0

Sobre la base de la actualización a la pregunta que tendría que decir que ir con xstream. –

3

Quizás db4o iba a funcionar para usted. No dejes que el nombre te engañe, puede ser incrustado. De acuerdo con its tutorial:

Object yourObject = ...; 

String fileName = ...; // where you wish to store the objects 
ObjectContainer container = Db4oEmbedded.openFile(Db4oEmbedded.newConfiguration(), fileName); 
try { 
    container.store(yourObject); 
} finally { 
    container.close(); 
} 
1

Se busca

solución persistencia

por el simple hecho un montón de objetos

Entonces, ¿por acumulación de Java en la serialización es un truco?

Si usted es flojo, tal vez la serialización con JSON lo ayudará.

+0

Serialización no es un truco. Mi forma de trabajar con eso es Así que estoy buscando cómo otros manejan este tipo de situación, sacando de su experiencia. –

+0

Cuando se habla de serialización, verifique la serialización de JBoss, que tiene varias ventajas técnicas sobre la impl de JDK. –

1

Prevayler suena como una buena opción para usted.

Se basa en la serialización de Java y es bastante rápido.

Más información en:

  • http://www.prevayler.org/
  • http://www.prevayler.org/wiki/
3

yo añadiría Jackson (json) y JAXB (xml); además de Xstream que ya fue mencionado. Jackson funciona bien con una sola advertencia: si tiene un almacenamiento polimórfico extenso, la deserialización puede ser complicada. Ahí es donde Xstream funciona mejor.

Y estoy de acuerdo en que la serialización de Java no es buena para persistencia - es buena para transferir objetos serializados, pero la persistencia tiene una dimensión temporal, y las clases cambian con el tiempo; y ahí es donde comienzan los problemas (estoy seguro de que lo sabes, pero dado que otros parecen desconcertados en cuanto a por qué la serialización de uso continuo es mala, pensé que lo mencionaría). También es mucho más fácil observar las cosas serializadas usando formatos de texto (json, xml) que las binarias. Y finalmente, si necesita eficiencia de espacio, la compresión (como gzip) funciona de maravilla, el tamaño de los datos después de la compresión tiende a ser idéntico, independientemente del formato (suponiendo la misma cantidad de información)

+0

Olvidé mencionar: Jackson no requiere configuración alguna en la mayoría de los casos. Puede usar anotaciones si lo desea, configurar, etc. pero en su mayor parte es cero-configuración similar a cómo funciona XStream. – StaxMan

1

Echa un vistazo BeanKeeper - ese es el más rápido, más sucio y ORM/persistencia más fácil que he visto. Ciertamente supera a iBatis, eso es seguro.

Store myStore = new Store((DataSource) ctx.lookup("jdbc/myds")); 

package com.acme.bookstore; 
public class Book 
{ 
    private String title; 
    private Author author; 

    ...setters, getters... 
} 

package com.acme.bookstore; 
public class Author 
{ 
    private String firstName; 
    private String lastName; 
    private Date birthDate; 

    ...setters, getters... 
} 

store.save(book); 
2
  1. Para colecciones de objetos a tratar JDBM (un frasco). Te da un mapa que está almacenado en el disco.

    DB db = new DBMaker(fileName).build();

    Map<String,MyObject> map = db.createTreeMap("mapName")

    map.put("obj1", myObject1);

  2. Para config JAXB es muy simple y no tiene dependencias. Almacena en XML.

    JAXB.marshall(myObject, new File("config.xml")); // saved. that's it

Cuestiones relacionadas