如何在Grails中管理对象修订?

时间:2010-08-25 10:32:54

标签: hibernate grails versioning auditing hibernate-envers

我需要在 grails 网络应用中为文章实施修订系统。在搜索grails论坛,stackoverflow,grails插件和谷歌搜索互联网后,我最终得到了3个选项:

选项1 - 使用 grails Envers插件(请参阅http://code.google.com/p/grails-envers-plugin/)。有没有人成功使用它?或者在没有插件的情况下使用Envers(请参阅here)但是如何使其与GORM一起使用?

选项2 - 使用 Gvers插件,我在此处找到了https://github.com/ziftytodd/gvers。我从来没有听过有人使用它,那么有没有人曾经成功使用它?

选项3 - 内置机制 Weceem 为Weceem CMS的任何内容创建了版本控制系统。我可以从代码的逻辑和这个伟大的应用程序的设计中汲取灵感,但它似乎有点矫枉过正,我不喜欢使用非标准的解决方案。

所以我的问题是,你建议我做什么?你有没有使用过这些选项?

非常感谢您的见解。

3 个答案:

答案 0 :(得分:9)

由于我在问题发生后的几天内没有得到任何答案,我们已开始调查所有选项并得出以下结果/结论:

  1. Envers插件:虽然Envers是使用Hibernate处理对象修订和审核的成熟方法(正如Vadeg所指出的),但没有这样的 - 不 - 用于grails的货架解决方案。 Envers插件非常无用,是一个永生不死的项目。因此,使用带有GORM的Envers仍然不可能直接使用但是我认为有一个Envers插件的空间(可能是grail 2.0的一部分?),因为Envers现在是Hibernate核心模块不可或缺的一部分。但是,我们没有时间实施这样的解决方案(当你有足够的时间和资源时,这是迄今为止最好的解决方案)...所以我们放弃了它。

  2. Gvers插件:令人惊讶的是,即使看起来没有人在GRAILS世界中使用它,这个插件也像魅力一样工作(即使插件创建者的电子邮件无效! )。看起来很冒险但是如果你的要求很低(比如基本的版本控制系统),你应该选择它......

  3. 内置系统:除非您正在构建具有特定需求的CMS系统,或者相反,非常简单,我不会在任何其他情况下使用它。 Weceem已经很好地实现了CMS内容修订的大量示例,但即便如此,很遗憾他们不使用Envers。没有必要重新发明轮子...更好地改进现有的法拉利,不是吗?

  4. VCS系统:有一位朋友建议我使用专为此类任务而构建的现有解决方案:版本控制系统当然!!实际上 GIT 似乎是最理想的候选者:快速,可靠,无需任何处理的免费存储库。实际上这是完美的解决方案。我唯一的问题是:好吧,我不知道如何使用Git(甚至更少的API),而且我没有时间。

  5. 底线

    我肯定会使用 Gvers ,但如果您熟悉 Git ,或者您对 GORM Hibernate感到满意,去构建一个grail插件(基于 Git Envers

答案 1 :(得分:2)

我在Hibernate的项目中使用了Envers,它运行正常。 GORM基于Hibernate,所以我觉得它没有问题。

首先,您需要决定需要哪种版本控制?您是否需要回滚对象图更改或者需要查看某些字段?有时最好做一些小的本地实现,而不是注入大型库。

如果您需要修改对象图,Envers是一个不错的选择。 如果你需要修改一个字段,DIY:)

答案 2 :(得分:2)

Lucas Ward's plugin有效。确认为Grails 1.3.7 重要的是确保实体更新在事务中,因为envers依赖于它。 只是为了提醒Grails控制器默认不是事务性的。