Chapitre 14. Journalisation
Le mécanisme de journalisation vous permet de stocker des informations sur l'exécution d'une instance de processus. Il est fourni par un listener spécial qui écoute le moteur de processus pour être à l'affut de tout événement pertinent à journaliser, de façon à ce que l'information puisse être stockée séparémment de l'information non journlaisée dans une base de données intégrée (h2) ou dans une source de données connectée qui utilise JPA ou Hibernate.
Le module jbpm-audit
fournit le listener de l'événement et vous permet également de stocker des informations liées aux processus directement dans une base de données en utilisant JPA ou Hibernate. Les données des entités suivantes sont stockées comme suit :
- Instance de processus
processinstancelog - Instance d'élément
nodeinstancelog - Instance de variable
variableinstancelog
Tableau 14.1. Champs de la table de ProcessInstanceLog
| Champ | Description | Nullable |
|---|---|---|
|
id
|
La clé primaire de l'entité de journalisation
|
Non
|
|
end_date
|
La date de fin de l'instance du processus
|
Oui
|
|
processid
|
Le nom (id) du processus sous-jacent
|
Oui
|
|
processinstanceid
|
L'id de l'instance du processus
|
Non
|
|
start_date
|
La date de démarrage de l'instance du processus
|
Oui
|
|
status
|
Le statut de l'instance du processus
|
Oui
|
|
parentProcessInstanceId
|
L'id d'instance de processus de l'instance de processus parent si tel est le cas
|
Oui
|
|
résultat
|
Le résultat de l'instance de processus (comme des information de fin de processus, comme un code d'erreur)
|
Oui
|
Tableau 14.2. Champs de la table de NodeInstanceLog
| Champ | Description | Nullable |
|---|---|---|
|
id
|
La clé primaire de l'entité de journalisation
|
Non
|
|
log_date
|
La date de l'événement
|
Oui
|
|
nodeid
|
L'id du noeud de l'élément de processus sous-jacent
|
Oui
|
|
nodeinstanceid
|
L'id de l'instance de noeud
|
Oui
|
|
nodename
|
Le nom du noeud sous-jacent
|
Oui
|
|
processid
|
L'id du processus sous-jacent
|
Oui
|
|
processinstanceid
|
L'id de l'instance de processus parente
|
Non
|
|
type
|
Le type d'événement (
0 = enter event, 1 = exit event)
|
Non
|
Tableau 14.3. Les champs de la table de VariableInstanceLog
| Champ | Description | Nullable |
|---|---|---|
|
id
|
La clé primaire de l'entité de journalisation
|
Non
|
|
log_date
|
La date de l'événement
|
Oui
|
|
processid
|
Le nom (id) du processus sous-jacent
|
Oui
|
|
processinstanceid
|
L'id de l'instance du processus
|
Non
|
|
value
|
La valeur de la variable au moment de la journalisation
|
Oui
|
|
variableid
|
La variable est définie dans la définition du processus
|
Oui
|
|
variableinstanceid
|
l'id de l'instance de la variable
|
Oui
|
|
résultat
|
Le résultat de l'instance de processus (comme des information de fin de processus, comme un code d'erreur)
|
Oui
|
Si nécessaire, définir votre propre modèle d'informations personnalisé et utiliser les listeners d'événement de processus pour extraire l'information.
14.1. Journalisation des événements dans la base de données
Pour journaliser un événement qui a lieu pendant le runtime d'une instance de processus, une instance d'élément, ou une instance de variable, vous devez procéder ainsi :
- Mapper les classes de journalisation dans la source de données, de façon à ce que la source de données présentée accepte les entrées de journalisation. Dans Red Hat JBoss EAP, éditez les propriétés de sources de données dans le fichier
persistence.xml.Exemple 14.1. Les classes ProcessInstanceLog, NodeInstanceLog et VariableInstanceLog activées pour 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> - Enregistrer in logger dans votre session Kie.
Exemple 14.2. Importer les loggers
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; ...
Exemple 14.3. Enregistrer un logger dans une session 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); } - En option, appeler la méthode
addFiltersur le logger pour filtrer les informations inutiles. Seules les informations acceptées par tous les filtres apparaissent dans la base de données. - Les classes de logger peuvent être visualisées dans la vue d'auditing :
<dependency> <groupId>org.jbpm</groupId> <artifactId>jbpm-audit</artifactId> <version>6.0.1.Final</version> </dependency>