Auditoría condicional de Envers

Tengo un requisito donde quiero auditar registros solo en el cambio de campo de Estado. He seguido el tutorial del capítulo de documentación "15.8. Auditoría condicional".

Paso 1: Desactivar el registro automático de oyentes del evento Envers. Tengo los siguientes

<prop key="hibernate.listeners.envers.autoRegister">false</prop>

Paso 2: Crea subclases para los oyentes de eventos apropiados.

public class DeleteEnversListener extends EnversPostDeleteEventListenerImpl {   
    private static final long serialVersionUID = 5906427978349712224L;
    private static Log log = LogFactory.getLog(DeleteEnversListener.class);

    public DeleteEnversListener(AuditConfiguration enversConfiguration) {
        super(enversConfiguration);
    }

    @Override
    public void onPostDelete(PostDeleteEvent event) {
        log.info("!!! just logging entity !! "+ event.getEntity());
        super.onPostDelete(event);
    }   
}

De manera similar, tengo

InsertEnversListenerUpdateEnversListenerDeleteEnversListenerColecciónRecreateEnversListenerPreCollectionRemoveEnversListenerPreCollectionUpdateEnversListener

Paso 3: Crea tu propia implementación deorg.hibernate.integrator.spi.Integrator

public class CustomEnversIntegrator extends EnversIntegrator   {

    private static Log log = LogFactory.getLog(CustomEnversIntegrator.class);

    @Override
    public void integrate(Configuration configuration,
            SessionFactoryImplementor sessionFactory,
            SessionFactoryServiceRegistry serviceRegistry) {

        super.integrate(configuration, sessionFactory, serviceRegistry);
        final AuditConfiguration enversConfiguration = AuditConfiguration.getFor( configuration, serviceRegistry.getService( ClassLoaderService.class ) );
        EventListenerRegistry listenerRegistry = serviceRegistry.getService( EventListenerRegistry.class );

        System.out.println("Registering event listeners");
        if (enversConfiguration.getEntCfg().hasAuditedEntities()) {
            listenerRegistry.appendListeners(EventType.POST_INSERT, new InsertEnversListener(enversConfiguration));
            listenerRegistry.appendListeners(EventType.POST_UPDATE, new UpdateEnversListener(enversConfiguration));
            listenerRegistry.appendListeners(EventType.POST_DELETE, new DeleteEnversListener(enversConfiguration ) );
            listenerRegistry.appendListeners(EventType.POST_COLLECTION_RECREATE, new CollectionRecreateEnversListener(enversConfiguration ) );
            listenerRegistry.appendListeners(EventType.PRE_COLLECTION_REMOVE, new PreCollectionRemoveEnversListener(enversConfiguration ) );
            listenerRegistry.appendListeners(EventType.PRE_COLLECTION_UPDATE, new PreCollectionUpdateEnversListener(enversConfiguration ) );
        }

    }
}

Paso 4: Para que el integrador se use automáticamente cuando se inicie Hibernate, deberá agregar unMETA-INF/services/org.hibernate.integrator.spi.Integrator expediente. Aquí está el contenido deorg.hibernate.integrator.spi.Integrator expediente

com.hib.sample.listener.CustomEnversIntegrator

No estoy seguro, si me falta algo. Estoy usando JBOSS AS 7.0 con Hibernate 4.1.8

Respuestas a la pregunta(4)

Su respuesta a la pregunta