Ответ 1
Я предпочитаю XStream: нужен только один Jar, быстрый и очень простой в использовании
Я часто нахожусь в быстрой (с точки зрения кода), легком (в терминах времени выполнения, зависимостях) решении о сохранении просто связки объектов, в основном между перезапусками приложений.
Обычно я прибегаю к хакеру сериализации Java, но мне интересно, есть ли там что-то лучше.
Вы использовали что-то подобное?
Чтобы было ясно, решение на основе JPA не является легким в моей книге, а JDBC-based не быстро.
Обновление. Я предпочитаю создание конфигураций без ограничений по сравнению с теми, которые требуют конфигурации. Например, для решения сериализации Java требуется implements Serializable
, и он работает. Решение JPA, либо с аннотациями, либо с картографическими файлами, было бы слишком тяжелым.
Обновление 2. Просто, чтобы понять это, я не думаю, что сериализация - это взлом. Это действительно очень мощный механизм, просто я использую его в хакерском стиле, делая упорство.
Я предпочитаю XStream: нужен только один Jar, быстрый и очень простой в использовании
Попробуйте iBatis. Я использовал его недавно в проекте, где мне нужна абстракция JDBC без ORM/spring/container/etc.
Простота настройки, только несколько небольших банок, а конфигурация очень гибкая. Это не даст вам изменения гибкости hibernate и т.д. и др. но он довольно легкий.
Возможно, db4o будет работать для вас. Не позволяйте названию вас обмануть, оно может быть внедрено. Согласно его учебник:
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();
}
Я бы добавил Jackson (json) и JAXB (xml ); в дополнение к Xstream, о котором уже упоминалось. Джексон хорошо работает с одним предостережением: если у вас обширное полиморфное хранилище, десериализация может стать сложной задачей. То, что Xstream работает лучше.
И я согласен с тем, что сериализация Java не подходит для persistence - она хороша для переноса сериализованных объектов, но настойчивость имеет временное измерение, а классы меняются со временем; и что там, где проблемы начинаются (я уверен, что вы это знаете, но поскольку другие, похоже, ошеломляют насчет того, почему перекрестная сериализация плохая, подумал я упомянул об этом). Кроме того, гораздо проще просматривать вещи, сериализованные с использованием текстовых форматов (json, xml), чем двоичные. И, наконец, если вам нужна космическая эффективность, сжатие (например, gzip) создает чудеса, размер данных после сжатия имеет тенденцию быть идентичным, независимо от формата (при условии, что такое количество информации)
Вы должны посмотреть на JAXB. Он является частью Java с JRE 6. Он довольно прост в использовании и позволяет вам управлять схемой XML из вашей объектной модели Java. Самое приятное то, что вам не нужны никакие дополнительные файлы jar или библиотеки, поскольку это часть Java. Проверьте пакет javax.xml.bin.
Информация о самом проекте JAXB: https://jaxb.dev.java.net
Ссылка на JavaDocs в JRE: http://java.sun.com/javase/6/docs/api/javax/xml/bind/package-frame.html
Для коллекций объектов попробуйте JDBM (одна банка). Дает вам карту, которая хранится на диске.
DB db = new DBMaker(fileName).build();
Map<String,MyObject> map = db.createTreeMap("mapName")
map.put("obj1", myObject1);
Для config JAXB действительно прост и не имеет зависимостей. Магазины в XML.
JAXB.marshall(myObject, new File("config.xml") ); // saved. that it
Вы ищете
решение для сохранения просто куча объектов
Итак, почему Java-сборка сериализации - это взлом?
Если вы ленивы, возможно, сериализуется с JSON поможет вам.
Prevayler звучит как хороший вариант для вас.
Он основан на сериализации Java, и это довольно быстро.
Дополнительная информация:
Отъезд BeanKeeper - это самый быстрый, самый грязный и простой ORM/persistence, который я когда-либо видел. Разумеется, это точно соответствует iBatis.
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);