Ответ 1
db4o - это база данных объектов, поэтому нет настройки схемы и она хорошо адаптируется к изменениям в структуре объекта со временем.
Какими легкими параметрами нужно сохранять объекты Java?
Я ищу наиболее простое решение. Я не хочу, чтобы что-то представляло собой просто нечто простое, которое работает с разумно простыми объектами (некоторые коллекции, отношения и простое наследование) и не привносит слишком много видимой сложности (если таковые имеются) в существующую кодовую базу.
Параметры, о которых я знаю, включают в себя Hibernate и фреймворки, такие как EMF, но они звучат (и были опытными) слишком сложными и трудоемкими. Я бы хотел что-то из коробки, желательно ориентированное на файл, чем ориентированное на dababase, что я могу просто надеть поверх своих простых старых java-объектов.
Это вопрос новичков, заранее заблаговременно для любого учебного пособия, разъясняющего контекст.
db4o - это база данных объектов, поэтому нет настройки схемы и она хорошо адаптируется к изменениям в структуре объекта со временем.
Если вы смотрите на что-то простое, вам также могут понадобиться данные в формате, который вы можете прочитать (а не двоичный файл или база данных). Если это так, вы должны посмотреть JAXB (привязка Java XML), которая является частью Java 6 и более поздних версий. Существуют и другие технологии, которые могут сделать это лучше, например XML Beans, но этот встроен.
Взгляните на эту страницу с Java API. Это довольно прямолинейно для сериализации и десериализации объектов Java.
http://java.sun.com/javase/6/docs/api/javax/xml/bind/JAXBContext.html
В основном вы используете следующее:
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 );
Просто убедитесь, что ваш FooObject имеет аннотацию @XmlRootElement. Свойства Java bean автоматически интерпретируются, но вы можете использовать другие аннотации, чтобы контролировать, как выглядит XML и моделировать более сложные объекты.
ObjectOutputStream и ObjectInputStream могут это сделать. Он встроен в Java и позволяет легко сериализовать/десериализовать объекты.
Плохая вещь в том, что если вы меняете свои объекты, вы не можете импортировать существующие старые объекты. Вам придется подумать о том, как оставаться совместимым с существующими объектами, которые уже могут быть сохранены на пользовательском компьютере, например, добавлением номера версии в ваши классы и созданием возможности преобразования старых объектов в новые.
Подробнее здесь:
EDIT: Вы также можете рассмотреть возможность добавления следующего атрибута ко всем вашим классам с места в карьер. Это может позволить вам добавить атрибуты к классам и по-прежнему загружать старые файлы Object. В RMI-land это работает, но я не уверен в файлах. Однако никогда не удаляйте атрибуты.
static final long serialVersionUID = 1L;
Попробуйте простое сохранение XML http://simple.sourceforge.net. Это действительно просто и не требует настройки. Просто возьмите свои существующие POJO и отметьте их, затем вы можете читать и записывать их в файл. Поддерживаются графики циклических объектов, а также все коллекции Java. Его можно использовать так.
Serializer serializer = new Persister();
MyObject object = serializer.read(MyObject.class, new File("file.xml));
и писать так же легко
serializer.write(myInstance, new File("file.xml"));
Это очень легкий подход, без зависимостей, отличных от стандартного Java 1.5. По сравнению с другими объектами XML-технологий, таких как JAXB, XStream, Castor, которые зависят от целого ряда других проектов. Simple XML очень легкий и эффективный с точки зрения памяти.
См. аналогичный вопрос Легкая альтернатива спящему режиму. Самый легкий вес, который я знаю, iBatis
Вы можете попробовать XStream, который является библиотекой с открытым исходным кодом. Все, что он делает, - превратить ваши POJO в XML, которые затем можно сохранить на диск. Он очень прост в использовании и требует только нескольких строк кода.
Один простой подход - сериализовать (как в Serializable) ваши объекты на диск.
Простейший вариант, который я знаю, использует Xstream, чтобы сделать xml файл из ЛЮБОЙ java obect.
Я должен сказать, что начальная кривая обучения для Hibernate относительно неглубока. Вы должны иметь возможность запускать тестовую систему менее чем за день. Это только тогда, когда вам нужны более продвинутые функции, где он начинает становиться круче. Я бы порекомендовал вам определенно взглянуть, я имею в виду, что за день, если вы не выберете его?
Сказав это, рассмотрели ли вы просто сериализацию своих объектов непосредственно на диск, если вы просто хотите, чтобы что-то быстро стало грязным?
Я использовал PersistentObject в производственном коде и хорошо обслуживает мои потребности.