[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