Hi,

As my understanding, drools will generate java classes for action of rule flow. 
It seems that if there are two rule flows, and they are in one package, drools 
thinks that it's dirty to load generated java class of second package, so 
drools will reload it.

Thanks very much.

Full stack trace:
Exception in thread "main" java.lang.NoSuchMethodError: 
sample.Process_sample_0.action0(Lorg/drools/spi/KnowledgeHelper;Lorg/drools/spi/ProcessContext;)V
    at 
sample.Process_sample_0Action0Invoker.execute(Process_sample_0Action0Invoker.java:20)
    at 
org.drools.workflow.instance.node.ActionNodeInstance.internalTrigger(ActionNodeInstance.java:54)
    at 
org.drools.workflow.instance.impl.NodeInstanceImpl.trigger(NodeInstanceImpl.java:111)
    at 
org.drools.workflow.instance.impl.NodeInstanceImpl.triggerConnection(NodeInstanceImpl.java:141)
    at 
org.drools.workflow.instance.impl.NodeInstanceImpl.triggerCompleted(NodeInstanceImpl.java:128)
    at 
org.drools.workflow.instance.node.StartNodeInstance.triggerCompleted(StartNodeInstance.java:49)
    at 
org.drools.workflow.instance.node.StartNodeInstance.internalTrigger(StartNodeInstance.java:41)
    at 
org.drools.workflow.instance.impl.NodeInstanceImpl.trigger(NodeInstanceImpl.java:111)
    at 
org.drools.ruleflow.instance.RuleFlowProcessInstance.internalStart(RuleFlowProcessInstance.java:16)
    at 
org.drools.process.instance.impl.ProcessInstanceImpl.start(ProcessInstanceImpl.java:185)
    at 
org.drools.workflow.instance.impl.WorkflowProcessInstanceImpl.start(WorkflowProcessInstanceImpl.java:230)
    at 
org.drools.common.AbstractWorkingMemory.startProcess(AbstractWorkingMemory.java:1639)
    at 
org.drools.workflow.instance.node.SubProcessNodeInstance.internalTrigger(SubProcessNodeInstance.java:83)
    at 
org.drools.workflow.instance.impl.NodeInstanceImpl.trigger(NodeInstanceImpl.java:111)
    at 
org.drools.workflow.instance.impl.NodeInstanceImpl.triggerConnection(NodeInstanceImpl.java:141)
    at 
org.drools.workflow.instance.impl.NodeInstanceImpl.triggerCompleted(NodeInstanceImpl.java:128)
    at 
org.drools.workflow.instance.node.JoinInstance.triggerCompleted(JoinInstance.java:152)
    at 
org.drools.workflow.instance.node.JoinInstance.internalTrigger(JoinInstance.java:52)
    at 
org.drools.workflow.instance.impl.NodeInstanceImpl.trigger(NodeInstanceImpl.java:111)
    at 
org.drools.workflow.instance.impl.NodeInstanceImpl.triggerConnection(NodeInstanceImpl.java:141)
    at 
org.drools.workflow.instance.impl.NodeInstanceImpl.triggerCompleted(NodeInstanceImpl.java:128)
    at 
org.drools.workflow.instance.node.ActionNodeInstance.triggerCompleted(ActionNodeInstance.java:62)
    at 
org.drools.workflow.instance.node.ActionNodeInstance.internalTrigger(ActionNodeInstance.java:58)
    at 
org.drools.workflow.instance.impl.NodeInstanceImpl.trigger(NodeInstanceImpl.java:111)
    at 
org.drools.workflow.instance.impl.NodeInstanceImpl.triggerConnection(NodeInstanceImpl.java:141)
    at 
org.drools.workflow.instance.node.SplitInstance.internalTrigger(SplitInstance.java:74)
    at 
org.drools.workflow.instance.impl.NodeInstanceImpl.trigger(NodeInstanceImpl.java:111)
    at 
org.drools.workflow.instance.impl.NodeInstanceImpl.triggerConnection(NodeInstanceImpl.java:141)
    at 
org.drools.workflow.instance.impl.NodeInstanceImpl.triggerCompleted(NodeInstanceImpl.java:128)
    at 
org.drools.workflow.instance.node.StartNodeInstance.triggerCompleted(StartNodeInstance.java:49)
    at 
org.drools.workflow.instance.node.StartNodeInstance.internalTrigger(StartNodeInstance.java:41)
    at 
org.drools.workflow.instance.impl.NodeInstanceImpl.trigger(NodeInstanceImpl.java:111)
    at 
org.drools.ruleflow.instance.RuleFlowProcessInstance.internalStart(RuleFlowProcessInstance.java:16)
    at 
org.drools.process.instance.impl.ProcessInstanceImpl.start(ProcessInstanceImpl.java:185)
    at 
org.drools.workflow.instance.impl.WorkflowProcessInstanceImpl.start(WorkflowProcessInstanceImpl.java:230)
    at 
org.drools.common.AbstractWorkingMemory.startProcess(AbstractWorkingMemory.java:1639)
    at 
org.drools.common.AbstractWorkingMemory.startProcess(AbstractWorkingMemory.java:1604)
    at 
org.drools.impl.StatefulKnowledgeSessionImpl.startProcess(StatefulKnowledgeSessionImpl.java:267)
    at drools.ruleflow.xiayu.XiaYuSubflowTest.main(XiaYuSubflowTest.java:32)





在2009-11-23,"Kris Verlaenen" <[email protected]> 写道:
>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" <[email protected]>:
>
>> 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();        
>>     }
>> }
>> 
>
>
>
>
>Disclaimer: http://www.kuleuven.be/cwis/email_disclaimer.htm
_______________________________________________
rules-users mailing list
[email protected]
https://lists.jboss.org/mailman/listinfo/rules-users

Reply via email to