[jboss-svn-commits] JBL Code SVN: r23326 - in labs/jbossrules/trunk/drools-process/drools-process-enterprise/src: main/java/org/drools/persistence/session and 3 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Mon Oct 6 09:11:49 EDT 2008


Author: KrisVerlaenen
Date: 2008-10-06 09:11:49 -0400 (Mon, 06 Oct 2008)
New Revision: 23326

Added:
   labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/main/java/org/drools/persistence/processinstance/JPASignalManager.java
   labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/main/java/org/drools/persistence/processinstance/JPASignalManagerFactory.java
   labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/main/resources/META-INF/orm.xml
Removed:
   labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/main/java/org/drools/process/enterprise/
Modified:
   labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/main/java/org/drools/persistence/processinstance/JPAProcessInstanceManager.java
   labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/main/java/org/drools/persistence/processinstance/ProcessInstanceEventInfo.java
   labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/main/java/org/drools/persistence/processinstance/ProcessInstanceInfo.java
   labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/main/java/org/drools/persistence/session/SingleSessionCommandService.java
   labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/test/java/org/drools/persistence/session/SingleSessionCommandServiceTest.java
Log:
JBRULES-1755: Add default process persistence / transaction support
 - added notification of external events

Modified: labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/main/java/org/drools/persistence/processinstance/JPAProcessInstanceManager.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/main/java/org/drools/persistence/processinstance/JPAProcessInstanceManager.java	2008-10-06 13:09:45 UTC (rev 23325)
+++ labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/main/java/org/drools/persistence/processinstance/JPAProcessInstanceManager.java	2008-10-06 13:11:49 UTC (rev 23326)
@@ -8,6 +8,7 @@
 import org.drools.WorkingMemory;
 import org.drools.common.InternalRuleBase;
 import org.drools.common.InternalWorkingMemory;
+import org.drools.process.core.Process;
 import org.drools.process.instance.ProcessInstance;
 import org.drools.process.instance.ProcessInstanceManager;
 import org.drools.process.instance.impl.ProcessInstanceImpl;
@@ -42,7 +43,12 @@
         }
         processInstanceInfo.updateLastReadDate();
         ProcessInstance processInstance = processInstanceInfo.getProcessInstance();
