Подтвердить что ты не робот

Как управлять изменениями объектов в Grails?

Мне нужно внедрить систему ревизий для статей в моем веб-приложении grails. После поиска grails forum, stackoverflow, плагинов Grails и интернет-гейглинга, у меня было три варианта:

Вариант 1. Использование плагина Грааля Envers (см. http://code.google.com/p/grails-envers-plugin/). Кто-нибудь использовал его успешно? Или используя Envers без плагина (см. здесь), но как я могу заставить его работать с GORM?

Вариант 2. Используя плагин Gvers, я нашел здесь: https://github.com/ziftytodd/gvers. Я никогда не слышал, чтобы кто-нибудь использовал его, так есть кто-нибудь, кто когда-либо использовал его?

Вариант 3 - Встроенный механизм. Weceem создал систему управления версиями для любого содержимого Weceem CMS. Я могу черпать вдохновение из логики кода и дизайна этого замечательного приложения, но он кажется излишним, и мне не очень нравится использовать нестандартные решения.

Итак, мой вопрос, что вы мне посоветовали? Вы когда-нибудь использовали какие-либо из этих вариантов?

Большое спасибо за ваши идеи.

4b9b3361

Ответ 1

Поскольку я не получал ответов в течение дней, следующих за моим вопросом, мы начали изучать все варианты и пришли к следующим результатам/выводам:

  • Включить плагин: в то время как Envers - это хорошо зарекомендовавший себя способ обработки ревизий объектов и аудита с помощью Hibernate (как указано Vadeg), нет такого вне- решение для шелушения. Плагин Envers является абсолютно бесполезным и мертвым, никогда рожденным проектом. Поэтому использование Envers with GORM по-прежнему невозможно напрямую, но я считаю, что есть пространство для Envers Plugin (возможно, часть Grail 2.0?), Поскольку Envers теперь является неотъемлемой частью модулей ядра Hibernate. Однако у нас не было времени для реализации такого решения (которое, безусловно, самое лучшее, когда у вас есть достаточно времени и ресурсов перед вами), поэтому мы его бросили.

  • Плагин Gvers. Удивительно, но этот плагин работает как шарм, даже если кажется, что его никто не использует в мире GRAILS (даже у создателя плагина, у которого есть недействительный адрес электронной почты!). Кажется рискованным пойти с ним, но если ваши требования низки (как базовая система управления версиями), вы должны пойти с ним.

  • Встроенная система: за исключением случаев, когда вы создаете систему CMS с очень специфическими потребностями или, наоборот, что-то очень простое, я бы не пошел на это в каких-либо других случаях. Weceem очень хорошо реализован с большим количеством примеров для версий контента CMS, но даже для этого жаль, что вместо этого они не используют Envers. Не нужно изобретать велосипед... лучше улучшить существующий Ferrari, нет?

  • Система VCS: один из друзей предложил мне использовать существующие решения, специально созданные для таких задач: Система управления версиями, конечно! Фактически GIT кажется идеальным кандидатом: быстрые, надежные, безрезультатные репозитории, доступные в вашем распоряжении. На самом деле это идеальное решение. Моя единственная проблема: ну, я не знаю, как использовать Git (и даже меньше его API), и снова у меня нет времени.

Нижняя линия

Я обязательно использую Gvers, но если вы знакомы с Git или если вам комфортно с GORM и спящий режим, пойдите для создания плагина grail (на основе Git или Envers)

Ответ 2

Я использовал Envers в проекте с Hibernate, и он отлично работает. GORM основана на Hibernate, поэтому я думаю, что с этим нет проблем.

Прежде всего, вам нужно решить, какое именно управление версиями вам нужно? Нужно ли вам менять параметры графа объекта или вам нужно следить за некоторыми полями? Иногда лучше сделать небольшую локальную реализацию, а не вводить огромную библиотеку.

Если вам нужно пересмотреть график объектов, Envers - хороший выбор. Если вам нужно сделать ревизию одного поля, сделайте DIY:)

Ответ 3

Плагин Lucas Ward работает. Подтверждено с Grails 1.3.7 Важно, чтобы обновления сущностей находились в транзакции по мере того, как от этого зависел. Просто чтобы напомнить, что контроллеры Grails по умолчанию не являются транзакционными.