Hibernate — Envers — несколько целей аудита

Я уже использую Hibernate Envers для аудита сущностей, которые обновляются пользователем через пользовательский интерфейс; однако у меня также есть асинхронные задания, работающие в фоновом режиме, и я хотел бы проверить их также с помощью Envers. Теперь, что касается пользовательского интерфейса, я отслеживаю, какой HttpRequest внес изменения, которые дают мне дату, пользователя, сеанс и т. д. Для фоновых заданий я хотел бы отслеживать дату запуска задания, а также точное задание, которое его изменило. (класс работы).

Можно ли настроить 2 объекта аудита, 1 для пользовательского интерфейса и 1 для системных изменений?

Уолтер


person Community    schedule 11.05.2010    source источник


Ответы (1)


Я еще не проверял это, но я просто делаю следующее:

@RevisionListener(SystemRevisionListener.class)
@Entity
public class SystemRevision extends AbstractRevision
{
   @Column(nullable = false, updatable = false)
   protected QuartzTriggerHandle job;

   @Column(nullable = false, updatable = false)
   protected Class jobClass;

   ...
}



@RevisionListener(WebRevisionListener.class)
@Entity
public class WebRevision extends AbstractRevision
{
   @ManyToOne(optional = false)
   @JoinColumn(nullable = false, updatable = false)
   protected HttpRequest httpRequest;

   ...
}

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

person Community    schedule 24.05.2010