Search in sources :

Example 76 with InternalWorkingMemory

use of org.drools.core.common.InternalWorkingMemory in project jbpm by kiegroup.

the class ProcessTimerTest method testOnEntryTimerExecutedMultipleTimes.

@Test
public void testOnEntryTimerExecutedMultipleTimes() throws Exception {
    Reader source = new StringReader("<?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=\"org.drools.timer\" package-name=\"org.drools\" version=\"1\" >\n" + "\n" + "  <header>\n" + "    <globals>\n" + "      <global identifier=\"myList\" type=\"java.util.List\" />\n" + "    </globals>\n" + "  </header>\n" + "\n" + "  <nodes>\n" + "    <start id=\"1\" name=\"Start\" />\n" + "    <milestone id=\"2\" name=\"Wait\" >\n" + "      <timers>\n" + "        <timer id=\"1\" delay=\"300\" period =\"200\" >\n" + "          <action type=\"expression\" dialect=\"java\" >myList.add(\"Executing timer\");</action>\n" + "        </timer>\n" + "      </timers>\n" + "      <constraint type=\"rule\" dialect=\"mvel\" >eval(false)</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>");
    builder.addRuleFlow(source);
    KieSession session = createKieSession(builder.getPackages());
    List<String> myList = new ArrayList<String>();
    session.setGlobal("myList", myList);
    ProcessInstance processInstance = (ProcessInstance) session.startProcess("org.drools.timer");
    assertEquals(0, myList.size());
    assertEquals(ProcessInstance.STATE_ACTIVE, processInstance.getState());
    assertEquals(1, ((InternalProcessRuntime) ((InternalWorkingMemory) session).getProcessRuntime()).getTimerManager().getTimers().size());
    session.halt();
    try {
        Thread.sleep(600);
    } catch (InterruptedException e) {
    // do nothing
    }
    assertEquals(2, myList.size());
    session.dispose();
}
Also used : InternalWorkingMemory(org.drools.core.common.InternalWorkingMemory) StringReader(java.io.StringReader) ArrayList(java.util.ArrayList) Reader(java.io.Reader) StringReader(java.io.StringReader) KieSession(org.kie.api.runtime.KieSession) ProcessInstance(org.jbpm.process.instance.ProcessInstance) Test(org.junit.Test) AbstractBaseTest(org.jbpm.test.util.AbstractBaseTest)

Example 77 with InternalWorkingMemory

use of org.drools.core.common.InternalWorkingMemory in project jbpm by kiegroup.

the class ProcessTimerTest method testOnEntryTimerVariableExecuted.

@Test
public void testOnEntryTimerVariableExecuted() throws Exception {
    Reader source = new StringReader("<?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=\"org.drools.timer\" package-name=\"org.drools\" version=\"1\" >\n" + "\n" + "  <header>\n" + "    <globals>\n" + "      <global identifier=\"myList\" type=\"java.util.List\" />\n" + "    </globals>\n" + "    <variables>\n" + "      <variable name=\"x\" >\n" + "        <type name=\"org.jbpm.process.core.datatype.impl.type.IntegerDataType\" />\n" + "      </variable>\n" + "    </variables>\n" + "  </header>\n" + "\n" + "  <nodes>\n" + "    <start id=\"1\" name=\"Start\" />\n" + "    <milestone id=\"2\" name=\"Wait\" >\n" + "      <timers>\n" + "        <timer id=\"1\" delay=\"#{x}\" >\n" + "          <action type=\"expression\" dialect=\"java\" >myList.add(\"Executing timer\");</action>\n" + "        </timer>\n" + "      </timers>\n" + "      <constraint type=\"rule\" dialect=\"mvel\" >eval(false)</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>");
    builder.addRuleFlow(source);
    final KieSession session = createKieSession(builder.getPackages());
    List<String> myList = new ArrayList<String>();
    session.setGlobal("myList", myList);
    new Thread(new Runnable() {

        public void run() {
            session.fireUntilHalt();
        }
    }).start();
    Map<String, Object> params = new HashMap<String, Object>();
    params.put("x", 300);
    ProcessInstance processInstance = (ProcessInstance) session.startProcess("org.drools.timer", params);
    assertEquals(0, myList.size());
    assertEquals(ProcessInstance.STATE_ACTIVE, processInstance.getState());
    assertEquals(1, ((InternalProcessRuntime) ((InternalWorkingMemory) session).getProcessRuntime()).getTimerManager().getTimers().size());
    try {
        Thread.sleep(400);
    } catch (InterruptedException e) {
    // do nothing
    }
    assertEquals(1, myList.size());
    session.dispose();
}
Also used : HashMap(java.util.HashMap) ArrayList(java.util.ArrayList) Reader(java.io.Reader) StringReader(java.io.StringReader) InternalWorkingMemory(org.drools.core.common.InternalWorkingMemory) StringReader(java.io.StringReader) KieSession(org.kie.api.runtime.KieSession) ProcessInstance(org.jbpm.process.instance.ProcessInstance) Test(org.junit.Test) AbstractBaseTest(org.jbpm.test.util.AbstractBaseTest)

