Hello All,
I created a ruleflow which includes a script and a businessrule task. On execution, my input data is not visible in rules and eventually rule is not getting executed.
Can any one help please?
PFB my drl data:
==========================================================
package com.sample
import com.sample.DroolsTest.Message;
import java.lang.Number;
rule "Hello World"
ruleflow-group "Group1"
when
m : Message( status == Message.HELLO, myMessage : message )
then
System.out.println( "Inside rules" );
System.out.println( myMessage );
m.setMessage( "Goodbye cruel world" );
m.setStatus( Message.GOODBYE );
update( m );
end
==============================================
PFB my ruleflow file:
(The actual file is in the attachment, however for quick view purpose, I placing only the important part of it below).
<bpmn2:resource id="Actor" name="Human Actor"/>
<bpmn2:process id="com.sample.MyRuleFlow" tns:version="1.0" tns:packageName="com.sample" name="Sample Process" isExecutable="false">
<bpmn2:extensionElements>
<tns:import name="com.sample.DroolsTest.Message"/>
</bpmn2:extensionElements>
<bpmn2:property id="ProcVar_Message" itemSubjectRef="ItemDefinition_218" name="ProcVar_Message"/>
<bpmn2:startEvent id="_1" g:x="16" g:y="16" g:width="48" g:height="48" name="StartProcess">
<bpmn2:outgoing>SequenceFlow_1</bpmn2:outgoing>
</bpmn2:startEvent>
<bpmn2:businessRuleTask id="BusinessRuleTask_1" tns:ruleFlowGroup="Group1" name="Business Rule Task 1">
<bpmn2:extensionElements>
<tns:script>System.out.println("The data entered is: "+ProcVar_Message.getMessage());</tns:script>
</tns:onEntry-script>
</bpmn2:extensionElements>
<bpmn2:incoming>SequenceFlow_1</bpmn2:incoming>
<bpmn2:outgoing>SequenceFlow_4</bpmn2:outgoing>
<bpmn2:ioSpecification id="InputOutputSpecification_2">
<bpmn2:dataInput id="DataInput_2" itemSubjectRef="ItemDefinition_218" name="DataInput_2"/>
<bpmn2:dataOutput id="DataOutput_2" itemSubjectRef="ItemDefinition_218" name="DataOutput_2"/>
<bpmn2:inputSet id="_InputSet_2" name="Input Set 2">
<bpmn2:dataInputRefs>DataInput_2</bpmn2:dataInputRefs>
</bpmn2:inputSet>
<bpmn2:outputSet id="OutputSet_1" name="Output Set 1">
<bpmn2:dataOutputRefs>DataOutput_2</bpmn2:dataOutputRefs>
</bpmn2:outputSet>
</bpmn2:ioSpecification>
<bpmn2:dataInputAssociation id="DataInputAssociation_2">
<bpmn2:sourceRef>ProcVar_Message</bpmn2:sourceRef>
<bpmn2:targetRef>DataInput_2</bpmn2:targetRef>
</bpmn2:dataInputAssociation>
<bpmn2:dataOutputAssociation id="DataOutputAssociation_2">
<bpmn2:sourceRef>DataOutput_2</bpmn2:sourceRef>
<bpmn2:targetRef>ProcVar_Message</bpmn2:targetRef>
</bpmn2:dataOutputAssociation>
</bpmn2:businessRuleTask>
<bpmn2:sequenceFlow id="SequenceFlow_1" tns:priority="1" sourceRef="_1" targetRef="BusinessRuleTask_1"/>
<bpmn2:scriptTask id="ScriptTask_1" name="Script Task 1">
<bpmn2:incoming>SequenceFlow_4</bpmn2:incoming>
<bpmn2:outgoing>SequenceFlow_5</bpmn2:outgoing>
<bpmn2:script>System.out.println("The data in message is");</bpmn2:script>
</bpmn2:scriptTask>
<bpmn2:sequenceFlow id="SequenceFlow_4" tns:priority="1" sourceRef="BusinessRuleTask_1" targetRef="ScriptTask_1"/>
<bpmn2:endEvent id="EndEvent_2" name="End Event 2">
<bpmn2:incoming>SequenceFlow_5</bpmn2:incoming>
</bpmn2:endEvent>
<bpmn2:sequenceFlow id="SequenceFlow_5" tns:priority="1" sourceRef="ScriptTask_1" targetRef="EndEvent_2"/>
</bpmn2:process>
==================================================================
PFB the java class used to execute the rule flow.
package com.sample;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import com.sample.DroolsTest.Message;
import org.kie.api.KieServices;
import org.kie.api.logger.KieRuntimeLogger;
import org.kie.api.runtime.KieContainer;
import org.kie.api.runtime.KieSession;
import org.kie.api.runtime.StatelessKieSession;
/**
* This is a sample file to launch a process.
*/
public class ProcessTest {
public static final void main(String[] args) {
try {
KieServices ks = KieServices.Factory.get();
KieContainer kContainer = ks.getKieClasspathContainer();
KieSession kSession = kContainer.newKieSession("ksession-process");
Message ProcVar_Message = new Message();
ProcVar_Message.setMessage("Hello World");
ProcVar_Message.setStatus(Message.HELLO);
KieRuntimeLogger logger = ks.getLoggers().newFileLogger( kSession, "./helloworld" );
kSession.insert(ProcVar_Message);
Map<String, Object> params = new HashMap<String, Object>();
params.put("ProcVar_Message",ProcVar_Message);
kSession.startProcess("com.sample.MyRuleFlow", params);
kSession.fireAllRules();
logger.close();
kSession.dispose();
} catch (Throwable t) {
t.printStackTrace();
}
}
}