[jboss-svn-commits] JBL Code SVN: r34927 - in labs/jbossrules/trunk: drools-core/src/main/java/org/drools/impl and 1 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Fri Aug 27 21:44:30 EDT 2010
Author: KrisVerlaenen
Date: 2010-08-27 21:44:30 -0400 (Fri, 27 Aug 2010)
New Revision: 34927
Added:
labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/ProcessMarshallingTest.java
Removed:
labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/ProcessMarchallingTest.java
Modified:
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/impl/StatelessKnowledgeSessionImpl.java
labs/jbossrules/trunk/drools-flow-core/
Log:
JBRULES-2679: Modularize Drools Flow
- few missing changes
Deleted: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/ProcessMarchallingTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/ProcessMarchallingTest.java 2010-08-27 16:20:59 UTC (rev 34926)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/ProcessMarchallingTest.java 2010-08-28 01:44:30 UTC (rev 34927)
@@ -1,630 +0,0 @@
-package org.drools.integrationtests;
-
-import static org.drools.integrationtests.SerializationHelper.getSerialisedStatefulSession;
-
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.StringReader;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import junit.framework.TestCase;
-
-import org.drools.Person;
-import org.drools.RuleBase;
-import org.drools.RuleBaseFactory;
-import org.drools.StatefulSession;
-import org.drools.compiler.PackageBuilder;
-import org.drools.impl.StatefulKnowledgeSessionImpl;
-import org.drools.marshalling.Marshaller;
-import org.drools.marshalling.MarshallerFactory;
-import org.drools.process.core.context.variable.VariableScope;
-import org.drools.process.instance.ProcessInstance;
-import org.drools.process.instance.context.variable.VariableScopeInstance;
-import org.drools.reteoo.ReteooWorkingMemory;
-import org.drools.rule.Package;
-import org.drools.runtime.StatefulKnowledgeSession;
-import org.drools.runtime.process.WorkItem;
-import org.drools.runtime.process.WorkItemHandler;
-import org.drools.runtime.process.WorkItemManager;
-
-public class ProcessMarchallingTest extends TestCase {
-
- @SuppressWarnings("unchecked")
- public void test1() throws Exception {
- String rule = "package org.test;\n";
- rule += "import org.drools.Person\n";
- rule += "global java.util.List list\n";
- rule += "rule \"Rule 1\"\n";
- rule += " ruleflow-group \"hello\"\n";
- rule += "when\n";
- rule += " $p : Person( ) \n";
- rule += "then\n";
- rule += " list.add( $p );\n";
- rule += "end";
-
- final PackageBuilder builder = new PackageBuilder();
- builder.addPackageFromDrl( new StringReader( rule ));
-
- String process =
- "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
- "<process xmlns=\"http://drools.org/drools-5.0/process\"\n" +
- " xmlns:xs=\"http://www.w3.org/2001/XMLSchema-instance\"\n" +
- " xs:schemaLocation=\"http://drools.org/drools-5.0/process drools-processes-5.0.xsd\"\n" +
- " type=\"RuleFlow\" name=\"ruleflow\" id=\"org.test.ruleflow\" package-name=\"org.test\" >\n" +
- " <header>\n" +
- " </header>\n" +
- " <nodes>\n" +
- " <start id=\"1\" name=\"Start\" />\n" +
- " <ruleSet id=\"2\" name=\"Hello\" ruleFlowGroup=\"hello\" />\n" +
- " <end id=\"3\" name=\"End\" />\n" +
- " </nodes>\n" +
- " <connections>\n" +
- " <connection from=\"1\" to=\"2\"/>\n" +
- " <connection from=\"2\" to=\"3\"/>\n" +
- " </connections>\n" +
- "</process>";
- builder.addProcessFromXml( new StringReader( process ));
- final Package pkg = builder.getPackage();
-
- final RuleBase ruleBase = RuleBaseFactory.newRuleBase();
- ruleBase.addPackage(pkg);
-
- StatefulSession session = ruleBase.newStatefulSession();
-
- List<Object> list = new ArrayList<Object>();
- session.setGlobal( "list", list );
-
- Person p = new Person( "bobba fet", 32);
- session.insert( p );
- session.startProcess("org.test.ruleflow");
-
- assertEquals(1, session.getProcessInstances().size());
-
- session = getSerialisedStatefulSession( session );
- assertEquals(1, session.getProcessInstances().size());
-
- session.fireAllRules();
-
- assertEquals( 1, ((List<Object>) session.getGlobal("list")).size());
- assertEquals( p, ((List<Object>) session.getGlobal("list")).get(0));
- assertEquals(0, session.getProcessInstances().size());
- }
-
- public void test2() throws Exception {
- String process =
- "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
- "<process xmlns=\"http://drools.org/drools-5.0/process\"\n" +
- " xmlns:xs=\"http://www.w3.org/2001/XMLSchema-instance\"\n" +
- " xs:schemaLocation=\"http://drools.org/drools-5.0/process drools-processes-5.0.xsd\"\n" +
- " type=\"RuleFlow\" name=\"ruleflow\" id=\"org.test.ruleflow\" package-name=\"org.test\" >\n" +
- " <header>\n" +
- " <variables>\n" +
- " <variable name=\"myVariable\" >\n" +
- " <type name=\"org.drools.process.core.datatype.impl.type.StringDataType\" />\n" +
- " <value>OldValue</value>\n" +
- " </variable>\n" +
- " </variables>\n" +
- " </header>\n" +
- " <nodes>\n" +
- " <start id=\"1\" name=\"Start\" />\n" +
- " <workItem id=\"2\" name=\"Email\" >\n" +
- " <work name=\"Email\" >\n" +
- " <parameter name=\"Subject\" >\n" +
- " <type name=\"org.drools.process.core.datatype.impl.type.StringDataType\" />\n" +
- " <value>Mail</value>\n" +
- " </parameter>\n" +
- " <parameter name=\"Text\" >\n" +
- " <type name=\"org.drools.process.core.datatype.impl.type.StringDataType\" />\n" +
- " <value>This is an email</value>\n" +
- " </parameter>\n" +
- " <parameter name=\"To\" >\n" +
- " <type name=\"org.drools.process.core.datatype.impl.type.StringDataType\" />\n" +
- " <value>you at mail.com</value>\n" +
- " </parameter>\n" +
- " <parameter name=\"From\" >\n" +
- " <type name=\"org.drools.process.core.datatype.impl.type.StringDataType\" />\n" +
- " <value>me at mail.com</value>\n" +
- " </parameter>\n" +
- " </work>\n" +
- " </workItem>\n" +
- " <end id=\"3\" name=\"End\" />\n" +
- " </nodes>\n" +
- " <connections>\n" +
- " <connection from=\"1\" to=\"2\"/>\n" +
- " <connection from=\"2\" to=\"3\"/>\n" +
- " </connections>\n" +
- "</process>";
- final PackageBuilder builder = new PackageBuilder();
- builder.addProcessFromXml( new StringReader( process ));
- final Package pkg = builder.getPackage();
-
- final RuleBase ruleBase = RuleBaseFactory.newRuleBase();
- ruleBase.addPackage(pkg);
-
- StatefulSession session = ruleBase.newStatefulSession();
- TestWorkItemHandler handler = new TestWorkItemHandler();
- session.getWorkItemManager().registerWorkItemHandler("Email", handler);
- Map<String, Object> variables = new HashMap<String, Object>();
- variables.put("myVariable", "ThisIsMyValue");
- session.startProcess("org.test.ruleflow", variables);
-
- assertEquals(1, session.getProcessInstances().size());
- assertTrue(handler.getWorkItem() != null);
-
- session = getSerialisedStatefulSession( session );
- assertEquals(1, session.getProcessInstances().size());
- VariableScopeInstance variableScopeInstance = (VariableScopeInstance)
- (( ProcessInstance )session.getProcessInstances().iterator().next()).getContextInstance(VariableScope.VARIABLE_SCOPE);
- assertEquals("ThisIsMyValue", variableScopeInstance.getVariable("myVariable"));
-
- session.getWorkItemManager().completeWorkItem(handler.getWorkItem().getId(), null);
-
- assertEquals(0, session.getProcessInstances().size());
- }
-
- public void test3() throws Exception {
- String process1 =
- "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
- "<process xmlns=\"http://drools.org/drools-5.0/process\"\n" +
- " xmlns:xs=\"http://www.w3.org/2001/XMLSchema-instance\"\n" +
- " xs:schemaLocation=\"http://drools.org/drools-5.0/process drools-processes-5.0.xsd\"\n" +
- " type=\"RuleFlow\" name=\"ruleflow\" id=\"com.sample.ruleflow\" package-name=\"com.sample\" >\n" +
- "\n" +
- " <header>\n" +
- " <imports>\n" +
- " <import name=\"org.drools.Person\" />\n" +
- " </imports>\n" +
- " <swimlanes>\n" +
- " <swimlane name=\"swimlane\" />\n" +
- " </swimlanes>\n" +
- " </header>\n" +
- "\n" +
- " <nodes>\n" +
- " <start id=\"1\" name=\"Start\" />\n" +
- " <end id=\"4\" name=\"End\" />\n" +
- " <split id=\"5\" name=\"AND\" type=\"1\" />\n" +
- " <subProcess id=\"6\" name=\"SubProcess\" processId=\"com.sample.subflow\" />\n" +
- " <actionNode id=\"7\" name=\"Action\" >\n" +
- " <action type=\"expression\" dialect=\"mvel\" >System.out.println(\"Executing action 1\");</action>\n" +
- " </actionNode>\n" +
- " <join id=\"8\" name=\"AND\" type=\"1\" />\n" +
- " <actionNode id=\"9\" name=\"Action\" >\n" +
- " <action type=\"expression\" dialect=\"mvel\" >System.out.println(\"Executing action 2\");</action>\n" +
- " </actionNode>\n" +
- " <ruleSet id=\"10\" name=\"RuleSet\" ruleFlowGroup=\"flowgroup\" />\n" +
- " <milestone id=\"11\" name=\"Event Wait\" >\n" +
- " <constraint type=\"rule\" dialect=\"mvel\" >Person( )</constraint>\n" +
- " </milestone>\n" +
- " <workItem id=\"12\" name=\"Log\" >\n" +
- " <work name=\"Log\" >\n" +
- " <parameter name=\"Message\" >\n" +
- " <type name=\"org.drools.process.core.datatype.impl.type.StringDataType\" />\n" +
- " <value>This is a log message</value>\n" +
- " </parameter>\n" +
- " </work>\n" +
- " </workItem>\n" +
- " <composite id=\"13\" name=\"CompositeNode\" >\n" +
- " <variables>\n" +
- " <variable name=\"x\" >\n" +
- " <type name=\"org.drools.process.core.datatype.impl.type.StringDataType\" />\n" +
- " <value>x-value</value>\n" +
- " </variable>\n" +
- " </variables>\n" +
- " <nodes>\n" +
- " <humanTask id=\"1\" name=\"Human Task\" swimlane=\"swimlane\" >\n" +
- " <work name=\"Human Task\" >\n" +
- " <parameter name=\"ActorId\" >\n" +
- " <type name=\"org.drools.process.core.datatype.impl.type.StringDataType\" />\n" +
- " <value>John Doe</value>\n" +
- " </parameter>\n" +
- " <parameter name=\"Priority\" >\n" +
- " <type name=\"org.drools.process.core.datatype.impl.type.StringDataType\" />\n" +
- " </parameter>\n" +
- " <parameter name=\"TaskName\" >\n" +
- " <type name=\"org.drools.process.core.datatype.impl.type.StringDataType\" />\n" +
- " <value>Do something !</value>\n" +
- " </parameter>\n" +
- " <parameter name=\"Comment\" >\n" +
- " <type name=\"org.drools.process.core.datatype.impl.type.StringDataType\" />\n" +
- " </parameter>\n" +
- " </work>\n" +
- " </humanTask>\n" +
- " <humanTask id=\"2\" name=\"Human Task\" swimlane=\"swimlane\" >\n" +
- " <work name=\"Human Task\" >\n" +
- " <parameter name=\"ActorId\" >\n" +
- " <type name=\"org.drools.process.core.datatype.impl.type.StringDataType\" />\n" +
- " </parameter>\n" +
- " <parameter name=\"Priority\" >\n" +
- " <type name=\"org.drools.process.core.datatype.impl.type.StringDataType\" />\n" +
- " </parameter>\n" +
- " <parameter name=\"TaskName\" >\n" +
- " <type name=\"org.drools.process.core.datatype.impl.type.StringDataType\" />\n" +
- " <value>Do something else !</value>\n" +
- " </parameter>\n" +
- " <parameter name=\"Comment\" >\n" +
- " <type name=\"org.drools.process.core.datatype.impl.type.StringDataType\" />\n" +
- " </parameter>\n" +
- " </work>\n" +
- " <mapping type=\"in\" from=\"x\" to=\"Priority\" />\n" +
- " </humanTask>\n" +
- " </nodes>\n" +
- " <connections>\n" +
- " <connection from=\"1\" to=\"2\" />\n" +
- " </connections>\n" +
- " <in-ports>\n" +
- " <in-port type=\"DROOLS_DEFAULT\" nodeId=\"1\" nodeInType=\"DROOLS_DEFAULT\" />\n" +
- " </in-ports>\n" +
- " <out-ports>\n" +
- " <out-port type=\"DROOLS_DEFAULT\" nodeId=\"2\" nodeOutType=\"DROOLS_DEFAULT\" />\n" +
- " </out-ports>\n" +
- " </composite>\n" +
- " </nodes>\n" +
- "\n" +
- " <connections>\n" +
- " <connection from=\"9\" to=\"4\" />\n" +
- " <connection from=\"1\" to=\"5\" />\n" +
- " <connection from=\"5\" to=\"6\" />\n" +
- " <connection from=\"5\" to=\"7\" />\n" +
- " <connection from=\"7\" to=\"8\" />\n" +
- " <connection from=\"6\" to=\"8\" />\n" +
- " <connection from=\"10\" to=\"8\" />\n" +
- " <connection from=\"11\" to=\"8\" />\n" +
- " <connection from=\"12\" to=\"8\" />\n" +
- " <connection from=\"13\" to=\"8\" />\n" +
- " <connection from=\"8\" to=\"9\" />\n" +
- " <connection from=\"5\" to=\"10\" />\n" +
- " <connection from=\"5\" to=\"11\" />\n" +
- " <connection from=\"5\" to=\"12\" />\n" +
- " <connection from=\"5\" to=\"13\" />\n" +
- " </connections>\n" +
- "\n" +
- "</process>\n";
- final PackageBuilder builder = new PackageBuilder();
- builder.addProcessFromXml( new StringReader( process1 ));
-
- String process2 =
- "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
- "<process xmlns=\"http://drools.org/drools-5.0/process\"\n" +
- " xmlns:xs=\"http://www.w3.org/2001/XMLSchema-instance\"\n" +
- " xs:schemaLocation=\"http://drools.org/drools-5.0/process drools-processes-5.0.xsd\"\n" +
- " type=\"RuleFlow\" name=\"flow\" id=\"com.sample.subflow\" package-name=\"com.sample\" >\n" +
- "\n" +
- " <header>\n" +
- " <imports>\n" +
- " <import name=\"org.drools.Person\" />\n" +
- " </imports>\n" +
- " </header>\n" +
- "\n" +
- " <nodes>\n" +
- " <start id=\"1\" name=\"Start\" />\n" +
- " <milestone id=\"2\" name=\"Event Wait\" >\n" +
- " <constraint type=\"rule\" dialect=\"mvel\" >Person( )</constraint>\n" +
- " </milestone>\n" +
- " <end id=\"3\" name=\"End\" />\n" +
- " </nodes>\n" +
- "\n" +
- " <connections>\n" +
- " <connection from=\"1\" to=\"2\" />\n" +
- " <connection from=\"2\" to=\"3\" />\n" +
- " </connections>\n" +
- "\n" +
- "</process>\n";
- builder.addProcessFromXml( new StringReader( process2 ));
-
- String rule =
- "package com.sample\n" +
- "import org.drools.Person;\n" +
- "rule \"Hello\" ruleflow-group \"flowgroup\"\n" +
- " when\n" +
- " then\n" +
- " System.out.println( \"Hello\" );\n" +
- "end";
- builder.addPackageFromDrl( new StringReader( rule ));
-
- final Package pkg = builder.getPackage();
- final RuleBase ruleBase = RuleBaseFactory.newRuleBase();
- ruleBase.addPackage(pkg);
-
- StatefulSession session = ruleBase.newStatefulSession();
- TestWorkItemHandler handler1 = new TestWorkItemHandler();
- session.getWorkItemManager().registerWorkItemHandler("Log", handler1);
- TestWorkItemHandler handler2 = new TestWorkItemHandler();
- session.getWorkItemManager().registerWorkItemHandler("Human Task", handler2);
- session.startProcess("com.sample.ruleflow");
-
- assertEquals(2, session.getProcessInstances().size());
- assertTrue(handler1.getWorkItem() != null);
- long workItemId = handler2.getWorkItem().getId();
- assertTrue(workItemId != -1);
-
- session = getSerialisedStatefulSession( session );
- session.getWorkItemManager().registerWorkItemHandler("Human Task", handler2);
- assertEquals(2, session.getProcessInstances().size());
-
- handler2.reset();
- session.getWorkItemManager().completeWorkItem(workItemId, null);
- assertTrue(handler2.getWorkItem() != null);
- assertEquals("John Doe", handler2.getWorkItem().getParameter("ActorId"));
- assertEquals("x-value", handler2.getWorkItem().getParameter("Priority"));
-
- session.getWorkItemManager().completeWorkItem(handler1.getWorkItem().getId(), null);
- session.getWorkItemManager().completeWorkItem(handler2.getWorkItem().getId(), null);
- session.insert(new Person());
- session.fireAllRules();
-
- assertEquals(0, session.getProcessInstances().size());
- }
-
- public void test4() throws Exception {
- String process =
- "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
- "<process xmlns=\"http://drools.org/drools-5.0/process\"\n" +
- " xmlns:xs=\"http://www.w3.org/2001/XMLSchema-instance\"\n" +
- " xs:schemaLocation=\"http://drools.org/drools-5.0/process drools-processes-5.0.xsd\"\n" +
- " type=\"RuleFlow\" name=\"ruleflow\" id=\"com.sample.ruleflow\" package-name=\"com.sample\" >\n" +
- "\n" +
- " <header>\n" +
- " <variables>\n" +
- " <variable name=\"list\" >\n" +
- " <type name=\"org.drools.process.core.datatype.impl.type.ObjectDataType\" className=\"java.util.List\" />\n" +
- " </variable>\n" +
- " </variables>\n" +
- " </header>\n" +
- "\n" +
- " <nodes>\n" +
- " <forEach id=\"4\" name=\"ForEach\" variableName=\"item\" collectionExpression=\"list\" >\n" +
- " <nodes>\n" +
- " <humanTask id=\"1\" name=\"Human Task\" >\n" +
- " <work name=\"Human Task\" >\n" +
- " <parameter name=\"Comment\" >\n" +
- " <type name=\"org.drools.process.core.datatype.impl.type.StringDataType\" />\n" +
- " </parameter>\n" +
- " <parameter name=\"ActorId\" >\n" +
- " <type name=\"org.drools.process.core.datatype.impl.type.StringDataType\" />\n" +
- " </parameter>\n" +
- " <parameter name=\"Priority\" >\n" +
- " <type name=\"org.drools.process.core.datatype.impl.type.StringDataType\" />\n" +
- " </parameter>\n" +
- " <parameter name=\"TaskName\" >\n" +
- " <type name=\"org.drools.process.core.datatype.impl.type.StringDataType\" />\n" +
- " <value>Do something: #{item}</value>\n" +
- " </parameter>\n" +
- " </work>\n" +
- " </humanTask>\n" +
- " <humanTask id=\"2\" name=\"Human Task Again\" >\n" +
- " <work name=\"Human Task\" >\n" +
- " <parameter name=\"Comment\" >\n" +
- " <type name=\"org.drools.process.core.datatype.impl.type.StringDataType\" />\n" +
- " </parameter>\n" +
- " <parameter name=\"ActorId\" >\n" +
- " <type name=\"org.drools.process.core.datatype.impl.type.StringDataType\" />\n" +
- " </parameter>\n" +
- " <parameter name=\"Priority\" >\n" +
- " <type name=\"org.drools.process.core.datatype.impl.type.StringDataType\" />\n" +
- " </parameter>\n" +
- " <parameter name=\"TaskName\" >\n" +
- " <type name=\"org.drools.process.core.datatype.impl.type.StringDataType\" />\n" +
- " <value>Do something else: #{item}</value>\n" +
- " </parameter>\n" +
- " </work>\n" +
- " </humanTask>\n" +
- " </nodes>\n" +
- " <connections>\n" +
- " <connection from=\"1\" to=\"2\" />\n" +
- " </connections>\n" +
- " <in-ports>\n" +
- " <in-port type=\"DROOLS_DEFAULT\" nodeId=\"1\" nodeInType=\"DROOLS_DEFAULT\" />\n" +
- " </in-ports>\n" +
- " <out-ports>\n" +
- " <out-port type=\"DROOLS_DEFAULT\" nodeId=\"2\" nodeOutType=\"DROOLS_DEFAULT\" />\n" +
- " </out-ports>\n" +
- " </forEach>\n" +
- " <start id=\"1\" name=\"Start\" />\n" +
- " <end id=\"3\" name=\"End\" />\n" +
- " </nodes>\n" +
- "\n" +
- " <connections>\n" +
- " <connection from=\"1\" to=\"4\" />\n" +
- " <connection from=\"4\" to=\"3\" />\n" +
- " </connections>\n" +
- "\n" +
- "</process>\n";
- final PackageBuilder builder = new PackageBuilder();
- builder.addProcessFromXml( new StringReader( process ));
- final Package pkg = builder.getPackage();
- final RuleBase ruleBase = RuleBaseFactory.newRuleBase();
- ruleBase.addPackage(pkg);
-
- StatefulSession session = ruleBase.newStatefulSession();
- TestListWorkItemHandler handler = new TestListWorkItemHandler();
- session.getWorkItemManager().registerWorkItemHandler("Human Task", handler);
- List<String> list = new ArrayList<String>();
- list.add("one");
- list.add("two");
- list.add("three");
- Map<String, Object> parameters = new HashMap<String, Object>();
- parameters.put("list", list);
- session.startProcess("com.sample.ruleflow", parameters);
-
- assertEquals(1, session.getProcessInstances().size());
- assertEquals(3, handler.getWorkItems().size());
-
- session = getSerialisedStatefulSession( session );
- session.getWorkItemManager().registerWorkItemHandler("Human Task", handler);
-
- List<WorkItem> workItems = new ArrayList<WorkItem>(handler.getWorkItems());
- handler.reset();
- for (WorkItem workItem: workItems) {
- session.getWorkItemManager().completeWorkItem(workItem.getId(), null);
- }
- assertEquals(1, session.getProcessInstances().size());
- assertEquals(3, handler.getWorkItems().size());
-
- session = getSerialisedStatefulSession( session );
-
- for (WorkItem workItem: handler.getWorkItems()) {
- session.getWorkItemManager().completeWorkItem(workItem.getId(), null);
- }
-
- assertEquals(0, session.getProcessInstances().size());
- }
-
- public void test5() throws Exception {
- String process =
- "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
- "<process xmlns=\"http://drools.org/drools-5.0/process\"\n" +
- " xmlns:xs=\"http://www.w3.org/2001/XMLSchema-instance\"\n" +
- " xs:schemaLocation=\"http://drools.org/drools-5.0/process drools-processes-5.0.xsd\"\n" +
- " type=\"RuleFlow\" name=\"ruleflow\" id=\"com.sample.ruleflow\" package-name=\"com.sample\" >\n" +
- "\n" +
- " <header>\n" +
- " </header>\n" +
- "\n" +
- " <nodes>\n" +
- " <start id=\"1\" name=\"Start\" />\n" +
- " <timerNode id=\"4\" name=\"Timer\" delay=\"200\" />\n" +
- " <end id=\"3\" name=\"End\" />\n" +
- " </nodes>\n" +
- "\n" +
- " <connections>\n" +
- " <connection from=\"1\" to=\"4\" />\n" +
- " <connection from=\"4\" to=\"3\" />\n" +
- " </connections>\n" +
- "\n" +
- "</process>\n";
- final PackageBuilder builder = new PackageBuilder();
- builder.addProcessFromXml( new StringReader( process ));
- final Package pkg = builder.getPackage();
- final RuleBase ruleBase = RuleBaseFactory.newRuleBase();
- ruleBase.addPackage(pkg);
-
- final StatefulSession session = ruleBase.newStatefulSession();
-
- new Thread(new Runnable() {
- public void run() {
- session.fireUntilHalt();
- }
- }).start();
-
- session.startProcess("com.sample.ruleflow", null);
-
- assertEquals(1, session.getProcessInstances().size());
- session.halt();
-
- final StatefulSession session2 = getSerialisedStatefulSession( session );
-
- new Thread(new Runnable() {
- public void run() {
- session2.fireUntilHalt();
- }
- }).start();
-
- Thread.sleep(400);
-
- assertEquals(0, session2.getProcessInstances().size());
-
- session2.halt();
- }
-
- public void test6() throws Exception {
- String process =
- "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
- "<process xmlns=\"http://drools.org/drools-5.0/process\"\n" +
- " xmlns:xs=\"http://www.w3.org/2001/XMLSchema-instance\"\n" +
- " xs:schemaLocation=\"http://drools.org/drools-5.0/process drools-processes-5.0.xsd\"\n" +
- " type=\"RuleFlow\" name=\"ruleflow\" id=\"com.sample.ruleflow\" package-name=\"com.sample\" >\n" +
- "\n" +
- " <header>\n" +
- " </header>\n" +
- "\n" +
- " <nodes>\n" +
- " <start id=\"1\" name=\"Start\" />\n" +
- " <timerNode id=\"4\" name=\"Timer\" delay=\"200\" />\n" +
- " <end id=\"3\" name=\"End\" />\n" +
- " </nodes>\n" +
- "\n" +
- " <connections>\n" +
- " <connection from=\"1\" to=\"4\" />\n" +
- " <connection from=\"4\" to=\"3\" />\n" +
- " </connections>\n" +
- "\n" +
- "</process>\n";
- final PackageBuilder builder = new PackageBuilder();
- builder.addProcessFromXml( new StringReader( process ));
- final Package pkg = builder.getPackage();
- final RuleBase ruleBase = RuleBaseFactory.newRuleBase();
- ruleBase.addPackage(pkg);
-
- final StatefulSession session = ruleBase.newStatefulSession();
-
- new Thread(new Runnable() {
- public void run() {
- session.fireUntilHalt();
- }
- }).start();
-
- session.startProcess("com.sample.ruleflow", null);
- assertEquals(1, session.getProcessInstances().size());
-
- StatefulKnowledgeSession ksession = new StatefulKnowledgeSessionImpl( (ReteooWorkingMemory) session );
- Marshaller marshaller = MarshallerFactory.newMarshaller( ksession.getKnowledgeBase() );
-
-
- ByteArrayOutputStream baos = new ByteArrayOutputStream();
- marshaller.marshall( baos, ksession );
- byte[] b1 = baos.toByteArray();
- session.halt();
- session.dispose();
- Thread.sleep(400);
-
- ByteArrayInputStream bais = new ByteArrayInputStream( b1 );
- final StatefulSession session2 = ( StatefulSession ) (( StatefulKnowledgeSessionImpl) marshaller.unmarshall( bais ) ).session;
-
- new Thread(new Runnable() {
- public void run() {
- session2.fireUntilHalt();
- }
- }).start();
-
- Thread.sleep(100);
-
- assertEquals(0, session2.getProcessInstances().size());
- session2.halt();
- }
-
- private static class TestWorkItemHandler implements WorkItemHandler {
- private WorkItem workItem;
- public void executeWorkItem(WorkItem workItem, WorkItemManager manager) {
- this.workItem = workItem;
- }
- public void abortWorkItem(WorkItem workItem, WorkItemManager manager) {
- }
- public WorkItem getWorkItem() {
- return workItem;
- }
- public void reset() {
- workItem = null;
- }
- }
-
- private static class TestListWorkItemHandler implements WorkItemHandler {
- private List<WorkItem> workItems = new ArrayList<WorkItem>();
- public void executeWorkItem(WorkItem workItem, WorkItemManager manager) {
- System.out.println("Executing workItem " + workItem.getParameter("TaskName"));
- workItems.add(workItem);
- }
- public void abortWorkItem(WorkItem workItem, WorkItemManager manager) {
- workItems.remove(workItem);
- }
- public List<WorkItem> getWorkItems() {
- return workItems;
- }
- public void reset() {
- workItems.clear();
- }
- }
-
-}
\ No newline at end of file
Copied: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/ProcessMarshallingTest.java (from rev 34915, labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/ProcessMarchallingTest.java)
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/ProcessMarshallingTest.java (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/ProcessMarshallingTest.java 2010-08-28 01:44:30 UTC (rev 34927)
@@ -0,0 +1,630 @@
+package org.drools.integrationtests;
+
+import static org.drools.integrationtests.SerializationHelper.getSerialisedStatefulSession;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.StringReader;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import junit.framework.TestCase;
+
+import org.drools.Person;
+import org.drools.RuleBase;
+import org.drools.RuleBaseFactory;
+import org.drools.StatefulSession;
+import org.drools.compiler.PackageBuilder;
+import org.drools.impl.StatefulKnowledgeSessionImpl;
+import org.drools.marshalling.Marshaller;
+import org.drools.marshalling.MarshallerFactory;
+import org.drools.process.core.context.variable.VariableScope;
+import org.drools.process.instance.ProcessInstance;
+import org.drools.process.instance.context.variable.VariableScopeInstance;
+import org.drools.reteoo.ReteooWorkingMemory;
+import org.drools.rule.Package;
+import org.drools.runtime.StatefulKnowledgeSession;
+import org.drools.runtime.process.WorkItem;
+import org.drools.runtime.process.WorkItemHandler;
+import org.drools.runtime.process.WorkItemManager;
+
+public class ProcessMarshallingTest extends TestCase {
+
+ @SuppressWarnings("unchecked")
+ public void test1() throws Exception {
+ String rule = "package org.test;\n";
+ rule += "import org.drools.Person\n";
+ rule += "global java.util.List list\n";
+ rule += "rule \"Rule 1\"\n";
+ rule += " ruleflow-group \"hello\"\n";
+ rule += "when\n";
+ rule += " $p : Person( ) \n";
+ rule += "then\n";
+ rule += " list.add( $p );\n";
+ rule += "end";
+
+ final PackageBuilder builder = new PackageBuilder();
+ builder.addPackageFromDrl( new StringReader( rule ));
+
+ String process =
+ "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
+ "<process xmlns=\"http://drools.org/drools-5.0/process\"\n" +
+ " xmlns:xs=\"http://www.w3.org/2001/XMLSchema-instance\"\n" +
+ " xs:schemaLocation=\"http://drools.org/drools-5.0/process drools-processes-5.0.xsd\"\n" +
+ " type=\"RuleFlow\" name=\"ruleflow\" id=\"org.test.ruleflow\" package-name=\"org.test\" >\n" +
+ " <header>\n" +
+ " </header>\n" +
+ " <nodes>\n" +
+ " <start id=\"1\" name=\"Start\" />\n" +
+ " <ruleSet id=\"2\" name=\"Hello\" ruleFlowGroup=\"hello\" />\n" +
+ " <end id=\"3\" name=\"End\" />\n" +
+ " </nodes>\n" +
+ " <connections>\n" +
+ " <connection from=\"1\" to=\"2\"/>\n" +
+ " <connection from=\"2\" to=\"3\"/>\n" +
+ " </connections>\n" +
+ "</process>";
+ builder.addProcessFromXml( new StringReader( process ));
+ final Package pkg = builder.getPackage();
+
+ final RuleBase ruleBase = RuleBaseFactory.newRuleBase();
+ ruleBase.addPackage(pkg);
+
+ StatefulSession session = ruleBase.newStatefulSession();
+
+ List<Object> list = new ArrayList<Object>();
+ session.setGlobal( "list", list );
+
+ Person p = new Person( "bobba fet", 32);
+ session.insert( p );
+ session.startProcess("org.test.ruleflow");
+
+ assertEquals(1, session.getProcessInstances().size());
+
+ session = getSerialisedStatefulSession( session );
+ assertEquals(1, session.getProcessInstances().size());
+
+ session.fireAllRules();
+
+ assertEquals( 1, ((List<Object>) session.getGlobal("list")).size());
+ assertEquals( p, ((List<Object>) session.getGlobal("list")).get(0));
+ assertEquals(0, session.getProcessInstances().size());
+ }
+
+ public void test2() throws Exception {
+ String process =
+ "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
+ "<process xmlns=\"http://drools.org/drools-5.0/process\"\n" +
+ " xmlns:xs=\"http://www.w3.org/2001/XMLSchema-instance\"\n" +
+ " xs:schemaLocation=\"http://drools.org/drools-5.0/process drools-processes-5.0.xsd\"\n" +
+ " type=\"RuleFlow\" name=\"ruleflow\" id=\"org.test.ruleflow\" package-name=\"org.test\" >\n" +
+ " <header>\n" +
+ " <variables>\n" +
+ " <variable name=\"myVariable\" >\n" +
+ " <type name=\"org.drools.process.core.datatype.impl.type.StringDataType\" />\n" +
+ " <value>OldValue</value>\n" +
+ " </variable>\n" +
+ " </variables>\n" +
+ " </header>\n" +
+ " <nodes>\n" +
+ " <start id=\"1\" name=\"Start\" />\n" +
+ " <workItem id=\"2\" name=\"Email\" >\n" +
+ " <work name=\"Email\" >\n" +
+ " <parameter name=\"Subject\" >\n" +
+ " <type name=\"org.drools.process.core.datatype.impl.type.StringDataType\" />\n" +
+ " <value>Mail</value>\n" +
+ " </parameter>\n" +
+ " <parameter name=\"Text\" >\n" +
+ " <type name=\"org.drools.process.core.datatype.impl.type.StringDataType\" />\n" +
+ " <value>This is an email</value>\n" +
+ " </parameter>\n" +
+ " <parameter name=\"To\" >\n" +
+ " <type name=\"org.drools.process.core.datatype.impl.type.StringDataType\" />\n" +
+ " <value>you at mail.com</value>\n" +
+ " </parameter>\n" +
+ " <parameter name=\"From\" >\n" +
+ " <type name=\"org.drools.process.core.datatype.impl.type.StringDataType\" />\n" +
+ " <value>me at mail.com</value>\n" +
+ " </parameter>\n" +
+ " </work>\n" +
+ " </workItem>\n" +
+ " <end id=\"3\" name=\"End\" />\n" +
+ " </nodes>\n" +
+ " <connections>\n" +
+ " <connection from=\"1\" to=\"2\"/>\n" +
+ " <connection from=\"2\" to=\"3\"/>\n" +
+ " </connections>\n" +
+ "</process>";
+ final PackageBuilder builder = new PackageBuilder();
+ builder.addProcessFromXml( new StringReader( process ));
+ final Package pkg = builder.getPackage();
+
+ final RuleBase ruleBase = RuleBaseFactory.newRuleBase();
+ ruleBase.addPackage(pkg);
+
+ StatefulSession session = ruleBase.newStatefulSession();
+ TestWorkItemHandler handler = new TestWorkItemHandler();
+ session.getWorkItemManager().registerWorkItemHandler("Email", handler);
+ Map<String, Object> variables = new HashMap<String, Object>();
+ variables.put("myVariable", "ThisIsMyValue");
+ session.startProcess("org.test.ruleflow", variables);
+
+ assertEquals(1, session.getProcessInstances().size());
+ assertTrue(handler.getWorkItem() != null);
+
+ session = getSerialisedStatefulSession( session );
+ assertEquals(1, session.getProcessInstances().size());
+ VariableScopeInstance variableScopeInstance = (VariableScopeInstance)
+ (( ProcessInstance )session.getProcessInstances().iterator().next()).getContextInstance(VariableScope.VARIABLE_SCOPE);
+ assertEquals("ThisIsMyValue", variableScopeInstance.getVariable("myVariable"));
+
+ session.getWorkItemManager().completeWorkItem(handler.getWorkItem().getId(), null);
+
+ assertEquals(0, session.getProcessInstances().size());
+ }
+
+ public void test3() throws Exception {
+ String process1 =
+ "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
+ "<process xmlns=\"http://drools.org/drools-5.0/process\"\n" +
+ " xmlns:xs=\"http://www.w3.org/2001/XMLSchema-instance\"\n" +
+ " xs:schemaLocation=\"http://drools.org/drools-5.0/process drools-processes-5.0.xsd\"\n" +
+ " type=\"RuleFlow\" name=\"ruleflow\" id=\"com.sample.ruleflow\" package-name=\"com.sample\" >\n" +
+ "\n" +
+ " <header>\n" +
+ " <imports>\n" +
+ " <import name=\"org.drools.Person\" />\n" +
+ " </imports>\n" +
+ " <swimlanes>\n" +
+ " <swimlane name=\"swimlane\" />\n" +
+ " </swimlanes>\n" +
+ " </header>\n" +
+ "\n" +
+ " <nodes>\n" +
+ " <start id=\"1\" name=\"Start\" />\n" +
+ " <end id=\"4\" name=\"End\" />\n" +
+ " <split id=\"5\" name=\"AND\" type=\"1\" />\n" +
+ " <subProcess id=\"6\" name=\"SubProcess\" processId=\"com.sample.subflow\" />\n" +
+ " <actionNode id=\"7\" name=\"Action\" >\n" +
+ " <action type=\"expression\" dialect=\"mvel\" >System.out.println(\"Executing action 1\");</action>\n" +
+ " </actionNode>\n" +
+ " <join id=\"8\" name=\"AND\" type=\"1\" />\n" +
+ " <actionNode id=\"9\" name=\"Action\" >\n" +
+ " <action type=\"expression\" dialect=\"mvel\" >System.out.println(\"Executing action 2\");</action>\n" +
+ " </actionNode>\n" +
+ " <ruleSet id=\"10\" name=\"RuleSet\" ruleFlowGroup=\"flowgroup\" />\n" +
+ " <milestone id=\"11\" name=\"Event Wait\" >\n" +
+ " <constraint type=\"rule\" dialect=\"mvel\" >Person( )</constraint>\n" +
+ " </milestone>\n" +
+ " <workItem id=\"12\" name=\"Log\" >\n" +
+ " <work name=\"Log\" >\n" +
+ " <parameter name=\"Message\" >\n" +
+ " <type name=\"org.drools.process.core.datatype.impl.type.StringDataType\" />\n" +
+ " <value>This is a log message</value>\n" +
+ " </parameter>\n" +
+ " </work>\n" +
+ " </workItem>\n" +
+ " <composite id=\"13\" name=\"CompositeNode\" >\n" +
+ " <variables>\n" +
+ " <variable name=\"x\" >\n" +
+ " <type name=\"org.drools.process.core.datatype.impl.type.StringDataType\" />\n" +
+ " <value>x-value</value>\n" +
+ " </variable>\n" +
+ " </variables>\n" +
+ " <nodes>\n" +
+ " <humanTask id=\"1\" name=\"Human Task\" swimlane=\"swimlane\" >\n" +
+ " <work name=\"Human Task\" >\n" +
+ " <parameter name=\"ActorId\" >\n" +
+ " <type name=\"org.drools.process.core.datatype.impl.type.StringDataType\" />\n" +
+ " <value>John Doe</value>\n" +
+ " </parameter>\n" +
+ " <parameter name=\"Priority\" >\n" +
+ " <type name=\"org.drools.process.core.datatype.impl.type.StringDataType\" />\n" +
+ " </parameter>\n" +
+ " <parameter name=\"TaskName\" >\n" +
+ " <type name=\"org.drools.process.core.datatype.impl.type.StringDataType\" />\n" +
+ " <value>Do something !</value>\n" +
+ " </parameter>\n" +
+ " <parameter name=\"Comment\" >\n" +
+ " <type name=\"org.drools.process.core.datatype.impl.type.StringDataType\" />\n" +
+ " </parameter>\n" +
+ " </work>\n" +
+ " </humanTask>\n" +
+ " <humanTask id=\"2\" name=\"Human Task\" swimlane=\"swimlane\" >\n" +
+ " <work name=\"Human Task\" >\n" +
+ " <parameter name=\"ActorId\" >\n" +
+ " <type name=\"org.drools.process.core.datatype.impl.type.StringDataType\" />\n" +
+ " </parameter>\n" +
+ " <parameter name=\"Priority\" >\n" +
+ " <type name=\"org.drools.process.core.datatype.impl.type.StringDataType\" />\n" +
+ " </parameter>\n" +
+ " <parameter name=\"TaskName\" >\n" +
+ " <type name=\"org.drools.process.core.datatype.impl.type.StringDataType\" />\n" +
+ " <value>Do something else !</value>\n" +
+ " </parameter>\n" +
+ " <parameter name=\"Comment\" >\n" +
+ " <type name=\"org.drools.process.core.datatype.impl.type.StringDataType\" />\n" +
+ " </parameter>\n" +
+ " </work>\n" +
+ " <mapping type=\"in\" from=\"x\" to=\"Priority\" />\n" +
+ " </humanTask>\n" +
+ " </nodes>\n" +
+ " <connections>\n" +
+ " <connection from=\"1\" to=\"2\" />\n" +
+ " </connections>\n" +
+ " <in-ports>\n" +
+ " <in-port type=\"DROOLS_DEFAULT\" nodeId=\"1\" nodeInType=\"DROOLS_DEFAULT\" />\n" +
+ " </in-ports>\n" +
+ " <out-ports>\n" +
+ " <out-port type=\"DROOLS_DEFAULT\" nodeId=\"2\" nodeOutType=\"DROOLS_DEFAULT\" />\n" +
+ " </out-ports>\n" +
+ " </composite>\n" +
+ " </nodes>\n" +
+ "\n" +
+ " <connections>\n" +
+ " <connection from=\"9\" to=\"4\" />\n" +
+ " <connection from=\"1\" to=\"5\" />\n" +
+ " <connection from=\"5\" to=\"6\" />\n" +
+ " <connection from=\"5\" to=\"7\" />\n" +
+ " <connection from=\"7\" to=\"8\" />\n" +
+ " <connection from=\"6\" to=\"8\" />\n" +
+ " <connection from=\"10\" to=\"8\" />\n" +
+ " <connection from=\"11\" to=\"8\" />\n" +
+ " <connection from=\"12\" to=\"8\" />\n" +
+ " <connection from=\"13\" to=\"8\" />\n" +
+ " <connection from=\"8\" to=\"9\" />\n" +
+ " <connection from=\"5\" to=\"10\" />\n" +
+ " <connection from=\"5\" to=\"11\" />\n" +
+ " <connection from=\"5\" to=\"12\" />\n" +
+ " <connection from=\"5\" to=\"13\" />\n" +
+ " </connections>\n" +
+ "\n" +
+ "</process>\n";
+ final PackageBuilder builder = new PackageBuilder();
+ builder.addProcessFromXml( new StringReader( process1 ));
+
+ String process2 =
+ "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
+ "<process xmlns=\"http://drools.org/drools-5.0/process\"\n" +
+ " xmlns:xs=\"http://www.w3.org/2001/XMLSchema-instance\"\n" +
+ " xs:schemaLocation=\"http://drools.org/drools-5.0/process drools-processes-5.0.xsd\"\n" +
+ " type=\"RuleFlow\" name=\"flow\" id=\"com.sample.subflow\" package-name=\"com.sample\" >\n" +
+ "\n" +
+ " <header>\n" +
+ " <imports>\n" +
+ " <import name=\"org.drools.Person\" />\n" +
+ " </imports>\n" +
+ " </header>\n" +
+ "\n" +
+ " <nodes>\n" +
+ " <start id=\"1\" name=\"Start\" />\n" +
+ " <milestone id=\"2\" name=\"Event Wait\" >\n" +
+ " <constraint type=\"rule\" dialect=\"mvel\" >Person( )</constraint>\n" +
+ " </milestone>\n" +
+ " <end id=\"3\" name=\"End\" />\n" +
+ " </nodes>\n" +
+ "\n" +
+ " <connections>\n" +
+ " <connection from=\"1\" to=\"2\" />\n" +
+ " <connection from=\"2\" to=\"3\" />\n" +
+ " </connections>\n" +
+ "\n" +
+ "</process>\n";
+ builder.addProcessFromXml( new StringReader( process2 ));
+
+ String rule =
+ "package com.sample\n" +
+ "import org.drools.Person;\n" +
+ "rule \"Hello\" ruleflow-group \"flowgroup\"\n" +
+ " when\n" +
+ " then\n" +
+ " System.out.println( \"Hello\" );\n" +
+ "end";
+ builder.addPackageFromDrl( new StringReader( rule ));
+
+ final Package pkg = builder.getPackage();
+ final RuleBase ruleBase = RuleBaseFactory.newRuleBase();
+ ruleBase.addPackage(pkg);
+
+ StatefulSession session = ruleBase.newStatefulSession();
+ TestWorkItemHandler handler1 = new TestWorkItemHandler();
+ session.getWorkItemManager().registerWorkItemHandler("Log", handler1);
+ TestWorkItemHandler handler2 = new TestWorkItemHandler();
+ session.getWorkItemManager().registerWorkItemHandler("Human Task", handler2);
+ session.startProcess("com.sample.ruleflow");
+
+ assertEquals(2, session.getProcessInstances().size());
+ assertTrue(handler1.getWorkItem() != null);
+ long workItemId = handler2.getWorkItem().getId();
+ assertTrue(workItemId != -1);
+
+ session = getSerialisedStatefulSession( session );
+ session.getWorkItemManager().registerWorkItemHandler("Human Task", handler2);
+ assertEquals(2, session.getProcessInstances().size());
+
+ handler2.reset();
+ session.getWorkItemManager().completeWorkItem(workItemId, null);
+ assertTrue(handler2.getWorkItem() != null);
+ assertEquals("John Doe", handler2.getWorkItem().getParameter("ActorId"));
+ assertEquals("x-value", handler2.getWorkItem().getParameter("Priority"));
+
+ session.getWorkItemManager().completeWorkItem(handler1.getWorkItem().getId(), null);
+ session.getWorkItemManager().completeWorkItem(handler2.getWorkItem().getId(), null);
+ session.insert(new Person());
+ session.fireAllRules();
+
+ assertEquals(0, session.getProcessInstances().size());
+ }
+
+ public void test4() throws Exception {
+ String process =
+ "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
+ "<process xmlns=\"http://drools.org/drools-5.0/process\"\n" +
+ " xmlns:xs=\"http://www.w3.org/2001/XMLSchema-instance\"\n" +
+ " xs:schemaLocation=\"http://drools.org/drools-5.0/process drools-processes-5.0.xsd\"\n" +
+ " type=\"RuleFlow\" name=\"ruleflow\" id=\"com.sample.ruleflow\" package-name=\"com.sample\" >\n" +
+ "\n" +
+ " <header>\n" +
+ " <variables>\n" +
+ " <variable name=\"list\" >\n" +
+ " <type name=\"org.drools.process.core.datatype.impl.type.ObjectDataType\" className=\"java.util.List\" />\n" +
+ " </variable>\n" +
+ " </variables>\n" +
+ " </header>\n" +
+ "\n" +
+ " <nodes>\n" +
+ " <forEach id=\"4\" name=\"ForEach\" variableName=\"item\" collectionExpression=\"list\" >\n" +
+ " <nodes>\n" +
+ " <humanTask id=\"1\" name=\"Human Task\" >\n" +
+ " <work name=\"Human Task\" >\n" +
+ " <parameter name=\"Comment\" >\n" +
+ " <type name=\"org.drools.process.core.datatype.impl.type.StringDataType\" />\n" +
+ " </parameter>\n" +
+ " <parameter name=\"ActorId\" >\n" +
+ " <type name=\"org.drools.process.core.datatype.impl.type.StringDataType\" />\n" +
+ " </parameter>\n" +
+ " <parameter name=\"Priority\" >\n" +
+ " <type name=\"org.drools.process.core.datatype.impl.type.StringDataType\" />\n" +
+ " </parameter>\n" +
+ " <parameter name=\"TaskName\" >\n" +
+ " <type name=\"org.drools.process.core.datatype.impl.type.StringDataType\" />\n" +
+ " <value>Do something: #{item}</value>\n" +
+ " </parameter>\n" +
+ " </work>\n" +
+ " </humanTask>\n" +
+ " <humanTask id=\"2\" name=\"Human Task Again\" >\n" +
+ " <work name=\"Human Task\" >\n" +
+ " <parameter name=\"Comment\" >\n" +
+ " <type name=\"org.drools.process.core.datatype.impl.type.StringDataType\" />\n" +
+ " </parameter>\n" +
+ " <parameter name=\"ActorId\" >\n" +
+ " <type name=\"org.drools.process.core.datatype.impl.type.StringDataType\" />\n" +
+ " </parameter>\n" +
+ " <parameter name=\"Priority\" >\n" +
+ " <type name=\"org.drools.process.core.datatype.impl.type.StringDataType\" />\n" +
+ " </parameter>\n" +
+ " <parameter name=\"TaskName\" >\n" +
+ " <type name=\"org.drools.process.core.datatype.impl.type.StringDataType\" />\n" +
+ " <value>Do something else: #{item}</value>\n" +
+ " </parameter>\n" +
+ " </work>\n" +
+ " </humanTask>\n" +
+ " </nodes>\n" +
+ " <connections>\n" +
+ " <connection from=\"1\" to=\"2\" />\n" +
+ " </connections>\n" +
+ " <in-ports>\n" +
+ " <in-port type=\"DROOLS_DEFAULT\" nodeId=\"1\" nodeInType=\"DROOLS_DEFAULT\" />\n" +
+ " </in-ports>\n" +
+ " <out-ports>\n" +
+ " <out-port type=\"DROOLS_DEFAULT\" nodeId=\"2\" nodeOutType=\"DROOLS_DEFAULT\" />\n" +
+ " </out-ports>\n" +
+ " </forEach>\n" +
+ " <start id=\"1\" name=\"Start\" />\n" +
+ " <end id=\"3\" name=\"End\" />\n" +
+ " </nodes>\n" +
+ "\n" +
+ " <connections>\n" +
+ " <connection from=\"1\" to=\"4\" />\n" +
+ " <connection from=\"4\" to=\"3\" />\n" +
+ " </connections>\n" +
+ "\n" +
+ "</process>\n";
+ final PackageBuilder builder = new PackageBuilder();
+ builder.addProcessFromXml( new StringReader( process ));
+ final Package pkg = builder.getPackage();
+ final RuleBase ruleBase = RuleBaseFactory.newRuleBase();
+ ruleBase.addPackage(pkg);
+
+ StatefulSession session = ruleBase.newStatefulSession();
+ TestListWorkItemHandler handler = new TestListWorkItemHandler();
+ session.getWorkItemManager().registerWorkItemHandler("Human Task", handler);
+ List<String> list = new ArrayList<String>();
+ list.add("one");
+ list.add("two");
+ list.add("three");
+ Map<String, Object> parameters = new HashMap<String, Object>();
+ parameters.put("list", list);
+ session.startProcess("com.sample.ruleflow", parameters);
+
+ assertEquals(1, session.getProcessInstances().size());
+ assertEquals(3, handler.getWorkItems().size());
+
+ session = getSerialisedStatefulSession( session );
+ session.getWorkItemManager().registerWorkItemHandler("Human Task", handler);
+
+ List<WorkItem> workItems = new ArrayList<WorkItem>(handler.getWorkItems());
+ handler.reset();
+ for (WorkItem workItem: workItems) {
+ session.getWorkItemManager().completeWorkItem(workItem.getId(), null);
+ }
+ assertEquals(1, session.getProcessInstances().size());
+ assertEquals(3, handler.getWorkItems().size());
+
+ session = getSerialisedStatefulSession( session );
+
+ for (WorkItem workItem: handler.getWorkItems()) {
+ session.getWorkItemManager().completeWorkItem(workItem.getId(), null);
+ }
+
+ assertEquals(0, session.getProcessInstances().size());
+ }
+
+ public void test5() throws Exception {
+ String process =
+ "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
+ "<process xmlns=\"http://drools.org/drools-5.0/process\"\n" +
+ " xmlns:xs=\"http://www.w3.org/2001/XMLSchema-instance\"\n" +
+ " xs:schemaLocation=\"http://drools.org/drools-5.0/process drools-processes-5.0.xsd\"\n" +
+ " type=\"RuleFlow\" name=\"ruleflow\" id=\"com.sample.ruleflow\" package-name=\"com.sample\" >\n" +
+ "\n" +
+ " <header>\n" +
+ " </header>\n" +
+ "\n" +
+ " <nodes>\n" +
+ " <start id=\"1\" name=\"Start\" />\n" +
+ " <timerNode id=\"4\" name=\"Timer\" delay=\"200\" />\n" +
+ " <end id=\"3\" name=\"End\" />\n" +
+ " </nodes>\n" +
+ "\n" +
+ " <connections>\n" +
+ " <connection from=\"1\" to=\"4\" />\n" +
+ " <connection from=\"4\" to=\"3\" />\n" +
+ " </connections>\n" +
+ "\n" +
+ "</process>\n";
+ final PackageBuilder builder = new PackageBuilder();
+ builder.addProcessFromXml( new StringReader( process ));
+ final Package pkg = builder.getPackage();
+ final RuleBase ruleBase = RuleBaseFactory.newRuleBase();
+ ruleBase.addPackage(pkg);
+
+ final StatefulSession session = ruleBase.newStatefulSession();
+
+ new Thread(new Runnable() {
+ public void run() {
+ session.fireUntilHalt();
+ }
+ }).start();
+
+ session.startProcess("com.sample.ruleflow", null);
+
+ assertEquals(1, session.getProcessInstances().size());
+ session.halt();
+
+ final StatefulSession session2 = getSerialisedStatefulSession( session );
+
+ new Thread(new Runnable() {
+ public void run() {
+ session2.fireUntilHalt();
+ }
+ }).start();
+
+ Thread.sleep(400);
+
+ assertEquals(0, session2.getProcessInstances().size());
+
+ session2.halt();
+ }
+
+ public void test6() throws Exception {
+ String process =
+ "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
+ "<process xmlns=\"http://drools.org/drools-5.0/process\"\n" +
+ " xmlns:xs=\"http://www.w3.org/2001/XMLSchema-instance\"\n" +
+ " xs:schemaLocation=\"http://drools.org/drools-5.0/process drools-processes-5.0.xsd\"\n" +
+ " type=\"RuleFlow\" name=\"ruleflow\" id=\"com.sample.ruleflow\" package-name=\"com.sample\" >\n" +
+ "\n" +
+ " <header>\n" +
+ " </header>\n" +
+ "\n" +
+ " <nodes>\n" +
+ " <start id=\"1\" name=\"Start\" />\n" +
+ " <timerNode id=\"4\" name=\"Timer\" delay=\"200\" />\n" +
+ " <end id=\"3\" name=\"End\" />\n" +
+ " </nodes>\n" +
+ "\n" +
+ " <connections>\n" +
+ " <connection from=\"1\" to=\"4\" />\n" +
+ " <connection from=\"4\" to=\"3\" />\n" +
+ " </connections>\n" +
+ "\n" +
+ "</process>\n";
+ final PackageBuilder builder = new PackageBuilder();
+ builder.addProcessFromXml( new StringReader( process ));
+ final Package pkg = builder.getPackage();
+ final RuleBase ruleBase = RuleBaseFactory.newRuleBase();
+ ruleBase.addPackage(pkg);
+
+ final StatefulSession session = ruleBase.newStatefulSession();
+
+ new Thread(new Runnable() {
+ public void run() {
+ session.fireUntilHalt();
+ }
+ }).start();
+
+ session.startProcess("com.sample.ruleflow", null);
+ assertEquals(1, session.getProcessInstances().size());
+
+ StatefulKnowledgeSession ksession = new StatefulKnowledgeSessionImpl( (ReteooWorkingMemory) session );
+ Marshaller marshaller = MarshallerFactory.newMarshaller( ksession.getKnowledgeBase() );
+
+
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ marshaller.marshall( baos, ksession );
+ byte[] b1 = baos.toByteArray();
+ session.halt();
+ session.dispose();
+ Thread.sleep(400);
+
+ ByteArrayInputStream bais = new ByteArrayInputStream( b1 );
+ final StatefulSession session2 = ( StatefulSession ) (( StatefulKnowledgeSessionImpl) marshaller.unmarshall( bais ) ).session;
+
+ new Thread(new Runnable() {
+ public void run() {
+ session2.fireUntilHalt();
+ }
+ }).start();
+
+ Thread.sleep(100);
+
+ assertEquals(0, session2.getProcessInstances().size());
+ session2.halt();
+ }
+
+ private static class TestWorkItemHandler implements WorkItemHandler {
+ private WorkItem workItem;
+ public void executeWorkItem(WorkItem workItem, WorkItemManager manager) {
+ this.workItem = workItem;
+ }
+ public void abortWorkItem(WorkItem workItem, WorkItemManager manager) {
+ }
+ public WorkItem getWorkItem() {
+ return workItem;
+ }
+ public void reset() {
+ workItem = null;
+ }
+ }
+
+ private static class TestListWorkItemHandler implements WorkItemHandler {
+ private List<WorkItem> workItems = new ArrayList<WorkItem>();
+ public void executeWorkItem(WorkItem workItem, WorkItemManager manager) {
+ System.out.println("Executing workItem " + workItem.getParameter("TaskName"));
+ workItems.add(workItem);
+ }
+ public void abortWorkItem(WorkItem workItem, WorkItemManager manager) {
+ workItems.remove(workItem);
+ }
+ public List<WorkItem> getWorkItems() {
+ return workItems;
+ }
+ public void reset() {
+ workItems.clear();
+ }
+ }
+
+}
\ No newline at end of file
Property changes on: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/ProcessMarshallingTest.java
___________________________________________________________________
Name: svn:mergeinfo
+
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/impl/StatelessKnowledgeSessionImpl.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/impl/StatelessKnowledgeSessionImpl.java 2010-08-27 16:20:59 UTC (rev 34926)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/impl/StatelessKnowledgeSessionImpl.java 2010-08-28 01:44:30 UTC (rev 34927)
@@ -130,6 +130,7 @@
((Globals) wm.getGlobalResolver()).setDelegate( this.sessionGlobals );
wm.setKnowledgeRuntime( ksession );
wm.setAgendaEventSupport( this.agendaEventSupport );
+ wm.setWorkingMemoryEventSupport( this.workingMemoryEventSupport );
wm.getProcessRuntime().setProcessEventSupport( this.processEventSupport );
final InternalFactHandle handle = wm.getFactHandleFactory().newFactHandle( InitialFactImpl.getInstance(),
Property changes on: labs/jbossrules/trunk/drools-flow-core
___________________________________________________________________
Name: svn:ignore
+ .settings
target
More information about the jboss-svn-commits
mailing list