[jboss-svn-commits] JBL Code SVN: r20326 - in labs/jbossrules/trunk/drools-process/drools-process-enterprise/src: test/java/org/drools/process/enterprise/client and 1 other directory.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Thu Jun 5 05:38:43 EDT 2008
Author: KrisVerlaenen
Date: 2008-06-05 05:38:43 -0400 (Thu, 05 Jun 2008)
New Revision: 20326
Added:
labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/main/java/org/drools/process/enterprise/processinstance/EJB3ProcessInstanceManager.java
Modified:
labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/main/java/org/drools/process/enterprise/processinstance/ProcessInstanceInfo.java
labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/main/java/org/drools/process/enterprise/processinstance/ProcessServiceBean.java
labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/test/java/org/drools/process/enterprise/client/ProcessRepositoryClient.java
Log:
- drools-process-enterprise modifications
- runtime upgrading of processes
Added: labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/main/java/org/drools/process/enterprise/processinstance/EJB3ProcessInstanceManager.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/main/java/org/drools/process/enterprise/processinstance/EJB3ProcessInstanceManager.java (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/main/java/org/drools/process/enterprise/processinstance/EJB3ProcessInstanceManager.java 2008-06-05 09:38:43 UTC (rev 20326)
@@ -0,0 +1,70 @@
+package org.drools.process.enterprise.processinstance;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+
+import javax.persistence.EntityManager;
+
+import org.drools.WorkingMemory;
+import org.drools.common.InternalRuleBase;
+import org.drools.common.InternalWorkingMemory;
+import org.drools.process.instance.ProcessInstance;
+import org.drools.process.instance.ProcessInstanceManager;
+import org.drools.process.instance.impl.ProcessInstanceImpl;
+
+public class EJB3ProcessInstanceManager implements ProcessInstanceManager {
+
+ private EntityManager manager;
+ private WorkingMemory workingMemory;
+
+ public void setEntityManager(EntityManager manager) {
+ this.manager = manager;
+ }
+
+ public void setWorkingMemory(WorkingMemory workingMemory) {
+ this.workingMemory = workingMemory;
+ }
+
+ public void addProcessInstance(ProcessInstance processInstance) {
+ ProcessInstanceInfo processInstanceInfo = new ProcessInstanceInfo();
+ processInstanceInfo.setProcessInstance(processInstance);
+ manager.persist(processInstanceInfo);
+ manager.flush();
+ processInstance.setId(processInstanceInfo.getId());
+ }
+
+ public ProcessInstance getProcessInstance(long id) {
+ ProcessInstanceInfo processInstanceInfo = manager.find(ProcessInstanceInfo.class, id);
+ if (processInstanceInfo == null) {
+ return null;
+ }
+ ProcessInstance processInstance = processInstanceInfo.getProcessInstance();
+ processInstance.setProcess(((InternalRuleBase) workingMemory.getRuleBase()).getProcess(processInstance.getProcessId()));
+ if (processInstance.getWorkingMemory() == null) {
+ processInstance.setWorkingMemory((InternalWorkingMemory) workingMemory);
+ ((ProcessInstanceImpl) processInstance).reconnect();
+ }
+ return processInstance;
+ }
+
+ public Collection<ProcessInstance> getProcessInstances() {
+ List<ProcessInstance> result = new ArrayList<ProcessInstance>();
+ List<ProcessInstanceInfo> processInstanceInfos =
+ manager.createQuery("from ProcessInstanceInfo").getResultList();
+ if (processInstanceInfos != null) {
+ for (ProcessInstanceInfo processInstanceInfo: processInstanceInfos) {
+ result.add(processInstanceInfo.getProcessInstance());
+ }
+ }
+ return result;
+ }
+
+ public void removeProcessInstance(ProcessInstance processInstance) {
+ ProcessInstanceInfo processInstanceInfo = manager.find(ProcessInstanceInfo.class, processInstance.getId());
+ if (processInstanceInfo != null) {
+ manager.remove(processInstanceInfo);
+ }
+ }
+
+}
Modified: labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/main/java/org/drools/process/enterprise/processinstance/ProcessInstanceInfo.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/main/java/org/drools/process/enterprise/processinstance/ProcessInstanceInfo.java 2008-06-05 09:38:35 UTC (rev 20325)
+++ labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/main/java/org/drools/process/enterprise/processinstance/ProcessInstanceInfo.java 2008-06-05 09:38:43 UTC (rev 20326)
@@ -5,6 +5,8 @@
import java.io.IOException;
import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Lob;
import javax.persistence.Transient;
@@ -19,7 +21,7 @@
@Entity
public class ProcessInstanceInfo {
- private @Id long processInstanceId;
+ private @Id @GeneratedValue(strategy=GenerationType.AUTO) Long processInstanceId;
private String processId;
private @Lob byte[] processInstanceByteArray;
private @Transient ProcessInstance processInstance;
@@ -50,7 +52,7 @@
public void setProcessInstance(ProcessInstance processInstance) {
this.processInstance = processInstance;
- this.processInstanceId = processInstance.getId();
+// this.processInstanceId = processInstance.getId();
this.processId = processInstance.getProcessId();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
try {
Modified: labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/main/java/org/drools/process/enterprise/processinstance/ProcessServiceBean.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/main/java/org/drools/process/enterprise/processinstance/ProcessServiceBean.java 2008-06-05 09:38:35 UTC (rev 20325)
+++ labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/main/java/org/drools/process/enterprise/processinstance/ProcessServiceBean.java 2008-06-05 09:38:43 UTC (rev 20326)
@@ -3,6 +3,7 @@
import java.io.StringReader;
import java.util.List;
import java.util.Map;
+import java.util.Properties;
import javax.ejb.EJB;
import javax.ejb.Stateless;
@@ -10,9 +11,8 @@
import javax.persistence.PersistenceContext;
import org.drools.RuleBase;
+import org.drools.RuleBaseConfiguration;
import org.drools.RuleBaseFactory;
-import org.drools.WorkingMemory;
-import org.drools.common.InternalRuleBase;
import org.drools.common.InternalWorkingMemory;
import org.drools.compiler.PackageBuilder;
import org.drools.process.enterprise.repository.ProcessInfo;
@@ -21,7 +21,7 @@
import org.drools.process.instance.WorkItem;
import org.drools.process.instance.WorkItemHandler;
import org.drools.process.instance.WorkItemManager;
-import org.drools.process.instance.impl.ProcessInstanceImpl;
+import org.drools.process.instance.impl.WorkItemImpl;
import org.drools.process.instance.impl.demo.SystemOutWorkItemHandler;
import org.drools.rule.Package;
@@ -35,8 +35,10 @@
System.out.println("Starting process " + processId);
InternalWorkingMemory workingMemory = createWorkingMemory();
// start process
+ long start = System.nanoTime();
ProcessInstance processInstance = workingMemory.startProcess(processId);
- persistProcessInstances(workingMemory);
+ persistProcessInstance(processInstance);
+ System.out.println("Time to execute: " + (System.nanoTime() - start));
return processInstance.getId();
}
@@ -47,20 +49,17 @@
throw new IllegalArgumentException(
"Could not find work item " + workItemId);
}
+ // TODO: should load other work items as well ?
+ WorkItemImpl workItem = new WorkItemImpl();
+ workItem.setId(workItemInfo.getWorkItemId());
+ workItem.setProcessInstanceId(workItemInfo.getProcessInstanceId());
+ workItem.setName(workItemInfo.getName());
+ workingMemory.getWorkItemManager().internalAddWorkItem(workItem);
manager.remove(workItemInfo);
// TODO: should load other process instances as well
- long processInstanceId = workItemInfo.getProcessInstanceId();
- ProcessInstanceInfo processInstanceInfo = manager.find(ProcessInstanceInfo.class, processInstanceId);
- if (processInstanceInfo == null) {
- throw new IllegalArgumentException(
- "Could not find process instance " + processInstanceId);
- }
- ProcessInstanceImpl processInstance = (ProcessInstanceImpl) processInstanceInfo.getProcessInstance();
- processInstance.setProcess(((InternalRuleBase) workingMemory.getRuleBase()).getProcess(processInstance.getProcessId()));
- processInstance.setWorkingMemory(workingMemory);
- processInstance.reconnect();
workingMemory.getWorkItemManager().completeWorkItem(workItemId, results);
- persistProcessInstances(workingMemory);
+ System.out.println("Executed work item " + workItem.getName() + " [" + workItem.getId() + "]");
+ persistProcessInstance(workItemInfo.getProcessInstanceId());
}
private InternalWorkingMemory createWorkingMemory() {
@@ -71,27 +70,62 @@
builder.addRuleFlow(new StringReader(processInfo.getProcessXML()));
}
Package pkg = builder.getPackage();
- RuleBase ruleBase = RuleBaseFactory.newRuleBase();
+ Properties properties = new Properties();
+ properties.put(
+ "processInstanceManager",
+ "org.drools.process.enterprise.processinstance.EJB3ProcessInstanceManager");
+ RuleBaseConfiguration conf = new RuleBaseConfiguration(properties);
+ RuleBase ruleBase = RuleBaseFactory.newRuleBase(conf);
ruleBase.addPackage(pkg);
// create new working memory
InternalWorkingMemory workingMemory = (InternalWorkingMemory) ruleBase.newStatefulSession();
// TODO auto-register work item handlers (e.g. based on config)
workingMemory.getWorkItemManager().registerWorkItemHandler("Log", new SystemOutWorkItemHandler());
workingMemory.getWorkItemManager().registerWorkItemHandler("Human Task", new EnterpriseWorkItemHandler());
+// workingMemory.addEventListener(new DefaultRuleFlowEventListener() {
+// public void afterRuleFlowCompleted(RuleFlowCompletedEvent event,
+// WorkingMemory workingMemory) {
+// System.out.println("Process instance completed: " +
+// event.getProcessInstance().getProcessId() +
+// "[" + event.getProcessInstance().getId() + "]");
+// }
+// public void afterRuleFlowNodeTriggered(
+// RuleFlowNodeTriggeredEvent event,
+// WorkingMemory workingMemory) {
+// System.out.println("Node completed: " +
+// event.getRuleFlowNodeInstance().getNode().getName() +
+// "[" + event.getRuleFlowNodeInstance().getNodeId() + "] for process instance " +
+// event.getProcessInstance().getProcessId() +
+// "[" + event.getProcessInstance().getId() + "]");
+// }
+// public void afterRuleFlowStarted(RuleFlowStartedEvent event,
+// WorkingMemory workingMemory) {
+// System.out.println("Process instance started: " +
+// event.getProcessInstance().getProcessId() +
+// "[" + event.getProcessInstance().getId() + "]");
+// }
+// });
+ // TODO
+ EJB3ProcessInstanceManager processInstanceManager =
+ (EJB3ProcessInstanceManager)((InternalWorkingMemory) workingMemory).getProcessInstanceManager();
+ processInstanceManager.setEntityManager(manager);
+ processInstanceManager.setWorkingMemory(workingMemory);
return workingMemory;
}
- private void persistProcessInstances(WorkingMemory workingMemory) {
- for (ProcessInstance pi: workingMemory.getProcessInstances()) {
- // persist process instance if necessary
- ProcessInstanceInfo processInstanceInfo = manager.find(ProcessInstanceInfo.class, pi.getId());
- if (processInstanceInfo == null) {
- processInstanceInfo = new ProcessInstanceInfo();
- }
- processInstanceInfo.setProcessInstance(pi);
- manager.persist(processInstanceInfo);
- System.out.println("Persisted process instance" + pi.getId());
+ private void persistProcessInstance(long processInstanceId) {
+
+ }
+
+ private void persistProcessInstance(ProcessInstance processInstance) {
+ ProcessInstanceInfo processInstanceInfo = manager.find(ProcessInstanceInfo.class, processInstance.getId());
+ if (processInstanceInfo == null) {
+ processInstanceInfo = new ProcessInstanceInfo();
}
+ processInstanceInfo.setProcessInstance(processInstance);
+ manager.merge(processInstanceInfo);
+ manager.flush();
+ System.out.println("Persisted process instance " + processInstanceInfo.getId());
// TODO remove process instances that are not longer there
// TODO make smarter, e.g. by registering a listener
// before starting execution and only updating changed instances
Modified: labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/test/java/org/drools/process/enterprise/client/ProcessRepositoryClient.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/test/java/org/drools/process/enterprise/client/ProcessRepositoryClient.java 2008-06-05 09:38:35 UTC (rev 20325)
+++ labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/test/java/org/drools/process/enterprise/client/ProcessRepositoryClient.java 2008-06-05 09:38:43 UTC (rev 20326)
@@ -15,7 +15,7 @@
"<process xmlns=\"http://drools.org/drools-4.0/process\"\n" +
" xmlns:xs=\"http://www.w3.org/2001/XMLSchema-instance\"\n" +
" xs:schemaLocation=\"http://drools.org/drools-4.0/process drools-processes-4.0.xsd\"\n" +
- " type=\"RuleFlow\" name=\"ruleflow\" id=\"com.sample.ruleflow\" package-name=\"com.sample\" >\n" +
+ " type=\"RuleFlow\" name=\"ruleflow\" id=\"com.sample.ruleflow\" package-name=\"com.sample\" version=\"1\">\n" +
"\n" +
" <header>\n" +
" </header>\n" +
More information about the jboss-svn-commits
mailing list