[jboss-svn-commits] JBL Code SVN: r24677 - in labs/jbossrules/trunk: drools-core/src/main/java/org/drools/process/command/impl and 4 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Tue Jan 13 12:18:06 EST 2009
Author: KrisVerlaenen
Date: 2009-01-13 12:18:06 -0500 (Tue, 13 Jan 2009)
New Revision: 24677
Added:
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/AbortWorkItemCommand.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/Interceptor.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/impl/AbstractInterceptor.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/impl/AsynchronousInterceptor.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/impl/LoggingInterceptor.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/impl/TransactionInterceptor.java
labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/main/java/org/drools/persistence/session/CommandBasedStatefulKnowledgeSession.java
labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/test/java/org/drools/persistence/session/PersistentStatefulSessionTest.java
labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/test/resources/WorkItemsProcess.rf
Removed:
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/impl/AsynchronousCommandService.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/impl/StatefulSessionCommandService.java
Modified:
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/Command.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/CommandService.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/CompleteWorkItemCommand.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/GetProcessInstanceCommand.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/InsertObjectCommand.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/SignalEventCommand.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/StartProcessCommand.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/impl/DefaultCommandService.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/resources/META-INF/drools.rulebase.conf
Log:
JBRULES-1915: Improve process persistence usability
- added partial command-based implementation of StatefulKnowledgeSession
Added: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/AbortWorkItemCommand.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/AbortWorkItemCommand.java (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/AbortWorkItemCommand.java 2009-01-13 17:18:06 UTC (rev 24677)
@@ -0,0 +1,26 @@
+package org.drools.process.command;
+
+import org.drools.StatefulSession;
+
+public class AbortWorkItemCommand implements Command<Object> {
+
+ private long workItemId;
+
+ public long getWorkItemId() {
+ return workItemId;
+ }
+
+ public void setWorkItemId(long workItemId) {
+ this.workItemId = workItemId;
+ }
+
+ public Object execute(StatefulSession session) {
+ session.getWorkItemManager().abortWorkItem(workItemId);
+ return null;
+ }
+
+ public String toString() {
+ return "session.getWorkItemManager().abortWorkItem(" + workItemId + ");";
+ }
+
+}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/Command.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/Command.java 2009-01-13 17:02:55 UTC (rev 24676)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/Command.java 2009-01-13 17:18:06 UTC (rev 24677)
@@ -1,9 +1,9 @@
package org.drools.process.command;
-import org.drools.WorkingMemory;
+import org.drools.StatefulSession;
public interface Command<T> {
- T execute(WorkingMemory workingMemory);
+ T execute(StatefulSession session);
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/CommandService.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/CommandService.java 2009-01-13 17:02:55 UTC (rev 24676)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/CommandService.java 2009-01-13 17:18:06 UTC (rev 24677)
@@ -1,7 +1,13 @@
package org.drools.process.command;
+import org.drools.StatefulSession;
+
public interface CommandService {
<T> T execute(Command<T> command);
+ StatefulSession getSession();
+
+ void dispose();
+
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/CompleteWorkItemCommand.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/CompleteWorkItemCommand.java 2009-01-13 17:02:55 UTC (rev 24676)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/CompleteWorkItemCommand.java 2009-01-13 17:18:06 UTC (rev 24677)
@@ -3,7 +3,7 @@
import java.util.HashMap;
import java.util.Map;
-import org.drools.WorkingMemory;
+import org.drools.StatefulSession;
public class CompleteWorkItemCommand implements Command<Object> {
@@ -26,9 +26,24 @@
this.results = results;
}
- public Object execute(WorkingMemory workingMemory) {
- workingMemory.getWorkItemManager().completeWorkItem(workItemId, results);
+ public Object execute(StatefulSession session) {
+ session.getWorkItemManager().completeWorkItem(workItemId, results);
return null;
}
+ public String toString() {
+ String result = "session.getWorkItemManager().completeWorkItem(" + workItemId + ", [";
+ if (results != null) {
+ int i = 0;
+ for (Map.Entry<String, Object> entry: results.entrySet()) {
+ if (i++ > 0) {
+ result += ", ";
+ }
+ result += entry.getKey() + "=" + entry.getValue();
+ }
+ }
+ result += "]);";
+ return result;
+ }
+
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/GetProcessInstanceCommand.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/GetProcessInstanceCommand.java 2009-01-13 17:02:55 UTC (rev 24676)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/GetProcessInstanceCommand.java 2009-01-13 17:18:06 UTC (rev 24677)
@@ -1,6 +1,8 @@
package org.drools.process.command;
-import org.drools.WorkingMemory;
+import java.util.Map;
+
+import org.drools.StatefulSession;
import org.drools.process.instance.ProcessInstance;
public class GetProcessInstanceCommand implements Command<ProcessInstance> {
@@ -15,11 +17,15 @@
this.processInstanceId = processInstanceId;
}
- public ProcessInstance execute(WorkingMemory workingMemory) {
+ public ProcessInstance execute(StatefulSession session) {
if (processInstanceId == null) {
return null;
}
- return workingMemory.getProcessInstance(processInstanceId);
+ return session.getProcessInstance(processInstanceId);
}
+ public String toString() {
+ return "session.getProcessInstance(" + processInstanceId + ");";
+ }
+
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/InsertObjectCommand.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/InsertObjectCommand.java 2009-01-13 17:02:55 UTC (rev 24676)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/InsertObjectCommand.java 2009-01-13 17:18:06 UTC (rev 24677)
@@ -3,7 +3,7 @@
import java.util.ArrayList;
import java.util.List;
-import org.drools.WorkingMemory;
+import org.drools.StatefulSession;
public class InsertObjectCommand implements Command<Object> {
@@ -18,11 +18,23 @@
this.objects = objects;
}
- public Object execute(WorkingMemory workingMemory) {
+ public Object execute(StatefulSession session) {
for (Object object: objects) {
- workingMemory.insert(object);
+ session.insert(object);
}
return null;
}
+ public String toString() {
+ String result = "";
+ int i = 0;
+ for (Object object: objects) {
+ if (i++ > 0) {
+ result += "\n";
+ }
+ result += "session.insert(" + object + ");";
+ }
+ return result;
+ }
+
}
Added: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/Interceptor.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/Interceptor.java (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/Interceptor.java 2009-01-13 17:18:06 UTC (rev 24677)
@@ -0,0 +1,10 @@
+package org.drools.process.command;
+
+
+public interface Interceptor extends CommandService {
+
+ void setNext(CommandService commandService);
+
+ CommandService getNext();
+
+}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/SignalEventCommand.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/SignalEventCommand.java 2009-01-13 17:02:55 UTC (rev 24676)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/SignalEventCommand.java 2009-01-13 17:18:06 UTC (rev 24677)
@@ -1,7 +1,7 @@
package org.drools.process.command;
+import org.drools.StatefulSession;
import org.drools.process.instance.ProcessInstance;
-import org.drools.WorkingMemory;
public class SignalEventCommand implements Command<Object> {
@@ -33,11 +33,11 @@
this.event = event;
}
- public Object execute(WorkingMemory workingMemory) {
+ public Object execute(StatefulSession session) {
if (processInstanceId == -1) {
- workingMemory.getSignalManager().signalEvent(eventType, event);
+ session.getSignalManager().signalEvent(eventType, event);
} else {
- ProcessInstance processInstance = ( ProcessInstance ) workingMemory.getProcessInstance(processInstanceId);
+ ProcessInstance processInstance = session.getProcessInstance(processInstanceId);
if (processInstance != null) {
processInstance.signalEvent(eventType, processInstance);
}
@@ -45,4 +45,12 @@
return null;
}
+ public String toString() {
+ if (processInstanceId == -1) {
+ return "session.getSignalManager().signalEvent(" + eventType + ", " + event + ");";
+ } else {
+ return "processInstance.signalEvent(" + eventType + ", " + event + ");";
+ }
+ }
+
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/StartProcessCommand.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/StartProcessCommand.java 2009-01-13 17:02:55 UTC (rev 24676)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/StartProcessCommand.java 2009-01-13 17:18:06 UTC (rev 24677)
@@ -4,8 +4,8 @@
import java.util.List;
import java.util.Map;
+import org.drools.StatefulSession;
import org.drools.process.instance.ProcessInstance;
-import org.drools.WorkingMemory;
public class StartProcessCommand implements Command<ProcessInstance> {
@@ -37,15 +37,30 @@
this.data = data;
}
- public ProcessInstance execute(WorkingMemory workingMemory) {
+ public ProcessInstance execute(StatefulSession session) {
if (data != null) {
for (Object o: data) {
- workingMemory.insert(o);
+ session.insert(o);
}
}
- ProcessInstance processInstance = ( ProcessInstance ) workingMemory.startProcess(processId, parameters);
- workingMemory.fireAllRules();
+ ProcessInstance processInstance = (ProcessInstance) session.startProcess(processId, parameters);
+ session.fireAllRules();
return processInstance;
}
+ public String toString() {
+ String result = "session.startProcess(" + processId + ", [";
+ if (parameters != null) {
+ int i = 0;
+ for (Map.Entry<String, Object> entry: parameters.entrySet()) {
+ if (i++ > 0) {
+ result += ", ";
+ }
+ result += entry.getKey() + "=" + entry.getValue();
+ }
+ }
+ result += "]);";
+ return result;
+ }
+
}
Added: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/impl/AbstractInterceptor.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/impl/AbstractInterceptor.java (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/impl/AbstractInterceptor.java 2009-01-13 17:18:06 UTC (rev 24677)
@@ -0,0 +1,32 @@
+package org.drools.process.command.impl;
+
+import org.drools.StatefulSession;
+import org.drools.process.command.Command;
+import org.drools.process.command.CommandService;
+import org.drools.process.command.Interceptor;
+
+public abstract class AbstractInterceptor implements Interceptor {
+
+ private CommandService next;
+
+ public StatefulSession getSession() {
+ return next.getSession();
+ }
+
+ public void setNext(CommandService commandService) {
+ this.next = commandService;
+ }
+
+ public CommandService getNext() {
+ return next;
+ }
+
+ protected <T> T executeNext(Command<T> command) {
+ return next.execute(command);
+ }
+
+ public void dispose() {
+ next.dispose();
+ }
+
+}
Deleted: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/impl/AsynchronousCommandService.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/impl/AsynchronousCommandService.java 2009-01-13 17:02:55 UTC (rev 24676)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/impl/AsynchronousCommandService.java 2009-01-13 17:18:06 UTC (rev 24677)
@@ -1,24 +0,0 @@
-package org.drools.process.command.impl;
-
-import org.drools.process.command.Command;
-import org.drools.process.command.CommandService;
-import org.drools.WorkingMemory;
-
-public class AsynchronousCommandService implements CommandService {
-
- private WorkingMemory workingMemory;
-
- public AsynchronousCommandService(WorkingMemory workingMemory) {
- this.workingMemory = workingMemory;
- }
-
- public <T> T execute(final Command<T> command) {
- new Thread(new Runnable() {
- public void run() {
- command.execute(workingMemory);
- }
- }).start();
- return null;
- }
-
-}
Copied: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/impl/AsynchronousInterceptor.java (from rev 24649, labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/impl/AsynchronousCommandService.java)
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/impl/AsynchronousInterceptor.java (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/impl/AsynchronousInterceptor.java 2009-01-13 17:18:06 UTC (rev 24677)
@@ -0,0 +1,16 @@
+package org.drools.process.command.impl;
+
+import org.drools.process.command.Command;
+
+public class AsynchronousInterceptor extends AbstractInterceptor {
+
+ public <T> T execute(final Command<T> command) {
+ new Thread(new Runnable() {
+ public void run() {
+ executeNext(command);
+ }
+ }).start();
+ return null;
+ }
+
+}
Property changes on: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/impl/AsynchronousInterceptor.java
___________________________________________________________________
Name: svn:mergeinfo
+
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/impl/DefaultCommandService.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/impl/DefaultCommandService.java 2009-01-13 17:02:55 UTC (rev 24676)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/impl/DefaultCommandService.java 2009-01-13 17:18:06 UTC (rev 24677)
@@ -1,19 +1,27 @@
package org.drools.process.command.impl;
+import org.drools.StatefulSession;
import org.drools.process.command.Command;
import org.drools.process.command.CommandService;
-import org.drools.WorkingMemory;
public class DefaultCommandService implements CommandService {
- private WorkingMemory workingMemory;
+ private StatefulSession session;
- public DefaultCommandService(WorkingMemory workingMemory) {
- this.workingMemory = workingMemory;
+ public DefaultCommandService(StatefulSession session) {
+ this.session = session;
}
+ public StatefulSession getSession() {
+ return session;
+ }
+
public <T> T execute(Command<T> command) {
- return command.execute(workingMemory);
+ return command.execute(session);
}
+
+ public void dispose() {
+ session.dispose();
+ }
}
Added: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/impl/LoggingInterceptor.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/impl/LoggingInterceptor.java (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/impl/LoggingInterceptor.java 2009-01-13 17:18:06 UTC (rev 24677)
@@ -0,0 +1,14 @@
+package org.drools.process.command.impl;
+
+import org.drools.process.command.Command;
+
+public class LoggingInterceptor extends AbstractInterceptor {
+
+ public <T> T execute(Command<T> command) {
+ System.out.println("Executing --> " + command);
+ T result = executeNext(command);
+ System.out.println("Done executing --> " + command);
+ return result;
+ }
+
+}
Deleted: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/impl/StatefulSessionCommandService.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/impl/StatefulSessionCommandService.java 2009-01-13 17:02:55 UTC (rev 24676)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/impl/StatefulSessionCommandService.java 2009-01-13 17:18:06 UTC (rev 24677)
@@ -1,41 +0,0 @@
-package org.drools.process.command.impl;
-
-import javax.transaction.xa.XAException;
-
-import org.drools.StatefulSession;
-import org.drools.persistence.Persister;
-import org.drools.persistence.Transaction;
-import org.drools.persistence.memory.MemoryPersister;
-import org.drools.persistence.session.StatefulSessionSnapshotter;
-import org.drools.process.command.Command;
-import org.drools.process.command.CommandService;
-
-public class StatefulSessionCommandService implements CommandService {
-
- private StatefulSession session;
-
- public StatefulSessionCommandService(StatefulSession session) {
- this.session = session;
- }
-
- public <T> T execute(Command<T> command) {
- Persister<StatefulSession> persister =
- new MemoryPersister<StatefulSession>(new StatefulSessionSnapshotter(session));
- persister.save();
- Transaction transaction = persister.getTransaction();
- try {
- transaction.start();
- T result = command.execute(session);
- transaction.commit();
- return result;
- } catch (Throwable t) {
- try {
- transaction.rollback();
- throw new RuntimeException("Could not execute command", t);
- } catch (XAException e) {
- throw new RuntimeException("Could not rollback transaction", e);
- }
- }
- }
-
-}
Copied: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/impl/TransactionInterceptor.java (from rev 24649, labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/impl/StatefulSessionCommandService.java)
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/impl/TransactionInterceptor.java (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/impl/TransactionInterceptor.java 2009-01-13 17:18:06 UTC (rev 24677)
@@ -0,0 +1,34 @@
+package org.drools.process.command.impl;
+
+import javax.transaction.xa.XAException;
+
+import org.drools.StatefulSession;
+import org.drools.persistence.Persister;
+import org.drools.persistence.Transaction;
+import org.drools.persistence.memory.MemoryPersister;
+import org.drools.persistence.session.StatefulSessionSnapshotter;
+import org.drools.process.command.Command;
+
+public class TransactionInterceptor extends AbstractInterceptor {
+
+ public <T> T execute(Command<T> command) {
+ Persister<StatefulSession> persister =
+ new MemoryPersister<StatefulSession>(new StatefulSessionSnapshotter(getSession()));
+ persister.save();
+ Transaction transaction = persister.getTransaction();
+ try {
+ transaction.start();
+ T result = super.executeNext(command);
+ transaction.commit();
+ return result;
+ } catch (Throwable t) {
+ try {
+ transaction.rollback();
+ throw new RuntimeException("Could not execute command", t);
+ } catch (XAException e) {
+ throw new RuntimeException("Could not rollback transaction", e);
+ }
+ }
+ }
+
+}
Property changes on: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/command/impl/TransactionInterceptor.java
___________________________________________________________________
Name: svn:mergeinfo
+
Added: labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/main/java/org/drools/persistence/session/CommandBasedStatefulKnowledgeSession.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/main/java/org/drools/persistence/session/CommandBasedStatefulKnowledgeSession.java (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/main/java/org/drools/persistence/session/CommandBasedStatefulKnowledgeSession.java 2009-01-13 17:18:06 UTC (rev 24677)
@@ -0,0 +1,217 @@
+package org.drools.persistence.session;
+
+import java.util.Collection;
+import java.util.Map;
+
+import org.drools.KnowledgeBase;
+import org.drools.event.process.ProcessEventListener;
+import org.drools.event.rule.AgendaEventListener;
+import org.drools.event.rule.WorkingMemoryEventListener;
+import org.drools.process.command.AbortWorkItemCommand;
+import org.drools.process.command.CommandService;
+import org.drools.process.command.CompleteWorkItemCommand;
+import org.drools.process.command.GetProcessInstanceCommand;
+import org.drools.process.command.SignalEventCommand;
+import org.drools.process.command.StartProcessCommand;
+import org.drools.runtime.ExitPoint;
+import org.drools.runtime.GlobalResolver;
+import org.drools.runtime.ObjectFilter;
+import org.drools.runtime.StatefulKnowledgeSession;
+import org.drools.runtime.process.ProcessInstance;
+import org.drools.runtime.process.WorkItemHandler;
+import org.drools.runtime.process.WorkItemManager;
+import org.drools.runtime.rule.Agenda;
+import org.drools.runtime.rule.AgendaFilter;
+import org.drools.runtime.rule.FactHandle;
+import org.drools.runtime.rule.WorkingMemoryEntryPoint;
+import org.drools.time.SessionClock;
+
+public class CommandBasedStatefulKnowledgeSession implements StatefulKnowledgeSession {
+
+ private CommandService commandService;
+ private transient WorkItemManager workItemManager;
+
+ public CommandBasedStatefulKnowledgeSession(CommandService commandService) {
+ this.commandService = commandService;
+ }
+
+ public ProcessInstance getProcessInstance(long id) {
+ GetProcessInstanceCommand command = new GetProcessInstanceCommand();
+ command.setProcessInstanceId(id);
+ return commandService.execute(command);
+ }
+
+ public Collection<ProcessInstance> getProcessInstances() {
+ throw new UnsupportedOperationException();
+ }
+
+ public WorkItemManager getWorkItemManager() {
+ if (workItemManager == null) {
+ workItemManager = new WorkItemManager() {
+ public void completeWorkItem(long id, Map<String, Object> results) {
+ CompleteWorkItemCommand command = new CompleteWorkItemCommand();
+ command.setWorkItemId(id);
+ command.setResults(results);
+ commandService.execute(command);
+ }
+ public void abortWorkItem(long id) {
+ AbortWorkItemCommand command = new AbortWorkItemCommand();
+ command.setWorkItemId(id);
+ commandService.execute(command);
+ }
+ public void registerWorkItemHandler(String workItemName, WorkItemHandler handler) {
+ throw new UnsupportedOperationException();
+ }
+ };
+ }
+ return workItemManager;
+ }
+
+ public void signalEvent(String type, Object event) {
+ SignalEventCommand command = new SignalEventCommand();
+ command.setEventType(type);
+ command.setEvent(event);
+ commandService.execute(command);
+ }
+
+ public ProcessInstance startProcess(String processId) {
+ return startProcess(processId, null);
+ }
+
+ public ProcessInstance startProcess(String processId,
+ Map<String, Object> parameters) {
+ StartProcessCommand command = new StartProcessCommand();
+ command.setProcessId(processId);
+ command.setParameters(parameters);
+ return commandService.execute(command);
+ }
+
+ public void dispose() {
+ commandService.dispose();
+ }
+
+ public int fireAllRules() {
+ throw new UnsupportedOperationException();
+ }
+
+ public int fireAllRules(int max) {
+ throw new UnsupportedOperationException();
+ }
+
+ public int fireAllRules(AgendaFilter agendaFilter) {
+ throw new UnsupportedOperationException();
+ }
+
+ public void fireUntilHalt() {
+ throw new UnsupportedOperationException();
+ }
+
+ public void fireUntilHalt(AgendaFilter agendaFilter) {
+ throw new UnsupportedOperationException();
+ }
+
+ public KnowledgeBase getKnowledgeBase() {
+ throw new UnsupportedOperationException();
+ }
+
+ public void registerExitPoint(String name, ExitPoint exitPoint) {
+ throw new UnsupportedOperationException();
+ }
+
+ public void setGlobal(String identifier, Object object) {
+ throw new UnsupportedOperationException();
+ }
+
+ public void setGlobalResolver(GlobalResolver globalResolver) {
+ throw new UnsupportedOperationException();
+ }
+
+ public void unregisterExitPoint(String name) {
+ throw new UnsupportedOperationException();
+ }
+
+ public Agenda getAgenda() {
+ throw new UnsupportedOperationException();
+ }
+
+ public FactHandle getFactHandle(Object object) {
+ throw new UnsupportedOperationException();
+ }
+
+ public Collection<? extends FactHandle> getFactHandles() {
+ throw new UnsupportedOperationException();
+ }
+
+ public Collection<? extends FactHandle> getFactHandles(ObjectFilter filter) {
+ throw new UnsupportedOperationException();
+ }
+
+ public Collection<?> getObjects() {
+ throw new UnsupportedOperationException();
+ }
+
+ public Collection<?> getObjects(ObjectFilter filter) {
+ throw new UnsupportedOperationException();
+ }
+
+ public SessionClock getSessionClock() {
+ throw new UnsupportedOperationException();
+ }
+
+ public WorkingMemoryEntryPoint getWorkingMemoryEntryPoint(String name) {
+ throw new UnsupportedOperationException();
+ }
+
+ public void halt() {
+ throw new UnsupportedOperationException();
+ }
+
+ public FactHandle insert(Object object) {
+ throw new UnsupportedOperationException();
+ }
+
+ public void retract(FactHandle handle) {
+ throw new UnsupportedOperationException();
+ }
+
+ public void update(FactHandle handle, Object object) {
+ throw new UnsupportedOperationException();
+ }
+
+ public void addEventListener(WorkingMemoryEventListener listener) {
+ throw new UnsupportedOperationException();
+ }
+
+ public void addEventListener(AgendaEventListener listener) {
+ throw new UnsupportedOperationException();
+ }
+
+ public Collection<AgendaEventListener> getAgendaEventListeners() {
+ throw new UnsupportedOperationException();
+ }
+
+ public Collection<WorkingMemoryEventListener> getWorkingMemoryEventListeners() {
+ throw new UnsupportedOperationException();
+ }
+
+ public void removeEventListener(WorkingMemoryEventListener listener) {
+ throw new UnsupportedOperationException();
+ }
+
+ public void removeEventListener(AgendaEventListener listener) {
+ throw new UnsupportedOperationException();
+ }
+
+ public void addEventListener(ProcessEventListener listener) {
+ throw new UnsupportedOperationException();
+ }
+
+ public Collection<ProcessEventListener> getProcessEventListeners() {
+ throw new UnsupportedOperationException();
+ }
+
+ public void removeEventListener(ProcessEventListener listener) {
+ throw new UnsupportedOperationException();
+ }
+
+}
\ No newline at end of file
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 2009-01-13 17:02:55 UTC (rev 24676)
+++ labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/main/java/org/drools/persistence/session/SingleSessionCommandService.java 2009-01-13 17:18:06 UTC (rev 24677)
@@ -102,12 +102,16 @@
.setPersister(persister);
}
- public Object execute(Command command) {
+ public StatefulSession getSession() {
+ return persister.getObject();
+ }
+
+ public <T> T execute(Command<T> command) {
StatefulSession session = persister.getObject();
Transaction transaction = persister.getTransaction();
try {
transaction.start();
- Object result = command.execute(session);
+ T result = command.execute(session);
transaction.commit();
return result;
} catch (Throwable t) {
Added: labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/test/java/org/drools/persistence/session/PersistentStatefulSessionTest.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/test/java/org/drools/persistence/session/PersistentStatefulSessionTest.java (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/test/java/org/drools/persistence/session/PersistentStatefulSessionTest.java 2009-01-13 17:18:06 UTC (rev 24677)
@@ -0,0 +1,91 @@
+package org.drools.persistence.session;
+
+import junit.framework.TestCase;
+
+import org.drools.KnowledgeBase;
+import org.drools.KnowledgeBaseFactory;
+import org.drools.builder.KnowledgeBuilder;
+import org.drools.builder.KnowledgeBuilderFactory;
+import org.drools.builder.ResourceType;
+import org.drools.io.impl.ClassPathResource;
+import org.drools.process.command.impl.LoggingInterceptor;
+import org.drools.runtime.process.ProcessInstance;
+import org.drools.runtime.process.WorkItem;
+
+public class PersistentStatefulSessionTest extends TestCase {
+
+ public void testPersistenceWorkItems() {
+ KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
+ kbuilder.add(new ClassPathResource("WorkItemsProcess.rf"), ResourceType.DRF);
+ KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
+ kbase.addKnowledgePackages(kbuilder.getKnowledgePackages());
+
+ LoggingInterceptor interceptor = new LoggingInterceptor();
+ SingleSessionCommandService commandService = new SingleSessionCommandService(kbase);
+ interceptor.setNext(commandService);
+ CommandBasedStatefulKnowledgeSession session = new CommandBasedStatefulKnowledgeSession(interceptor);
+ ProcessInstance processInstance = session.startProcess("org.drools.test.TestProcess");
+ System.out.println("Started process instance " + processInstance.getId());
+ String sessionId = commandService.getSessionId();
+
+ TestWorkItemHandler handler = TestWorkItemHandler.getInstance();
+ WorkItem workItem = handler.getWorkItem();
+ assertNotNull(workItem);
+
+ interceptor = new LoggingInterceptor();
+ commandService = new SingleSessionCommandService(kbase, sessionId);
+ interceptor.setNext(commandService);
+ session = new CommandBasedStatefulKnowledgeSession(interceptor);
+ processInstance = session.getProcessInstance(processInstance.getId());
+ assertNotNull(processInstance);
+
+ interceptor = new LoggingInterceptor();
+ commandService = new SingleSessionCommandService(kbase, sessionId);
+ interceptor.setNext(commandService);
+ session = new CommandBasedStatefulKnowledgeSession(interceptor);
+ session.getWorkItemManager().completeWorkItem(workItem.getId(), null);
+
+ workItem = handler.getWorkItem();
+ assertNotNull(workItem);
+
+ interceptor = new LoggingInterceptor();
+ commandService = new SingleSessionCommandService(kbase, sessionId);
+ interceptor.setNext(commandService);
+ session = new CommandBasedStatefulKnowledgeSession(interceptor);
+ processInstance = session.getProcessInstance(processInstance.getId());
+ assertNotNull(processInstance);
+
+ interceptor = new LoggingInterceptor();
+ commandService = new SingleSessionCommandService(kbase, sessionId);
+ interceptor.setNext(commandService);
+ session = new CommandBasedStatefulKnowledgeSession(interceptor);
+ session.getWorkItemManager().completeWorkItem(workItem.getId(), null);
+
+ workItem = handler.getWorkItem();
+ assertNotNull(workItem);
+
+ interceptor = new LoggingInterceptor();
+ commandService = new SingleSessionCommandService(kbase, sessionId);
+ interceptor.setNext(commandService);
+ session = new CommandBasedStatefulKnowledgeSession(interceptor);
+ processInstance = session.getProcessInstance(processInstance.getId());
+ assertNotNull(processInstance);
+
+ interceptor = new LoggingInterceptor();
+ commandService = new SingleSessionCommandService(kbase, sessionId);
+ interceptor.setNext(commandService);
+ session = new CommandBasedStatefulKnowledgeSession(interceptor);
+ session.getWorkItemManager().completeWorkItem(workItem.getId(), null);
+
+ workItem = handler.getWorkItem();
+ assertNull(workItem);
+
+ interceptor = new LoggingInterceptor();
+ commandService = new SingleSessionCommandService(kbase, sessionId);
+ interceptor.setNext(commandService);
+ session = new CommandBasedStatefulKnowledgeSession(interceptor);
+ processInstance = session.getProcessInstance(processInstance.getId());
+ assertNull(processInstance);
+ }
+
+}
Modified: labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/test/resources/META-INF/drools.rulebase.conf
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/test/resources/META-INF/drools.rulebase.conf 2009-01-13 17:02:55 UTC (rev 24676)
+++ labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/test/resources/META-INF/drools.rulebase.conf 2009-01-13 17:18:06 UTC (rev 24677)
@@ -1 +1,4 @@
drools.workItemHandlers = MyWorkItemHandlers.conf
+processInstanceManagerFactory = org.drools.persistence.processinstance.JPAProcessInstanceManagerFactory
+workItemManagerFactory = org.drools.persistence.processinstance.JPAWorkItemManagerFactory
+processSignalManagerFactory = org.drools.persistence.processinstance.JPASignalManagerFactory
\ No newline at end of file
Added: labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/test/resources/WorkItemsProcess.rf
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/test/resources/WorkItemsProcess.rf (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-process-enterprise/src/test/resources/WorkItemsProcess.rf 2009-01-13 17:18:06 UTC (rev 24677)
@@ -0,0 +1,38 @@
+<?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="TestProcess" id="org.drools.test.TestProcess" package-name="org.drools.test" >
+
+ <header>
+ </header>
+
+ <nodes>
+ <actionNode id="2" name="Action" >
+ <action type="expression" dialect="java" >System.out.println("Executed action");</action>
+ </actionNode>
+ <workItem id="4" name="WorkItem2" >
+ <work name="MyWork" >
+ </work>
+ </workItem>
+ <end id="6" name="End" />
+ <start id="1" name="Start" />
+ <workItem id="3" name="WorkItem1" >
+ <work name="MyWork" >
+ </work>
+ </workItem>
+ <workItem id="5" name="WorkItem3" >
+ <work name="MyWork" >
+ </work>
+ </workItem>
+ </nodes>
+
+ <connections>
+ <connection from="1" to="2" />
+ <connection from="3" to="4" />
+ <connection from="5" to="6" />
+ <connection from="2" to="3" />
+ <connection from="4" to="5" />
+ </connections>
+
+</process>
\ No newline at end of file
More information about the jboss-svn-commits
mailing list