-        processInstance.setProcess(((InternalRuleBase) workingMemory.getRuleBase()).getProcess(processInstance.getProcessId()));
+        Process process = ((InternalRuleBase) workingMemory.getRuleBase()).getProcess(processInstance.getProcessId());
+        if (process == null) {
+        	throw new IllegalArgumentException(
+    			"Could not find process " + processInstance.getProcessId());
+        }
+        processInstance.setProcess(process);
         if (processInstance.getWorkingMemory() == null) {
             processInstance.setWorkingMemory((InternalWorkingMemory) workingMemory);
             ((ProcessInstanceImpl) processInstance).reconnect();

Added: labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/main/java/org/drools/persistence/processinstance/JPASignalManager.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/main/java/org/drools/persistence/processinstance/JPASignalManager.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/main/java/org/drools/persistence/processinstance/JPASignalManager.java	2008-10-06 13:11:49 UTC (rev 23326)
@@ -0,0 +1,39 @@
+package org.drools.persistence.processinstance;
+
+import java.util.List;
+
+import javax.persistence.EntityManager;
+import javax.persistence.Query;
+
+import org.drools.WorkingMemory;
+import org.drools.process.instance.event.DefaultSignalManager;
+
+public class JPASignalManager extends DefaultSignalManager {
+
+    private EntityManager manager;
+    private WorkingMemory workingMemory;
+    
+    public JPASignalManager(WorkingMemory workingMemory) {
+    	this.workingMemory = workingMemory;
+    }
+    
+    public void setEntityManager(EntityManager manager) {
+        this.manager = manager;
+    }
+    
+    public void signalEvent(String type, Object event) {
+    	for (long id: getProcessInstancesForEvent(type)) {
+    		workingMemory.getProcessInstance(id);
+    	}
+    	super.signalEvent(type, event);
+    }
+    
+    @SuppressWarnings("unchecked")
+	private List<Long> getProcessInstancesForEvent(String type) {
+    	Query processInstancesForEvent = manager.createNamedQuery("ProcessInstancesWaitingForEvent");
+		processInstancesForEvent.setParameter("type", type);
+		List<Long> list = (List<Long>) processInstancesForEvent.getResultList();
+		return list;
+    }
+    
+}
\ No newline at end of file

Added: labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/main/java/org/drools/persistence/processinstance/JPASignalManagerFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/main/java/org/drools/persistence/processinstance/JPASignalManagerFactory.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/main/java/org/drools/persistence/processinstance/JPASignalManagerFactory.java	2008-10-06 13:11:49 UTC (rev 23326)
@@ -0,0 +1,13 @@
+package org.drools.persistence.processinstance;
+
+import org.drools.WorkingMemory;
+import org.drools.process.instance.event.SignalManager;
+import org.drools.process.instance.event.SignalManagerFactory;
+
+public class JPASignalManagerFactory implements SignalManagerFactory {
+
+	public SignalManager createSignalManager(WorkingMemory workingMemory) {
+		return new JPASignalManager(workingMemory);
+	}
+
+}

Modified: labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/main/java/org/drools/persistence/processinstance/ProcessInstanceEventInfo.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/main/java/org/drools/persistence/processinstance/ProcessInstanceEventInfo.java	2008-10-06 13:09:45 UTC (rev 23325)
+++ labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/main/java/org/drools/persistence/processinstance/ProcessInstanceEventInfo.java	2008-10-06 13:11:49 UTC (rev 23326)
@@ -4,6 +4,8 @@
 import javax.persistence.GeneratedValue;
 import javax.persistence.GenerationType;
 import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
 
 @Entity
 public class ProcessInstanceEventInfo {

Modified: labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/main/java/org/drools/persistence/processinstance/ProcessInstanceInfo.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/main/java/org/drools/persistence/processinstance/ProcessInstanceInfo.java	2008-10-06 13:09:45 UTC (rev 23325)
+++ labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/main/java/org/drools/persistence/processinstance/ProcessInstanceInfo.java	2008-10-06 13:11:49 UTC (rev 23326)
@@ -5,6 +5,8 @@
 import java.io.IOException;
 import java.util.Arrays;
 import java.util.Date;
+import java.util.HashSet;
+import java.util.Set;
 
 import javax.persistence.Entity;
 import javax.persistence.GeneratedValue;
@@ -20,6 +22,7 @@
 import org.drools.marshalling.OutputMarshaller;
 import org.drools.process.instance.ProcessInstance;
 import org.drools.ruleflow.instance.RuleFlowProcessInstance;
+import org.hibernate.annotations.CollectionOfElements;
 
 @Entity
 public class ProcessInstanceInfo {
@@ -30,9 +33,11 @@
 	private Date lastReadDate;
 	private Date lastModificationDate;
 	private int state;
-	private @Lob byte[] processInstanceByteArray;
 	// TODO How do I mark a process instance info as dirty when the process instance
 	// has changed (so that byte array is regenerated and saved) ?
+	private @Lob byte[] processInstanceByteArray;
+	@CollectionOfElements
+	private Set<String> eventTypes = new HashSet<String>();
 	private @Transient ProcessInstance processInstance;
 	
 	ProcessInstanceInfo() {
@@ -104,6 +109,10 @@
 			this.state = processInstance.getState();
 			this.lastModificationDate = new Date();
 			this.processInstanceByteArray = newByteArray;
+			this.eventTypes.clear(); 
+			for (String type: processInstance.getEventTypes()) {
+				eventTypes.add(type);
+			}
 		}
 	}
 	

Modified: labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/main/java/org/drools/persistence/session/SingleSessionCommandService.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/main/java/org/drools/persistence/session/SingleSessionCommandService.java	2008-10-06 13:09:45 UTC (rev 23325)
+++ labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/main/java/org/drools/persistence/session/SingleSessionCommandService.java	2008-10-06 13:11:49 UTC (rev 23326)
@@ -4,12 +4,12 @@
 
 import org.drools.RuleBase;
 import org.drools.StatefulSession;
-import org.drools.audit.WorkingMemoryConsoleLogger;
 import org.drools.common.InternalWorkingMemory;
 import org.drools.persistence.Persister;
 import org.drools.persistence.Transaction;
 import org.drools.persistence.jpa.JPAPersister;
 import org.drools.persistence.processinstance.JPAProcessInstanceManager;
+import org.drools.persistence.processinstance.JPASignalManager;
 import org.drools.persistence.processinstance.JPAWorkItemManager;
 import org.drools.process.command.Command;
 import org.drools.process.command.CommandService;
@@ -34,6 +34,8 @@
 			.setEntityManager(((JPAPersister<StatefulSession>) persister).getEntityManager());
 		((JPAWorkItemManager) ((InternalWorkingMemory) session).getWorkItemManager())
 			.setEntityManager(((JPAPersister<StatefulSession>) persister).getEntityManager());
+		((JPASignalManager) ((InternalWorkingMemory) session).getSignalManager())
+			.setEntityManager(((JPAPersister<StatefulSession>) persister).getEntityManager());
 	}
 	
 	public Object execute(Command command) {
@@ -45,6 +47,7 @@
 			transaction.commit();
 			return result;
 		} catch (Throwable t) {
+			t.printStackTrace();
 			try {
 				transaction.rollback();
 				throw new RuntimeException("Could not execute command", t);

Added: labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/main/resources/META-INF/orm.xml
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/main/resources/META-INF/orm.xml	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/main/resources/META-INF/orm.xml	2008-10-06 13:11:49 UTC (rev 23326)
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<entity-mappings xmlns="http://java.sun.com/xml/ns/persistence/orm"
+               xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+               xsi:schemaLocation="http://java.sun.com/xml/ns/persistence/orm orm_1_0.xsd"
+               version="1.0">  
+      <named-query name="ProcessInstancesWaitingForEvent">
+          <query>
+select 
+    processInstanceInfo.processInstanceId
+from 
+    ProcessInstanceInfo processInstanceInfo
+where
+    :type in elements(processInstanceInfo.eventTypes)
+          </query>
+      </named-query>
+</entity-mappings>

Modified: labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/test/java/org/drools/persistence/session/SingleSessionCommandServiceTest.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/test/java/org/drools/persistence/session/SingleSessionCommandServiceTest.java	2008-10-06 13:09:45 UTC (rev 23325)
+++ labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/test/java/org/drools/persistence/session/SingleSessionCommandServiceTest.java	2008-10-06 13:11:49 UTC (rev 23326)
@@ -56,6 +56,9 @@
 		properties.put(
 	        "workItemManagerFactory", 
 	        "org.drools.persistence.processinstance.JPAWorkItemManagerFactory");
+		properties.put(
+	        "processSignalManagerFactory", 
+	        "org.drools.persistence.processinstance.JPASignalManagerFactory");
         RuleBaseConfiguration conf = new RuleBaseConfiguration(properties);
         RuleBase ruleBase = RuleBaseFactory.newRuleBase(conf);
         Package pkg = getProcessWorkItems();
@@ -182,6 +185,9 @@
 		properties.put(
 	        "workItemManagerFactory", 
 	        "org.drools.persistence.processinstance.JPAWorkItemManagerFactory");
+		properties.put(
+	        "processSignalManagerFactory", 
+	        "org.drools.persistence.processinstance.JPASignalManagerFactory");
         RuleBaseConfiguration conf = new RuleBaseConfiguration(properties);
         RuleBase ruleBase = RuleBaseFactory.newRuleBase(conf);
         Package pkg = getProcessSubProcess();
@@ -219,15 +225,16 @@
         service.execute(completeWorkItemCommand);
 
         service = new SingleSessionCommandService(ruleBase);
+
         getProcessInstanceCommand = new GetProcessInstanceCommand();
+        getProcessInstanceCommand.setProcessInstanceId(subProcessInstanceId);
+        subProcessInstance = (RuleFlowProcessInstance) service.execute(getProcessInstanceCommand);
+        assertNull(subProcessInstance);
+
+        getProcessInstanceCommand = new GetProcessInstanceCommand();
         getProcessInstanceCommand.setProcessInstanceId(processInstanceId);
         processInstance = (RuleFlowProcessInstance) service.execute(getProcessInstanceCommand);
         assertNull(processInstance);
-        
-        getProcessInstanceCommand = new GetProcessInstanceCommand();
-        getProcessInstanceCommand.setProcessInstanceId(subProcessInstanceId);
-        subProcessInstance = (RuleFlowProcessInstance) service.execute(getProcessInstanceCommand);
-        assertNull(subProcessInstance);
 	}
 	
 	private Package getProcessSubProcess() {
@@ -307,6 +314,9 @@
 		properties.put(
 	        "workItemManagerFactory", 
 	        "org.drools.persistence.processinstance.JPAWorkItemManagerFactory");
+		properties.put(
+	        "processSignalManagerFactory", 
+	        "org.drools.persistence.processinstance.JPASignalManagerFactory");
         RuleBaseConfiguration conf = new RuleBaseConfiguration(properties);
         RuleBase ruleBase = RuleBaseFactory.newRuleBase(conf);
         Package pkg = getProcessTimer();




More information about the jboss-svn-commits mailing list