[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