【问题标题】:Implementing article revision history for Java based web application为基于 Java 的 Web 应用程序实现文章修订历史记录
【发布时间】:2010-12-13 00:32:04
【问题描述】:

关于我如何最好为基于 Java 的 Web 应用程序实现文章修订历史并将其保存在 AuditLog 中的任何想法

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字符串。

class 和 id 用于获取特定对象的修订版本。

google-diff-match-patch 将用于创建 HTML diff 文件

【问题讨论】:

标签: java revision database-versioning


【解决方案1】:

最好的解决方案是使用已经支持版本的数据库或存储,例如Apache Jackrabbit

如果这不是一个选项,那么您必须决定要将文章存储在哪里。在文件系统上?然后将每篇文章做成一个目录,并将修订保存为数字(00001、00002 等),并将最后修订的编号放在一个特殊文件中(如current)。然后您可以快速找出有多少个版本(只需查看current)并前进和后退。

如果您使用数据库,则将版本号字段添加到文章表并添加第二个表或一个标志,说明当前版本是哪一个。您也可以使用max(version) 进行选择,但这些 SQL 结构往往非常丑陋和令人困惑。将此信息保存在其他地方要简单得多。

[编辑] 要生成差异,请查看此项目:google-diff-match-patch

【讨论】:

  • 我将使用 MySQL 数据库,如何突出显示网页上的差异(添加、删除等)的语法?
  • 看一看 Apache Jackrabbit
  • 在数据存储之上,您需要一个 diff 工具。看到这个项目:code.google.com/p/google-diff-match-patch
  • @Aaron - 谢谢,我还注意到 DaisyDiff: code.google.com/p/daisydiff 用于 HTML 差异
【解决方案2】:

我会在后台使用现有的 VCS(例如 SVN)。在那里你有修订历史 - 剩下要做的就是从你的应用程序到 VCS 的接口。

【讨论】:

  • 如果你走这条路,请查看 SvnKit (svnkit.com) 一个 Java Svn 库,尽管我建议使用 Jackrabbit (JCR) 作为另一个答案提到的,因为它也会为你。
猜你喜欢
  • 2014-07-27
  • 1970-01-01
  • 1970-01-01
  • 2014-01-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-03
  • 1970-01-01
相关资源
最近更新 更多