Capítulo 14. Registro em Log

O mecanismo de registro em log permite que você armazene informações sobre a execução de uma instância de processo. Ele é fornecido por um ouvinte de eventos especial que ouve o Mecanismo de Processos para qualquer evento relevante a ser registrado em log. Assim, as informações podem ser armazenadas separadamente de outras informações sem log armazenadas no banco de dados interno do servidor (h2) ou em uma fonte de dados conectada usando JPA ou Hibernate.
O módulo jbpm-audit fornece o ouvinte de eventos e também permite que você armazene diretamente informações relacionadas ao processo em um banco de dados usando JPA ou Hibernate. Os dados das entidades abaixo são armazenados, como a seguir:
  • Instância de processo, como processinstancelog
  • Instância de elemento, como nodeinstancelog
  • Instância de variável, como variableinstancelog

Tabela 14.1. Campos da Tabela ProcessInstanceLog

CampoDescriçãoAnulável
id
Chave primária da entidade de log
Não
end_date
Data de término da instância do processo
Sim
processid
Nome (id) do processo subjacente
Sim
processinstanceid
Id da instância do processo
Não
start_date
Data de início da instância do processo
Sim
status
Status da instância do processo
Sim
parentProcessInstanceId
Id da instância do processo da instância do processo pai, caso aplicável
Sim
outcome
Resultado da instância do processo (detalhes sobre a conclusão do processo, como código de erro)
Sim

Tabela 14.2. Campos da Tabela NodeInstanceLog

CampoDescriçãoAnulável
id
Chave primária da entidade de log
Não
log_date
Data do evento
Sim
nodeid
Id do nó do elemento de processo subjacente
Sim
nodeinstanceid
Id da instância do nó
Sim
nodename
Nome do nó subjacente
Sim
processid
Id do processo subjacente
Sim
processinstanceid
Id da instância do processo pai
Não
type
Tipo de evento (0 = evento de entrada, 1 = evento de saída)
Não

Tabela 14.3. Campos da Tabela VariableInstanceLog

CampoDescriçãoAnulável
id
Chave primária da entidade de log
Não
log_date
Data do evento
Sim
processid
Nome (id) do processo subjacente
Sim
processinstanceid
Id da instância do processo
Não
value
Valor da variável na hora do log
Sim
variableid
Id da variável estabelecida na definição do processo
Sim
variableinstanceid
Id da instância da variável
Sim
outcome
Resultado da instância do processo (detalhes sobre a conclusão do processo, como código de erro)
Sim
Se necessário, defina seu próprio modelo de dados das informações personalizadas e use os ouvintes de eventos do processo para extrair as informações.

14.1. Registrando Eventos no Log do Banco de Dados

Para registrar um evento que ocorre durante o tempo de execução em uma instância de processo, uma instância de elemento ou uma instância de variável, siga as instruções a seguir:
  1. Mapeie as classes de log na fonte de dados para que a fonte de dados fornecida aceite as entradas de log. No Red Hat JBoss EAP, edite as propriedades da fonte de dados no arquivo persistence.xml.

    Exemplo 14.1. Classes ProcessInstanceLog, NodeInstanceLog e VariableInstanceLog habilitadas por processInstanceDS

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <persistence  version="1.0"  xsi:schemaLocation=
        "http://java.sun.com/xml/ns/persistence
         http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd
         http://java.sun.com/xml/ns/persistence/orm
         http://java.sun.com/xml/ns/persistence/orm_1_0.xsd"
      xmlns:orm="http://java.sun.com/xml/ns/persistence/orm"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xmlns="http://java.sun.com/xml/ns/persistence">
    
      <persistence-unit name="org.jbpm.persistence.jpa">
        <provider>org.hibernate.ejb.HibernatePersistence</provider>
        <jta-data-source>jdbc/processInstanceDS</jta-data-source>
        <class>org.drools.persistence.info.SessionInfo</class>
        <class>org.jbpm.persistence.processinstance.ProcessInstanceInfo</class>
        <class>org.drools.persistence.info.WorkItemInfo</class>
        <class>org.jbpm.process.audit.ProcessInstanceLog</class>
        <class>org.jbpm.process.audit.NodeInstanceLog</class>
        <class>org.jbpm.process.audit.VariableInstanceLog</class>
    
        <properties>
          <property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect"/>
          <property name="hibernate.max_fetch_depth" value="3"/>
          <property name="hibernate.hbm2ddl.auto" value="update"/>
          <property name="hibernate.show_sql" value="true"/>
          <property name="hibernate.transaction.manager_lookup_class"
                    value="org.hibernate.transaction.BTMTransactionManagerLookup"/>
        </properties>
      </persistence-unit>
    </persistence>
    
  2. Registre um agente na sua Sessão Kie.

    Exemplo 14.2. Importando os Agentes

    import org.jbpm.process.audit.AuditLogService;
    import org.jbpm.process.audit.AuditLoggerFactory;
    import org.jbpm.process.audit.AuditLoggerFactory.Type;
    import org.jbpm.process.audit.JPAAuditLogService;
    ...
    

    Exemplo 14.3. Registrando um Agente a uma Sessão Kie

    @PersistenceUnit(unitName = PERSISTENCE_UNIT_NAME)
      private EntityManagerFactory emf;
    
      private AuditLogService auditLogService;
    @PostConstruct
      public void configure() {
      
      auditLogService = new JPAAuditLogService(emf);
      ((JPAAuditLogService) auditLogService).setPersistenceUnitName(PERSISTENCE_UNIT_NAME);
      
      if( emf == null ) { 
      ((JPAAuditLogService) auditLogService).setPersistenceUnitName(PERSISTENCE_UNIT_NAME);
      }
      
      RuntimeEngine runtime = singletonManager.getRuntimeEngine(EmptyContext.get());
      KieSession ksession = runtime.getKieSession();
      AuditLoggerFactory.newInstance(Type.JPA, ksession, null);
    
      }
    
  3. Facultativamente, chame o método addFilter no agente para remover as informações irrelevantes. Apenas as informações aceitas por todos os filtros aparecem no banco de dados.
  4. As classes do agente podem ser exibidas no Modo de Exibição de Auditoria:
    <dependency>
    	<groupId>org.jbpm</groupId>
    	<artifactId>jbpm-audit</artifactId>
    	<version>6.0.1.Final</version>
    </dependency>