Библиотека с открытым исходным кодом для сохранения дерева объектов Java в БД или файл

Я ищу библиотеку с открытым исходным кодом, которая может быть использована для прозрачного сохранения Java-объектов (и их зависимостей!) В файл или DB, своего рода снимок.

Пример использования: у меня есть состояние игры в группе объектов, игрока, счета, местоположения и т. Д. Пользователь нажимает "сохранить", и теперь мне нужно сохранить эти объекты (все объекты, которые нужно сохранить, можно аннотировать), чтобы файл или дб. Если система выйдет из строя или войдет в систему позже, я смогу восстановиться с этого момента.

Я ищу библиотеку, которая может сделать это максимально прозрачно и эффективно. Транзакция и т. Д. Не требуется. Мои приоритеты будут

  1. OpenSource, бесплатно, хорошая документация
  2. Простота использования. Пользователю не нужно вручную сохранять объект после изменения. Если он (она) должен, это должно быть тривиальной деятельностью
  3. стабильный
  4. Должно быть легко читаемым из снимка и восстановления.

Существует ли библиотека, которая охватывает все 4 или, по крайней мере, большую часть вышеуказанных требований? Я склонен к аспектно-ориентированным подходам

Я спрашиваю неправильный q для моего варианта использования? Это сделано совсем по-другому в отрасли?

3 ответа

Вы должны быть в состоянии использовать встроенную сериализацию Java, чтобы решить эту проблему. Если вы хотите сохранить его автоматически, оберните вашу модель в слой, который сохранит ее для вас. Это может быть сделано даже "автоматически" с использованием прокси (java.lang.reflect.Proxy).

Однако я обычно не рекомендую автоматически сохранять состояние, поскольку значения часто связаны между собой. Представьте себе класс прогресса, который отслеживает, на каком уровне вы находитесь, и как далеко вы достигли этого уровня (скажем, 0%, 25%, 50% и 75%).

Теперь вы только что завершили уровень 2, поэтому прогресс должен быть обновлен до "Уровень 3, 0%". Если вы сначала установите уровень, прогресс будет (на короткий период) иметь состояние "Уровень 3, 75%", что неверно, и если вы установите, как далеко сначала вы получите "Уровень 2, 0%". Если программа остановится в любой из этих точек, то у пользователя будет неправильное состояние.

Вы можете использовать стандартный механизм сериализации Java. Если все ваши классы, которые вы хотите сохранить, реализуют интерфейс тега Serializable Вы можете прозрачно сохранить столько, сколько хотите граф объектов. Это не БД, это файл, но вы всегда можете прочитать эти объекты обратно в ваше приложение, и, вероятно, это лучший (или первый) вариант для вас.

Недостатком этого метода является то, что данные являются двоичными, то есть вы не можете прочитать их с помощью блокнота. И формат очень чувствителен к изменениям, сделанным в классах, поэтому поддержка обратной / прямой совместимости проблематична.

Другая возможность заключается в сериализации объектов в формате XML или JSON. Для XML попробуйте JAXB или XStream. Для JSON посмотрите здесь.

Существует встроенная функциональность под названием ObjectInput / ObjectOutput-Stream.

http://docs.oracle.com/javase/6/docs/api/java/io/ObjectInputStream.html

Если вы хотите иметь удобочитаемый файл, вы можете использовать XStream.

http://x-stream.github.io/faq.html

Другие вопросы по тегам