What do you mean by "NoSuchMethod error is thrown" ? Could you provide
the full stack trace? In theory, you should simply be able to call any
other process, whether it is in the same package or not.
Kris
Quoting "nesta.fdb" <nesta.fdb(a)163.com>:
Drools version: 5.0.1
I defined two flows, one is main flow and the other is sub flow.
These two flows have same package name, and are built and added into
one knowledge base.
When I start the main flow process, the NoSuchMethod error is thrown
out.
I also test with two unrelated flows, and I can't get correct result.
So my question is that whether there is the constraint which two
flows must not have same package name?
main.rf
<?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="flow" id="process_plan"
package-name="sample" version="" >
<header>
<variables>
<variable name="v1" >
<type
name="org.drools.process.core.datatype.impl.type.BooleanDataType" />
<value>false</value>
</variable>
</variables>
</header>
<nodes>
<start id="1" name="Start" x="195" y="15"
width="30" height="30"
/>
<split id="2" name="Split" x="185" y="70"
width="40" height="40"
type="2" >
<constraints>
<constraint toNodeId="10" toType="DROOLS_DEFAULT"
name="a"
priority="1" type="code" dialect="java" >return
v1;</constraint>
<constraint toNodeId="11" toType="DROOLS_DEFAULT"
name="b"
priority="1" type="code" dialect="java" >return
!v1;</constraint>
</constraints>
</split>
<join id="5" name="Join" x="185" y="260"
width="40" height="40"
type="2" />
<actionNode id="7" name="test" x="155"
y="320" width="100"
height="80" >
<action type="expression" dialect="java"
>System.out.println("Action Test");</action>
</actionNode>
<end id="8" name="End" x="191" y="436"
width="28" height="28" />
<subProcess id="9" name="SubProcess" x="312"
y="292" width="96"
height="76" processId="com.sample.subflow"
independent="false" >
</subProcess>
<actionNode id="10" name="a" x="75"
y="151" width="80"
height="40" >
<action type="expression" dialect="java"
>System.out.println("a");</action>
</actionNode>
<actionNode id="11" name="b" x="287"
y="153" width="80"
height="40" >
<action type="expression" dialect="java"
>System.out.println("b");</action>
</actionNode>
</nodes>
<connections>
<connection from="1" to="2" />
<connection from="10" to="5" />
<connection from="11" to="5" />
<connection from="9" to="7" />
<connection from="7" to="8" />
<connection from="5" to="9" />
<connection from="2" to="10" />
<connection from="2" to="11" />
</connections>
</process>
sub.rf
<?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="subflow"
id="com.sample.subflow"
package-name="sample" version="" >
<header>
</header>
<nodes>
<start id="1" name="Start" x="29" y="76"
width="30" height="30"
/>
<actionNode id="2" name="Action" x="134"
y="51" width="100"
height="80" >
<action type="expression" dialect="java"
>System.out.println("This is test subflow");</action>
</actionNode>
<end id="3" name="End" x="309" y="77"
width="28" height="28" />
<actionNode id="4" name="Action" x="240"
y="210" width="100"
height="80" >
<action type="expression" dialect="java"
>System.out.println("This is test 2222");</action>
</actionNode>
</nodes>
<connections>
<connection from="1" to="2" />
<connection from="4" to="3" />
<connection from="2" to="4" />
</connections>
</process>
Test codes:
public class XiaYuSubflowTest {
public static void main(String[] args) {
KnowledgeBuilder builder =
KnowledgeBuilderFactory.newKnowledgeBuilder();
builder.add(ResourceFactory.newClassPathResource("main.rf"),
ResourceType.DRF);
builder.add(ResourceFactory.newClassPathResource("sub.rf"),
ResourceType.DRF);
if (builder.hasErrors()) {
System.out.println(builder.getErrors());
}
KnowledgeBase kbase =
KnowledgeBaseFactory.newKnowledgeBase();
kbase.addKnowledgePackages(builder.getKnowledgePackages());
StatefulKnowledgeSession sks =
kbase.newStatefulKnowledgeSession();
sks.startProcess("process_plan");
sks.dispose();
}
}