Example 78 with InternalWorkingMemory

use of org.drools.core.common.InternalWorkingMemory in project jbpm by kiegroup.

the class ProcessTimerTest method testVariableSimpleProcess.

@Test
public void testVariableSimpleProcess() throws Exception {
    Reader source = new StringReader("<?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=\"org.drools.timer\" package-name=\"org.jbpm\" version=\"1\" >\n" + "\n" + "  <header>\n" + "    <imports>\n" + "      <import name=\"org.jbpm.integrationtests.test.Message\" />\n" + "    </imports>\n" + "    <globals>\n" + "      <global identifier=\"myList\" type=\"java.util.List\" />\n" + "    </globals>\n" + "    <variables>\n" + "      <variable name=\"x\" >\n" + "        <type name=\"org.jbpm.process.core.datatype.impl.type.IntegerDataType\" />\n" + "      </variable>\n" + "      <variable name=\"y\" >\n" + "        <type name=\"org.jbpm.process.core.datatype.impl.type.IntegerDataType\" />\n" + "      </variable>\n" + "    </variables>\n" + "  </header>\n" + "\n" + "  <nodes>\n" + "    <start id=\"1\" name=\"Start\" />\n" + "    <end id=\"2\" name=\"End\" />\n" + "    <timerNode id=\"3\" name=\"Timer\" delay=\"#{x}ms\" period=\"#{y}ms\" />\n" + "    <actionNode id=\"4\" name=\"Action\" >\n" + "      <action type=\"expression\" dialect=\"java\" >System.out.println(\"Triggered\");\n" + "myList.add( new Message() );\n" + "insert( new Message() );\n" + "</action>\n" + "    </actionNode>\n" + "    <milestone id=\"5\" name=\"Wait\" >\n" + "      <constraint type=\"rule\" dialect=\"mvel\" >Number( intValue &gt;= 5 ) from accumulate ( m: Message( ), count( m ) )</constraint>\n" + "    </milestone>\n" + "  </nodes>\n" + "\n" + "  <connections>\n" + "    <connection from=\"5\" to=\"2\" />\n" + "    <connection from=\"1\" to=\"3\" />\n" + "    <connection from=\"3\" to=\"4\" />\n" + "    <connection from=\"4\" to=\"5\" />\n" + "  </connections>\n" + "\n" + "</process>");
    builder.addRuleFlow(source);
    if (!builder.getErrors().isEmpty()) {
        for (DroolsError error : builder.getErrors().getErrors()) {
            logger.error(error.toString());
        }
        fail("Could not build process");
    }
    KieSession session = createKieSession(builder.getPackages());
    List<Message> myList = new ArrayList<Message>();
    session.setGlobal("myList", myList);
    Map<String, Object> params = new HashMap<String, Object>();
    params.put("x", 800);
    params.put("y", 200);
    ProcessInstance processInstance = (ProcessInstance) session.startProcess("org.drools.timer", params);
    assertEquals(0, myList.size());
    assertEquals(ProcessInstance.STATE_ACTIVE, processInstance.getState());
    assertEquals(1, ((InternalProcessRuntime) ((InternalWorkingMemory) session).getProcessRuntime()).getTimerManager().getTimers().size());
    // test that the delay works
    try {
        Thread.sleep(400);
    } catch (InterruptedException e) {
    // do nothing
    }
    assertEquals(0, myList.size());
    // test that the period works
    try {
        Thread.sleep(1300);
    } catch (InterruptedException e) {
    // do nothing
    }
    assertEquals(5, myList.size());
    try {
        Thread.sleep(200);
    } catch (InterruptedException e) {
    // do nothing
    }
    assertEquals(ProcessInstance.STATE_COMPLETED, processInstance.getState());
    session.dispose();
}
Also used : Message(org.jbpm.integrationtests.test.Message) HashMap(java.util.HashMap) ArrayList(java.util.ArrayList) Reader(java.io.Reader) StringReader(java.io.StringReader) InternalWorkingMemory(org.drools.core.common.InternalWorkingMemory) DroolsError(org.drools.compiler.compiler.DroolsError) StringReader(java.io.StringReader) KieSession(org.kie.api.runtime.KieSession) ProcessInstance(org.jbpm.process.instance.ProcessInstance) Test(org.junit.Test) AbstractBaseTest(org.jbpm.test.util.AbstractBaseTest)

