2009-11-04 3 views
3

Любые идеи о том, как лучше я могу реализовать статью историю изменений для основе Java веб-приложения и сохранить его в AuditlogРеализация статьи истории изменений для Java на основе веб-приложения

StackOverflow уже имеет такую ​​особенность, позволяющую один, чтобы увидеть отличия от одной версии к другой, почти как клиенты SVN.

Это скорее дизайн, чем вопрос реализации.

дополнение: как отображать эти изменения на веб-странице?

дополнение: Предлагаемое решение

Article 
-------------------------------- 
    Integer id 
    String title 
    String body 
    List<Tag> tags 
    AppUser createdBy 
    Date createdDate 

AuditLog 
-------------------------------- 
    Integer id 
    Integer objectId 
    Operation operation // enum with UPDATE and DELETE. I won't audit an insert 
    Date createdDate 
    AppUser createdBy 
    String class 
    String revisionXML 
    String comment 

HibernateInterceptor будет перехватывать процесс сохранения и использования Castor XML для создания XML-строки старого объекта.

Класс и идентификатор используются для получения изменений конкретного объекта.

google-diff-match-patch будет использоваться для создания HTML файлов различия

+0

из ответов, я буду использовать DaisyDiff. SVNKit предназначен для данных на сервере SVN. Из API JackRabbit я не видел никаких интерфейсов для получения различий между документами и узлами. – n002213f

+0

заметил аналогичный вопрос: http://stackoverflow.com/questions/923398/how-show-revision-history-like-revisions – n002213f

+0

more; http://stackoverflow.com/questions/39281/database-design-for-revisions; http://stackoverflow.com/questions/762405/database-data-versioning – n002213f

ответ

2

Лучшим решения было бы использовать базу данных или хранилище, которое уже поддерживает версию, например Apache Jackrabbit.

Если это не вариант, вы должны решить, где хотите хранить статьи. В файловой системе? Затем сделайте каждую статью каталогом и сохраните ревизии как числа (00001, 00002 и т. Д.) И поместите номер последней ревизии в специальный файл (например, current). Затем вы можете быстро узнать, сколько версий есть (просто посмотрите на current) и идите вперед и назад.

Если вы используете базу данных, добавьте поле номера версии в таблицу статей и добавьте вторую таблицу или флаг, в котором указывается, какая из них имеет текущую версию. Вы также можете выбрать max(version), но эти SQL-конструкции имеют тенденцию быть довольно уродливыми и запутанными. Гораздо проще сохранить эту информацию в другом месте.

[EDIT] Для того, чтобы генерировать изменения при посмотреть на этот проект: google-diff-match-patch

+0

Я буду использовать базу данных MySQL, как насчет выделения синтаксиса, показывающего различия (дополнения, удаления, ...) на веб-странице? – n002213f

+0

Взгляд Apache Jackrabbit – n002213f

+0

В верхней части хранилища данных вам понадобится инструмент diff. Смотрите этот проект: http://code.google.com/p/google-diff-match-patch/ –

1

Я хотел бы использовать существующий VCS (например, SVN) под капотом. Там у вас есть история изменений - все, что осталось сделать, это интерфейс из вашего приложения в VCS.

+3

Если вы идете по этому маршруту, посмотрите в SvnKit (http://svnkit.com/) библиотеку Java Svn, хотя я бы рекомендовал использовать Jackrabbit (JCR), как упоминает другой ответ, поскольку он также будет делать гораздо больше для вас. – cjstehno