[jboss-svn-commits] JBL Code SVN: r33677 - in labs/jbossrules/trunk: drools-core/src/main/java/org/drools/audit and 7 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Mon Jun 28 17:10:11 EDT 2010
Author: KrisVerlaenen
Date: 2010-06-28 17:10:10 -0400 (Mon, 28 Jun 2010)
New Revision: 33677
Added:
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/audit/event/RuleFlowVariableLogEvent.java
labs/jbossrules/trunk/drools-process/drools-bam/src/main/java/org/drools/process/audit/VariableInstanceLog.java
labs/jbossrules/trunk/drools-process/drools-bam/src/test/resources/ruleflow3.rf
Modified:
labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/ProcessEventListenerTest.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/audit/WorkingMemoryLogger.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/audit/event/LogEvent.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/event/RuleFlowEventSupport.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/event/RuleFlowVariableChangeEvent.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/instance/context/variable/VariableScopeInstance.java
labs/jbossrules/trunk/drools-process/drools-bam/src/main/java/org/drools/process/audit/JPAProcessInstanceDbLog.java
labs/jbossrules/trunk/drools-process/drools-bam/src/main/java/org/drools/process/audit/JPAWorkingMemoryDbLogger.java
labs/jbossrules/trunk/drools-process/drools-bam/src/main/java/org/drools/process/audit/NodeInstanceLog.java
labs/jbossrules/trunk/drools-process/drools-bam/src/test/java/org/drools/process/audit/JPAWorkingMemoryDbLoggerTest.java
labs/jbossrules/trunk/drools-process/drools-bam/src/test/resources/META-INF/persistence.xml
Log:
JBRULES-2560: Variable information in history log
- adding VariableInstanceLog
Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/ProcessEventListenerTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/ProcessEventListenerTest.java 2010-06-28 21:08:31 UTC (rev 33676)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/ProcessEventListenerTest.java 2010-06-28 21:10:10 UTC (rev 33677)
@@ -1,5 +1,4 @@
/*
- * Copyright 2009 salaboy.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -42,8 +41,6 @@
import org.drools.process.instance.context.variable.VariableScopeInstance;
import org.drools.rule.Package;
-
-
/**
*
* @author salaboy
@@ -177,9 +174,9 @@
assertEquals( 26, processEventList.size() );
assertEquals( "org.drools.event", ((RuleFlowStartedEvent) processEventList.get(0)).getProcessInstance().getProcessId());
- assertEquals("MyVar",((RuleFlowVariableChangeEvent) processEventList.get(4)).getName());
+ assertEquals("MyVar",((RuleFlowVariableChangeEvent) processEventList.get(4)).getVariableId());
assertEquals("SomeText",((RuleFlowVariableChangeEvent) processEventList.get(4)).getValue());
- assertEquals("MyVar",((RuleFlowVariableChangeEvent) processEventList.get(5)).getName());
+ assertEquals("MyVar",((RuleFlowVariableChangeEvent) processEventList.get(5)).getVariableId());
assertEquals("MyValue",((RuleFlowVariableChangeEvent) processEventList.get(5)).getValue());
}
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/audit/WorkingMemoryLogger.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/audit/WorkingMemoryLogger.java 2010-06-28 21:08:31 UTC (rev 33676)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/audit/WorkingMemoryLogger.java 2010-06-28 21:10:10 UTC (rev 33677)
@@ -35,6 +35,7 @@
import org.drools.audit.event.RuleFlowGroupLogEvent;
import org.drools.audit.event.RuleFlowLogEvent;
import org.drools.audit.event.RuleFlowNodeLogEvent;
+import org.drools.audit.event.RuleFlowVariableLogEvent;
import org.drools.command.impl.CommandBasedStatefulKnowledgeSession;
import org.drools.command.impl.KnowledgeCommandContext;
import org.drools.common.InternalFactHandle;
@@ -69,10 +70,12 @@
import org.drools.event.RuleBaseEventListener;
import org.drools.event.RuleFlowCompletedEvent;
import org.drools.event.RuleFlowEventListener;
+import org.drools.event.RuleFlowEventListenerExtension;
import org.drools.event.RuleFlowGroupActivatedEvent;
import org.drools.event.RuleFlowGroupDeactivatedEvent;
import org.drools.event.RuleFlowNodeTriggeredEvent;
import org.drools.event.RuleFlowStartedEvent;
+import org.drools.event.RuleFlowVariableChangeEvent;
import org.drools.event.WorkingMemoryEventListener;
import org.drools.impl.StatefulKnowledgeSessionImpl;
import org.drools.impl.StatelessKnowledgeSessionImpl;
@@ -103,7 +106,7 @@
implements
WorkingMemoryEventListener,
AgendaEventListener,
- RuleFlowEventListener,
+ RuleFlowEventListenerExtension,
RuleBaseEventListener {
private List<ILogEventFilter> filters = new ArrayList<ILogEventFilter>();
@@ -458,6 +461,28 @@
event.getProcessInstance().getId()) );
}
+ public void beforeVariableChange(RuleFlowVariableChangeEvent event,
+ WorkingMemory workingMemory) {
+ filterLogEvent(new RuleFlowVariableLogEvent(LogEvent.BEFORE_VARIABLE_INSTANCE_CHANGED,
+ event.getVariableId(),
+ event.getVariableInstanceId(),
+ event.getProcessInstance().getProcessId(),
+ event.getProcessInstance().getProcessName(),
+ event.getProcessInstance().getId(),
+ event.getValue() == null ? "null" : event.getValue().toString() ));
+ }
+
+ public void afterVariableChange(RuleFlowVariableChangeEvent event,
+ WorkingMemory workingMemory) {
+ filterLogEvent(new RuleFlowVariableLogEvent(LogEvent.AFTER_VARIABLE_INSTANCE_CHANGED,
+ event.getVariableId(),
+ event.getVariableInstanceId(),
+ event.getProcessInstance().getProcessId(),
+ event.getProcessInstance().getProcessName(),
+ event.getProcessInstance().getId(),
+ event.getValue() == null ? "null" : event.getValue().toString() ));
+ }
+
private String createNodeId(NodeInstance nodeInstance) {
Node node = ((org.drools.workflow.instance.NodeInstance) nodeInstance).getNode();
if (node == null) {
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/audit/event/LogEvent.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/audit/event/LogEvent.java 2010-06-28 21:08:31 UTC (rev 33676)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/audit/event/LogEvent.java 2010-06-28 21:10:10 UTC (rev 33677)
@@ -28,7 +28,7 @@
*/
public class LogEvent { // implements Externalizable { This breaks XStream serialization !
-public static final int INSERTED = 1;
+ public static final int INSERTED = 1;
public static final int UPDATED = 2;
public static final int RETRACTED = 3;
@@ -65,6 +65,9 @@
public static final int BEFORE_TASK_INSTANCE_COMPLETED = 30;
public static final int AFTER_TASK_INSTANCE_COMPLETED = 31;
+ public static final int BEFORE_VARIABLE_INSTANCE_CHANGED = 32;
+ public static final int AFTER_VARIABLE_INSTANCE_CHANGED = 33;
+
private int type;
public LogEvent() {
Added: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/audit/event/RuleFlowVariableLogEvent.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/audit/event/RuleFlowVariableLogEvent.java (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/audit/event/RuleFlowVariableLogEvent.java 2010-06-28 21:10:10 UTC (rev 33677)
@@ -0,0 +1,70 @@
+package org.drools.audit.event;
+
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
+
+public class RuleFlowVariableLogEvent extends RuleFlowLogEvent {
+
+ private String variableId;
+ private String variableInstanceId;
+ private String objectToString;
+
+ /**
+ * Create a new ruleflow variable log event.
+ */
+ public RuleFlowVariableLogEvent(final int type,
+ final String variableId,
+ final String variableInstanceId,
+ final String processId,
+ final String processName,
+ final long processInstanceId,
+ final String objectToString) {
+ super( type, processId, processName, processInstanceId );
+ this.variableId = variableId;
+ this.variableInstanceId = variableInstanceId;
+ this.objectToString = objectToString;
+ }
+
+ public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
+ super.readExternal(in);
+ variableId = (String) in.readObject();
+ variableInstanceId = (String) in.readObject();
+ objectToString = (String) in.readObject();
+ }
+
+ public void writeExternal(ObjectOutput out) throws IOException {
+ super.writeExternal(out);
+ out.writeObject(variableId);
+ out.writeObject(variableInstanceId);
+ out.writeObject(objectToString);
+ }
+
+ public String getVariableId() {
+ return variableId;
+ }
+
+ public String getVariableInstanceId() {
+ return variableInstanceId;
+ }
+
+ public String getObjectToString() {
+ return objectToString;
+ }
+
+ public String toString() {
+ String msg = null;
+ switch ( this.getType() ) {
+ case BEFORE_VARIABLE_INSTANCE_CHANGED :
+ msg = "BEFORE RULEFLOW VARIABLE CHANGED";
+ break;
+ case AFTER_VARIABLE_INSTANCE_CHANGED :
+ msg = "AFTER RULEFLOW VARIABLE CHANGED";
+ break;
+ default:
+ return super.toString();
+ }
+ return msg + " " + variableId + "=" + objectToString + " process:" + getProcessName() + "[id=" + getProcessId() + "]";
+ }
+
+}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/event/RuleFlowEventSupport.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/event/RuleFlowEventSupport.java 2010-06-28 21:08:31 UTC (rev 33676)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/event/RuleFlowEventSupport.java 2010-06-28 21:10:10 UTC (rev 33677)
@@ -189,13 +189,15 @@
}
public void fireBeforeVariableChange(final ProcessInstance instance,
- final String name,
+ final String variableId,
+ final String variableInstanceId,
final Object value,
WorkingMemory workingMemory) {
final Iterator<RuleFlowEventListener> iter = getEventListenersIterator();
if (iter.hasNext()) {
- final RuleFlowVariableChangeEvent event = new RuleFlowVariableChangeEvent(instance, name, value);
+ final RuleFlowVariableChangeEvent event = new RuleFlowVariableChangeEvent(
+ instance, variableId, variableInstanceId, value);
do{
RuleFlowEventListener listener = iter.next();
@@ -207,13 +209,15 @@
}
public void fireAfterVariableChange(final ProcessInstance instance,
- final String name,
+ final String variableId,
+ final String variableInstanceId,
final Object value,
WorkingMemory workingMemory) {
final Iterator<RuleFlowEventListener> iter = getEventListenersIterator();
if (iter.hasNext()) {
- final RuleFlowVariableChangeEvent event = new RuleFlowVariableChangeEvent(instance, name, value);
+ final RuleFlowVariableChangeEvent event = new RuleFlowVariableChangeEvent(
+ instance, variableId, variableInstanceId, value);
do{
RuleFlowEventListener listener = iter.next();
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/event/RuleFlowVariableChangeEvent.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/event/RuleFlowVariableChangeEvent.java 2010-06-28 21:08:31 UTC (rev 33676)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/event/RuleFlowVariableChangeEvent.java 2010-06-28 21:10:10 UTC (rev 33677)
@@ -1,6 +1,4 @@
/*
- * Copyright 2009 salaboy.
- *
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
@@ -20,38 +18,50 @@
import org.drools.runtime.process.ProcessInstance;
/**
- *
+ * @author krisv
* @author salaboy
*/
public class RuleFlowVariableChangeEvent extends ProcessEvent {
- private String name;
+ private static final long serialVersionUID = 4L;
+
+ private String variableId;
+ private String variableInstanceId;
+ private Object value;
- public String getName() {
- return name;
+ public String getVariableId() {
+ return variableId;
}
- public void setName(String name) {
- this.name = name;
+ public void setVariableId(String variableId) {
+ this.variableId = variableId;
}
- public Object getValue() {
+ public String getVariableInstanceId() {
+ return variableInstanceId;
+ }
+
+ public void setVariableInstanceId(String variableInstanceId) {
+ this.variableInstanceId = variableInstanceId;
+ }
+
+ public Object getValue() {
return value;
}
public void setValue(Object value) {
this.value = value;
}
- private Object value;
- public RuleFlowVariableChangeEvent(ProcessInstance instance,String name, Object value) {
+
+ public RuleFlowVariableChangeEvent(ProcessInstance instance, String variableId, String variableInstanceId, Object value) {
super(instance);
- this.name = name;
+ this.variableId = variableId;
+ this.variableInstanceId = variableInstanceId;
this.value = value;
-
}
public String toString() {
- return "==>[VariableChangeEvent(name=" + getName() + "; value=" + getValue()
+ return "==>[VariableChangeEvent(variableId=" + getVariableId() + "; variableInstanceId=" + getVariableInstanceId() + "; value=" + getValue()
+ "; processName=" + getProcessInstance().getProcessName() + "; processId=" + getProcessInstance().getProcessId() + ")]";
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/instance/context/variable/VariableScopeInstance.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/instance/context/variable/VariableScopeInstance.java 2010-06-28 21:08:31 UTC (rev 33676)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/instance/context/variable/VariableScopeInstance.java 2010-06-28 21:10:10 UTC (rev 33677)
@@ -9,6 +9,8 @@
import org.drools.process.core.context.variable.VariableScope;
import org.drools.process.instance.ContextInstanceContainer;
import org.drools.process.instance.context.AbstractContextInstance;
+import org.drools.workflow.core.Node;
+import org.drools.workflow.instance.node.CompositeContextNodeInstance;
/**
*
@@ -19,6 +21,8 @@
private static final long serialVersionUID = 400L;
private Map<String, Object> variables = new HashMap<String, Object>();
+ private transient String variableIdPrefix = null;
+ private transient String variableInstanceIdPrefix = null;
public String getContextType() {
return VariableScope.VARIABLE_SCOPE;
@@ -37,12 +41,24 @@
throw new IllegalArgumentException(
"The name of a variable may not be null!");
}
- if(getProcessInstance() != null){
- ((EventSupport) getProcessInstance().getWorkingMemory()).getRuleFlowEventSupport().fireBeforeVariableChange(getProcessInstance(),name, variables.get(name), getProcessInstance().getWorkingMemory());
+ if (getProcessInstance() != null) {
+ ((EventSupport) getProcessInstance().getWorkingMemory()).getRuleFlowEventSupport()
+ .fireBeforeVariableChange(
+ getProcessInstance(),
+ (variableIdPrefix == null ? "" : variableIdPrefix + ":") + name,
+ (variableInstanceIdPrefix == null? "" : variableInstanceIdPrefix + ":") + name,
+ variables.get(name),
+ getProcessInstance().getWorkingMemory());
}
variables.put(name, value);
- if(getProcessInstance() != null){
- ((EventSupport) getProcessInstance().getWorkingMemory()).getRuleFlowEventSupport().fireAfterVariableChange(getProcessInstance(),name, value, getProcessInstance().getWorkingMemory());
+ if (getProcessInstance() != null) {
+ ((EventSupport) getProcessInstance().getWorkingMemory()).getRuleFlowEventSupport()
+ .fireAfterVariableChange(
+ getProcessInstance(),
+ (variableIdPrefix == null ? "" : variableIdPrefix + ":") + name,
+ (variableInstanceIdPrefix == null? "" : variableInstanceIdPrefix + ":") + name,
+ variables.get(name),
+ getProcessInstance().getWorkingMemory());
}
}
@@ -55,6 +71,10 @@
for (Variable variable : getVariableScope().getVariables()) {
setVariable(variable.getName(), variable.getValue());
}
+ if (contextInstanceContainer instanceof CompositeContextNodeInstance) {
+ this.variableIdPrefix = ((Node) ((CompositeContextNodeInstance) contextInstanceContainer).getNode()).getUniqueId();
+ this.variableInstanceIdPrefix = ((CompositeContextNodeInstance) contextInstanceContainer).getUniqueId();
+ }
}
}
Modified: labs/jbossrules/trunk/drools-process/drools-bam/src/main/java/org/drools/process/audit/JPAProcessInstanceDbLog.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bam/src/main/java/org/drools/process/audit/JPAProcessInstanceDbLog.java 2010-06-28 21:08:31 UTC (rev 33676)
+++ labs/jbossrules/trunk/drools-process/drools-bam/src/main/java/org/drools/process/audit/JPAProcessInstanceDbLog.java 2010-06-28 21:10:10 UTC (rev 33677)
@@ -52,12 +52,29 @@
@SuppressWarnings("unchecked")
public List<NodeInstanceLog> findNodeInstances(long processInstanceId, String nodeId) {
List<NodeInstanceLog> result = getEntityManager()
- .createQuery("FROM NodeInstanceLog n WHERE WHERE n.processInstanceId = :processInstanceId AND n.nodeId = :nodeId ORDER BY date")
+ .createQuery("FROM NodeInstanceLog n WHERE n.processInstanceId = :processInstanceId AND n.nodeId = :nodeId ORDER BY date")
.setParameter("processInstanceId", processInstanceId)
.setParameter("nodeId", nodeId).getResultList();
return result;
}
+ @SuppressWarnings("unchecked")
+ public List<VariableInstanceLog> findVariableInstances(long processInstanceId) {
+ List<VariableInstanceLog> result = getEntityManager()
+ .createQuery("FROM VariableInstanceLog v WHERE v.processInstanceId = :processInstanceId ORDER BY date")
+ .setParameter("processInstanceId", processInstanceId).getResultList();
+ return result;
+ }
+
+ @SuppressWarnings("unchecked")
+ public List<VariableInstanceLog> findVariableInstances(long processInstanceId, String variableId) {
+ List<VariableInstanceLog> result = getEntityManager()
+ .createQuery("FROM VariableInstanceLog v WHERE v.processInstanceId = :processInstanceId AND v.variableId = :variableId ORDER BY date")
+ .setParameter("processInstanceId", processInstanceId)
+ .setParameter("variableId", variableId).getResultList();
+ return result;
+ }
+
@SuppressWarnings("unchecked")
public void clear() {
try {
Modified: labs/jbossrules/trunk/drools-process/drools-bam/src/main/java/org/drools/process/audit/JPAWorkingMemoryDbLogger.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bam/src/main/java/org/drools/process/audit/JPAWorkingMemoryDbLogger.java 2010-06-28 21:08:31 UTC (rev 33676)
+++ labs/jbossrules/trunk/drools-process/drools-bam/src/main/java/org/drools/process/audit/JPAWorkingMemoryDbLogger.java 2010-06-28 21:10:10 UTC (rev 33677)
@@ -10,6 +10,7 @@
import org.drools.audit.event.LogEvent;
import org.drools.audit.event.RuleFlowLogEvent;
import org.drools.audit.event.RuleFlowNodeLogEvent;
+import org.drools.audit.event.RuleFlowVariableLogEvent;
import org.drools.event.KnowledgeRuntimeEventManager;
import org.drools.impl.StatelessKnowledgeSessionImpl;
import org.drools.runtime.Environment;
@@ -62,6 +63,10 @@
nodeEvent = (RuleFlowNodeLogEvent) logEvent;
addNodeExitLog(nodeEvent.getProcessInstanceId(), nodeEvent.getProcessId(), nodeEvent.getNodeInstanceId(), nodeEvent.getNodeId());
break;
+ case LogEvent.AFTER_VARIABLE_INSTANCE_CHANGED:
+ RuleFlowVariableLogEvent variableEvent = (RuleFlowVariableLogEvent) logEvent;
+ addVariableLog(variableEvent.getProcessInstanceId(), variableEvent.getProcessId(), variableEvent.getVariableInstanceId(), variableEvent.getVariableId(), variableEvent.getObjectToString());
+ break;
default:
// ignore all other events
}
@@ -97,6 +102,12 @@
getEntityManager().persist(log);
}
+ private void addVariableLog(long processInstanceId, String processId, String variableInstanceId, String variableId, String objectToString) {
+ VariableInstanceLog log = new VariableInstanceLog(
+ processInstanceId, processId, variableInstanceId, variableId, objectToString);
+ getEntityManager().persist(log);
+ }
+
public void dispose() {
}
Modified: labs/jbossrules/trunk/drools-process/drools-bam/src/main/java/org/drools/process/audit/NodeInstanceLog.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bam/src/main/java/org/drools/process/audit/NodeInstanceLog.java 2010-06-28 21:08:31 UTC (rev 33676)
+++ labs/jbossrules/trunk/drools-process/drools-bam/src/main/java/org/drools/process/audit/NodeInstanceLog.java 2010-06-28 21:10:10 UTC (rev 33677)
@@ -8,21 +8,10 @@
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
-import javax.persistence.NamedQueries;
-import javax.persistence.NamedQuery;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
@Entity
- at NamedQueries( {
- @NamedQuery(name = "NodeInstanceLog.findByProcessId", query = "FROM NodeInstanceLog n "
- + "WHERE n.processId = :processId ORDER BY date"),
- @NamedQuery(name = "NodeInstanceLog.findByProcessIdAndNodeId", query = "FROM NodeInstanceLog n "
- + "WHERE n.processId = :processId AND n.nodeId = :nodeId ORDER BY date"),
- @NamedQuery(name = "NodeInstanceLog.findByProcessInstance", query = "FROM NodeInstanceLog n "
- + "WHERE n.processId = :processId AND n.processInstanceId = :processInstanceId ORDER BY date"),
- @NamedQuery(name = "NodeInstanceLog.findByProcessInstanceAndNodeId", query = "FROM NodeInstanceLog n "
- + "WHERE n.processId = :processId AND n.processInstanceId = :processInstanceId AND n.nodeId = :nodeId ORDER BY date") })
public class NodeInstanceLog implements Serializable {
public static final int TYPE_ENTER = 0;
Added: labs/jbossrules/trunk/drools-process/drools-bam/src/main/java/org/drools/process/audit/VariableInstanceLog.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bam/src/main/java/org/drools/process/audit/VariableInstanceLog.java (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bam/src/main/java/org/drools/process/audit/VariableInstanceLog.java 2010-06-28 21:10:10 UTC (rev 33677)
@@ -0,0 +1,105 @@
+package org.drools.process.audit;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.Temporal;
+import javax.persistence.TemporalType;
+
+ at Entity
+public class VariableInstanceLog implements Serializable {
+
+ private static final long serialVersionUID = 4L;
+
+ @Id
+ @GeneratedValue(strategy = GenerationType.AUTO)
+ private long id;
+ private long processInstanceId;
+ private String processId;
+ private String variableInstanceId;
+ private String variableId;
+ private String value;
+ @Temporal(TemporalType.TIMESTAMP)
+ @Column(name = "log_date")
+ private Date date;
+
+ VariableInstanceLog() {
+ }
+
+ public VariableInstanceLog(long processInstanceId, String processId,
+ String variableInstanceId, String variableId, String value) {
+ this.processInstanceId = processInstanceId;
+ this.processId = processId;
+ this.variableInstanceId = variableInstanceId;
+ this.variableId = variableId;
+ this.value = value;
+ this.date = new Date();
+ }
+
+ public long getId() {
+ return id;
+ }
+
+ void setId(long id) {
+ this.id = id;
+ }
+
+ public long getProcessInstanceId() {
+ return processInstanceId;
+ }
+
+ void setProcessInstanceId(long processInstanceId) {
+ this.processInstanceId = processInstanceId;
+ }
+
+ public String getProcessId() {
+ return processId;
+ }
+
+ void setProcessId(String processId) {
+ this.processId = processId;
+ }
+
+ public String getVariableInstanceId() {
+ return variableInstanceId;
+ }
+
+ public void setVariableInstanceId(String variableInstanceId) {
+ this.variableInstanceId = variableInstanceId;
+ }
+
+ public String getVariableId() {
+ return variableId;
+ }
+
+ public void setVariableId(String variableId) {
+ this.variableId = variableId;
+ }
+
+ public String getValue() {
+ return value;
+ }
+
+ public void setValue(String value) {
+ this.value = value;
+ }
+
+ public Date getDate() {
+ return date;
+ }
+
+ void setDate(Date date) {
+ this.date = date;
+ }
+
+ public String toString() {
+ return "Change variable '" +
+ processId + "#" + variableId + "' to '" + value + "' [" + processInstanceId + "#" + variableInstanceId + "]";
+ }
+
+}
Modified: labs/jbossrules/trunk/drools-process/drools-bam/src/test/java/org/drools/process/audit/JPAWorkingMemoryDbLoggerTest.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bam/src/test/java/org/drools/process/audit/JPAWorkingMemoryDbLoggerTest.java 2010-06-28 21:08:31 UTC (rev 33676)
+++ labs/jbossrules/trunk/drools-process/drools-bam/src/test/java/org/drools/process/audit/JPAWorkingMemoryDbLoggerTest.java 2010-06-28 21:10:10 UTC (rev 33677)
@@ -1,6 +1,9 @@
package org.drools.process.audit;
+import java.util.ArrayList;
+import java.util.HashMap;
import java.util.List;
+import java.util.Map;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
@@ -18,6 +21,9 @@
import org.drools.runtime.Environment;
import org.drools.runtime.EnvironmentName;
import org.drools.runtime.StatefulKnowledgeSession;
+import org.drools.runtime.process.WorkItem;
+import org.drools.runtime.process.WorkItemHandler;
+import org.drools.runtime.process.WorkItemManager;
import bitronix.tm.TransactionManagerServices;
import bitronix.tm.resource.jdbc.PoolingDataSource;
@@ -170,10 +176,68 @@
log.dispose();
}
+ public void testLogger4() throws Exception {
+ // load the process
+ KnowledgeBase kbase = createKnowledgeBase();
+ // create a new session
+ EntityManagerFactory emf = Persistence.createEntityManagerFactory( "org.drools.persistence.jpa" );
+ Environment env = KnowledgeBaseFactory.newEnvironment();
+ env.set( EnvironmentName.ENTITY_MANAGER_FACTORY,
+ emf );
+ env.set( EnvironmentName.TRANSACTION_MANAGER,
+ TransactionManagerServices.getTransactionManager() );
+ StatefulKnowledgeSession session = JPAKnowledgeService.newStatefulKnowledgeSession(kbase, null, env);
+ new JPAWorkingMemoryDbLogger(session);
+ JPAProcessInstanceDbLog log = new JPAProcessInstanceDbLog();
+ session.getWorkItemManager().registerWorkItemHandler("Human Task", new WorkItemHandler() {
+ public void executeWorkItem(WorkItem workItem, WorkItemManager manager) {
+ Map<String, Object> results = new HashMap<String, Object>();
+ results.put("Result", "ResultValue");
+ manager.completeWorkItem(workItem.getId(), results);
+ }
+ public void abortWorkItem(WorkItem workItem, WorkItemManager manager) {
+ }
+ });
+
+ // start process instance
+ Map<String, Object> params = new HashMap<String, Object>();
+ List<String> list = new ArrayList<String>();
+ list.add("One");
+ list.add("Two");
+ list.add("Three");
+ params.put("list", list);
+ long processInstanceId = session.startProcess("com.sample.ruleflow3", params).getId();
+
+ System.out.println("Checking process instances for process 'com.sample.ruleflow3'");
+ List<ProcessInstanceLog> processInstances =
+ log.findProcessInstances("com.sample.ruleflow3");
+ assertEquals(1, processInstances.size());
+ ProcessInstanceLog processInstance = processInstances.get(0);
+ System.out.print(processInstance);
+ System.out.println(" -> " + processInstance.getStart() + " - " + processInstance.getEnd());
+ assertNotNull(processInstance.getStart());
+ assertNotNull(processInstance.getEnd());
+ assertEquals(processInstanceId, processInstance.getProcessInstanceId());
+ assertEquals("com.sample.ruleflow3", processInstance.getProcessId());
+ List<VariableInstanceLog> variableInstances = log.findVariableInstances(processInstanceId);
+ assertEquals(6, variableInstances.size());
+ for (VariableInstanceLog variableInstance: variableInstances) {
+ System.out.println(variableInstance);
+ assertEquals(processInstanceId, processInstance.getProcessInstanceId());
+ assertEquals("com.sample.ruleflow3", processInstance.getProcessId());
+ assertNotNull(variableInstance.getDate());
+ }
+ log.clear();
+ processInstances = log.findProcessInstances("com.sample.ruleflow3");
+ assertEquals(0, processInstances.size());
+ log.dispose();
+ }
+
private KnowledgeBase createKnowledgeBase() {
KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
kbuilder.add(new ClassPathResource("ruleflow.rf"), ResourceType.DRF);
kbuilder.add(new ClassPathResource("ruleflow2.rf"), ResourceType.DRF);
+ kbuilder.add(new ClassPathResource("ruleflow3.rf"), ResourceType.DRF);
KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
kbase.addKnowledgePackages(kbuilder.getKnowledgePackages());
return kbase;
Modified: labs/jbossrules/trunk/drools-process/drools-bam/src/test/resources/META-INF/persistence.xml
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bam/src/test/resources/META-INF/persistence.xml 2010-06-28 21:08:31 UTC (rev 33676)
+++ labs/jbossrules/trunk/drools-process/drools-bam/src/test/resources/META-INF/persistence.xml 2010-06-28 21:10:10 UTC (rev 33677)
@@ -13,6 +13,7 @@
<class>org.drools.persistence.processinstance.ProcessInstanceInfo</class>
<class>org.drools.process.audit.ProcessInstanceLog</class>
<class>org.drools.process.audit.NodeInstanceLog</class>
+ <class>org.drools.process.audit.VariableInstanceLog</class>
<class>org.drools.persistence.processinstance.variabletypes.JPAPersistedVariable</class>
<class>org.drools.persistence.processinstance.variabletypes.VariableInstanceInfo</class>
<class>org.drools.persistence.processinstance.variabletypes.SerializablePersistedVariable</class>
Added: labs/jbossrules/trunk/drools-process/drools-bam/src/test/resources/ruleflow3.rf
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bam/src/test/resources/ruleflow3.rf (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bam/src/test/resources/ruleflow3.rf 2010-06-28 21:10:10 UTC (rev 33677)
@@ -0,0 +1,67 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<process xmlns="http://drools.org/drools-5.0/process"
+ xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"
+ xs:schemaLocation="http://drools.org/drools-5.0/process drools-processes-5.0.xsd"
+ type="RuleFlow" name="ruleflow" id="com.sample.ruleflow3" package-name="org.drools.process.workflow" >
+
+ <header>
+ <imports>
+ <import name="java.util.List" />
+ </imports>
+ <variables>
+ <variable name="list" >
+ <type name="org.drools.process.core.datatype.impl.type.ObjectDataType" className="java.util.List" />
+ </variable>
+ <variable name="s" >
+ <type name="org.drools.process.core.datatype.impl.type.StringDataType" />
+ <value>InitialValue</value>
+ </variable>
+ </variables>
+ </header>
+
+ <nodes>
+ <start id="1" name="Start" x="16" y="67" width="48" height="48" />
+ <end id="3" name="End" x="328" y="67" width="48" height="48" />
+ <forEach id="4" name="Multiple Instances" x="96" y="16" width="200" height="150" variableName="item" collectionExpression="list" >
+ <nodes>
+ <humanTask id="1" name="User Task" x="63" y="61" width="100" height="48" >
+ <work name="Human Task" >
+ <parameter name="ActorId" >
+ <type name="org.drools.process.core.datatype.impl.type.StringDataType" />
+ </parameter>
+ <parameter name="Comment" >
+ <type name="org.drools.process.core.datatype.impl.type.StringDataType" />
+ </parameter>
+ <parameter name="Content" >
+ <type name="org.drools.process.core.datatype.impl.type.StringDataType" />
+ </parameter>
+ <parameter name="Priority" >
+ <type name="org.drools.process.core.datatype.impl.type.StringDataType" />
+ </parameter>
+ <parameter name="Skippable" >
+ <type name="org.drools.process.core.datatype.impl.type.StringDataType" />
+ </parameter>
+ <parameter name="TaskName" >
+ <type name="org.drools.process.core.datatype.impl.type.StringDataType" />
+ </parameter>
+ </work>
+ <mapping type="out" from="Result" to="s" />
+ </humanTask>
+ </nodes>
+ <connections>
+ </connections>
+ <in-ports>
+ <in-port type="DROOLS_DEFAULT" nodeId="1" nodeInType="DROOLS_DEFAULT" />
+ </in-ports>
+ <out-ports>
+ <out-port type="DROOLS_DEFAULT" nodeId="1" nodeOutType="DROOLS_DEFAULT" />
+ </out-ports>
+ </forEach>
+ </nodes>
+
+ <connections>
+ <connection from="4" to="3" />
+ <connection from="1" to="4" />
+ </connections>
+
+</process>
\ No newline at end of file
More information about the jboss-svn-commits
mailing list