我实现了自定义审计日志机制喽,使用events mechanism provided by the jBPM。更具体地讲,在我处理的工作流开始的课,我添加了一个事件监听器得到通知,每个工作流程操作,并记录到我的自定义SLF4J记录器(参见下面的代码片段):
ksession.addEventListener(new DefaultProcessEventListener() {
public void beforeProcessStarted(ProcessStartedEvent event) {
WorkflowProcessInstance process = (WorkflowProcessInstance) event.getProcessInstance();
logger.trace("jBPM event 'beforeProcessStarted'. Process ID: " + process.getId()
+ ", Process definition ID: " + process.getProcessId() + ", Process name: "
+ process.getProcessName() + ", Process state: " + process.getState() + ", Parent process ID: "
+ process.getParentProcessInstanceId());
}
public void afterProcessStarted(ProcessStartedEvent event) {
WorkflowProcessInstance process = (WorkflowProcessInstance) event.getProcessInstance();
logger.trace("jBPM event 'afterProcessStarted'. Process ID: " + process.getId()
+ ", Process definition ID: " + process.getProcessId() + ", Process name: "
+ process.getProcessName() + ", Process state: " + process.getState() + ", Parent process ID: "
+ process.getParentProcessInstanceId());
}
public void beforeProcessCompleted(ProcessCompletedEvent event) {
WorkflowProcessInstance process = (WorkflowProcessInstance) event.getProcessInstance();
logger.trace("jBPM event 'beforeProcessCompleted'. Process ID: " + process.getId()
+ ", Process definition ID: " + process.getProcessId() + ", Process name: "
+ process.getProcessName() + ", Process state: " + process.getState() + ", Parent process ID: "
+ process.getParentProcessInstanceId());
}
public void afterProcessCompleted(ProcessCompletedEvent event) {
WorkflowProcessInstance process = (WorkflowProcessInstance) event.getProcessInstance();
logger.trace("jBPM event 'afterProcessCompleted'. Process ID: " + process.getId()
+ ", Process definition ID: " + process.getProcessId() + ", Process name: "
+ process.getProcessName() + ", Process state: " + process.getState() + ", Parent process ID: "
+ process.getParentProcessInstanceId());
}
public void beforeNodeTriggered(ProcessNodeTriggeredEvent event) {
WorkflowProcessInstance process = (WorkflowProcessInstance) event.getProcessInstance();
NodeInstance node = event.getNodeInstance();
logger.trace("jBPM event 'beforeNodeTriggered'. Process ID: " + process.getId()
+ ", Process definition ID: " + process.getProcessId() + ", Process name: "
+ process.getProcessName() + ", Process state: " + process.getState() + ", Parent process ID: "
+ process.getParentProcessInstanceId() + ", Node instance ID: " + node.getId() + ", Node ID: "
+ node.getNodeId() + ", Node name: " + node.getNodeName());
}
public void afterNodeTriggered(ProcessNodeTriggeredEvent event) {
WorkflowProcessInstance process = (WorkflowProcessInstance) event.getProcessInstance();
NodeInstance node = event.getNodeInstance();
logger.trace("jBPM event 'afterNodeTriggered'. Process ID: " + process.getId()
+ ", Process definition ID: " + process.getProcessId() + ", Process name: "
+ process.getProcessName() + ", Process state: " + process.getState() + ", Parent process ID: "
+ process.getParentProcessInstanceId() + ", Node instance ID: " + node.getId() + ", Node ID: "
+ node.getNodeId() + ", Node name: " + node.getNodeName());
}
public void beforeNodeLeft(ProcessNodeLeftEvent event) {
WorkflowProcessInstance process = (WorkflowProcessInstance) event.getProcessInstance();
NodeInstance node = event.getNodeInstance();
logger.trace("jBPM event 'beforeNodeLeft'. Process ID: " + process.getId() + ", Process definition ID: "
+ process.getProcessId() + ", Process name: " + process.getProcessName() + ", Process state: "
+ process.getState() + ", Parent process ID: " + process.getParentProcessInstanceId()
+ ", Node instance ID: " + node.getId() + ", Node ID: " + node.getNodeId() + ", Node name: "
+ node.getNodeName());
}
public void afterNodeLeft(ProcessNodeLeftEvent event) {
WorkflowProcessInstance process = (WorkflowProcessInstance) event.getProcessInstance();
NodeInstance node = event.getNodeInstance();
logger.trace("jBPM event 'afterNodeLeft'. Process ID: " + process.getId() + ", Process definition ID: "
+ process.getProcessId() + ", Process name: " + process.getProcessName() + ", Process state: "
+ process.getState() + ", Parent process ID: " + process.getParentProcessInstanceId()
+ ", Node instance ID: " + node.getId() + ", Node ID: " + node.getNodeId() + ", Node name: "
+ node.getNodeName());
}
public void beforeVariableChanged(ProcessVariableChangedEvent event){
WorkflowProcessInstance process = (WorkflowProcessInstance) event.getProcessInstance();
logger.trace("jBPM event 'beforeVariableChanged'. Process ID: " + process.getId() + ", Process definition ID: "
+ process.getProcessId() + ", Process name: " + process.getProcessName() + ", Process state: "
+ process.getState() + ", Parent process ID: " + process.getParentProcessInstanceId()
+ ", Variable ID: " + event.getVariableId() + ", Variable instance ID: " + event.getVariableInstanceId() + ", Old value: "
+ (event.getOldValue() == null ? "null" : event.getOldValue().toString())+ ", New value: "+(event.getNewValue() == null ? "null" : event.getNewValue().toString()));
}
public void afterVariableChanged(ProcessVariableChangedEvent event){
WorkflowProcessInstance process = (WorkflowProcessInstance) event.getProcessInstance();
logger.trace("jBPM event 'afterVariableChanged'. Process ID: " + process.getId() + ", Process definition ID: "
+ process.getProcessId() + ", Process name: " + process.getProcessName() + ", Process state: "
+ process.getState() + ", Parent process ID: " + process.getParentProcessInstanceId()
+ ", Variable ID: " + event.getVariableId() + ", Variable instance ID: " + event.getVariableInstanceId() + ", Old value: "
+ (event.getOldValue() == null ? "null" : event.getOldValue().toString())+ ", New value: "+(event.getNewValue() == null ? "null" : event.getNewValue().toString()));
}
});