Example 79 with InternalWorkingMemory

use of org.drools.core.common.InternalWorkingMemory in project jbpm by kiegroup.

the class ProcessTimerTest method testSimpleProcess.

@Test
public void testSimpleProcess() throws Exception {
    Reader source = new StringReader("<?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=\"org.drools.timer\" package-name=\"org.jbpm\" version=\"1\" >\n" + "\n" + "  <header>\n" + "    <imports>\n" + "      <import name=\"org.jbpm.integrationtests.test.Message\" />\n" + "    </imports>\n" + "    <globals>\n" + "      <global identifier=\"myList\" type=\"java.util.List\" />\n" + "    </globals>\n" + "  </header>\n" + "\n" + "  <nodes>\n" + "    <start id=\"1\" name=\"Start\" />\n" + "    <end id=\"2\" name=\"End\" />\n" + "    <timerNode id=\"3\" name=\"Timer\" delay=\"800ms\" period=\"200ms\" />\n" + "    <actionNode id=\"4\" name=\"Action\" >\n" + "      <action type=\"expression\" dialect=\"java\" >System.out.println(\"Triggered\");\n" + "myList.add( new Message() );\n" + "insert( new Message() );\n" + "</action>\n" + "    </actionNode>\n" + "    <milestone id=\"5\" name=\"Wait\" >\n" + "      <constraint type=\"rule\" dialect=\"mvel\" >Number( intValue &gt;= 5 ) from accumulate ( m: Message( ), count( m ) )</constraint>\n" + "    </milestone>\n" + "  </nodes>\n" + "\n" + "  <connections>\n" + "    <connection from=\"5\" to=\"2\" />\n" + "    <connection from=\"1\" to=\"3\" />\n" + "    <connection from=\"3\" to=\"4\" />\n" + "    <connection from=\"4\" to=\"5\" />\n" + "  </connections>\n" + "\n" + "</process>");
    builder.addRuleFlow(source);
    if (!builder.getErrors().isEmpty()) {
        for (DroolsError error : builder.getErrors().getErrors()) {
            logger.error(error.toString());
        }
        fail("Could not build process");
    }
    KieSession session = createKieSession(builder.getPackages());
    List<Message> myList = new ArrayList<Message>();
    session.setGlobal("myList", myList);
    ProcessInstance processInstance = (ProcessInstance) session.startProcess("org.drools.timer");
    assertEquals(0, myList.size());
    assertEquals(ProcessInstance.STATE_ACTIVE, processInstance.getState());
    assertEquals(1, ((InternalProcessRuntime) ((InternalWorkingMemory) session).getProcessRuntime()).getTimerManager().getTimers().size());
    // test that the delay works
    try {
        Thread.sleep(400);
    } catch (InterruptedException e) {
    // do nothing
    }
    assertEquals(0, myList.size());
    // test that the period works
    try {
        Thread.sleep(1300);
    } catch (InterruptedException e) {
    // do nothing
    }
    assertEquals(5, myList.size());
    try {
        Thread.sleep(200);
    } catch (InterruptedException e) {
    // do nothing
    }
    assertEquals(ProcessInstance.STATE_COMPLETED, processInstance.getState());
    session.dispose();
}
Also used : InternalWorkingMemory(org.drools.core.common.InternalWorkingMemory) DroolsError(org.drools.compiler.compiler.DroolsError) Message(org.jbpm.integrationtests.test.Message) StringReader(java.io.StringReader) ArrayList(java.util.ArrayList) Reader(java.io.Reader) StringReader(java.io.StringReader) KieSession(org.kie.api.runtime.KieSession) ProcessInstance(org.jbpm.process.instance.ProcessInstance) Test(org.junit.Test) AbstractBaseTest(org.jbpm.test.util.AbstractBaseTest)

