[rules-users] drools flow package issue

nesta.fdb nesta.fdb at 163.com
Sun Nov 22 23:46:58 EST 2009


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" <Kris.Verlaenen at cs.kuleuven.be> 写道:
>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 at 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();        
>>     }
>> }
>> 
>
>
>
>
>Disclaimer: http://www.kuleuven.be/cwis/email_disclaimer.htm
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/rules-users/attachments/20091123/008ef83f/attachment.html 


More information about the rules-users mailing list