Example 80 with InternalWorkingMemory

use of org.drools.core.common.InternalWorkingMemory in project jbpm by kiegroup.

the class ProcessTimerTest method testOnEntryTimerCancelled.

@Test
public void testOnEntryTimerCancelled() throws Exception {
    Reader source = new StringReader("<?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=\"org.drools.timer\" package-name=\"org.drools\" version=\"1\" >\n" + "\n" + "  <header>\n" + "    <globals>\n" + "      <global identifier=\"myList\" type=\"java.util.List\" />\n" + "    </globals>\n" + "  </header>\n" + "\n" + "  <nodes>\n" + "    <start id=\"1\" name=\"Start\" />\n" + "    <milestone id=\"2\" name=\"Wait\" >\n" + "      <timers>\n" + "        <timer id=\"1\" delay=\"2000\" >\n" + "          <action type=\"expression\" dialect=\"java\" >myList.add(\"Executing timer\");</action>\n" + "        </timer>\n" + "      </timers>\n" + "      <constraint type=\"rule\" dialect=\"mvel\" >org.jbpm.integrationtests.test.Message( )</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>");
    builder.addRuleFlow(source);
    KieSession session = createKieSession(builder.getPackages());
    List<String> myList = new ArrayList<String>();
    session.setGlobal("myList", myList);
    ProcessInstance processInstance = (ProcessInstance) session.startProcess("org.drools.timer");
    assertEquals(0, myList.size());
    assertEquals(ProcessInstance.STATE_ACTIVE, processInstance.getState());
    assertEquals(1, ((InternalProcessRuntime) ((InternalWorkingMemory) session).getProcessRuntime()).getTimerManager().getTimers().size());
    session.insert(new Message());
    session.fireAllRules();
    assertEquals(0, myList.size());
    assertEquals(0, ((InternalProcessRuntime) ((InternalWorkingMemory) session).getProcessRuntime()).getTimerManager().getTimers().size());
    session.dispose();
}
Also used : InternalWorkingMemory(org.drools.core.common.InternalWorkingMemory) Message(org.jbpm.integrationtests.test.Message) StringReader(java.io.StringReader) ArrayList(java.util.ArrayList) Reader(java.io.Reader) StringReader(java.io.StringReader) KieSession(org.kie.api.runtime.KieSession) ProcessInstance(org.jbpm.process.instance.ProcessInstance) Test(org.junit.Test) AbstractBaseTest(org.jbpm.test.util.AbstractBaseTest)

Aggregations

InternalWorkingMemory (org.drools.core.common.InternalWorkingMemory)285 Test (org.junit.Test)217 ObjectTypeNode (org.drools.core.reteoo.ObjectTypeNode)140 KieBase (org.kie.api.KieBase)129 ArrayList (java.util.ArrayList)96 LeftInputAdapterNode (org.drools.core.reteoo.LeftInputAdapterNode)91 List (java.util.List)76 SegmentMemory (org.drools.core.reteoo.SegmentMemory)74 KieSession (org.kie.api.runtime.KieSession)71 RuleTerminalNode (org.drools.core.reteoo.RuleTerminalNode)69 JoinNode (org.drools.core.reteoo.JoinNode)62 BetaMemory (org.drools.core.reteoo.BetaMemory)57 InternalKnowledgeBase (org.drools.core.impl.InternalKnowledgeBase)48 PathMemory (org.drools.core.reteoo.PathMemory)48 LiaNodeMemory (org.drools.core.reteoo.LeftInputAdapterNode.LiaNodeMemory)45 BetaNode (org.drools.core.reteoo.BetaNode)44 FactHandle (org.kie.api.runtime.rule.FactHandle)44 AtomicInteger (java.util.concurrent.atomic.AtomicInteger)35 AlphaNode (org.drools.core.reteoo.AlphaNode)35 ClassObjectType (org.drools.core.base.ClassObjectType)30