<div>Hi,<br>Yes, it is fixed in the latest snapshot releases.<br>Thanks very much.<br><br>Regards,<br>Nesta<br></div><div></div><br><pre>在2009-11-24,"Kris Verlaenen" &lt;Kris.Verlaenen@cs.kuleuven.be&gt; 写道:
&gt;I believe there used to be an issue with action class generation (where
&gt;there could be a clash between actions of different processes), but this
&gt;was fixed quite some time ago.  Could you verify whether the problem
&gt;still exists on the latest snapshot releases?
&gt;http://hudson.jboss.org/hudson/job/drools/lastSuccessfulBuild/artifact/trunk/target/
&gt;
&gt;Kris
&gt;
&gt;Quoting "nesta.fdb" &lt;nesta.fdb@163.com&gt;:
&gt;
&gt;&gt; Hi,
&gt;&gt; 
&gt;&gt; As my understanding, drools will generate java classes for action of
&gt;&gt; rule flow. It seems that if there are two rule flows, and they are in
&gt;&gt; one package, drools thinks that it's dirty to load generated java
&gt;&gt; class of second package, so drools will reload it.
&gt;&gt; 
&gt;&gt; Thanks very much.
&gt;&gt; 
&gt;&gt; Full stack trace:
&gt;&gt; Exception in thread "main" java.lang.NoSuchMethodError:
&gt;&gt;
&gt;sample.Process_sample_0.action0(Lorg/drools/spi/KnowledgeHelper;Lorg/drools/spi/ProcessContext;)V
&gt;&gt;     at
&gt;&gt;
&gt;sample.Process_sample_0Action0Invoker.execute(Process_sample_0Action0Invoker.java:20)
&gt;&gt;     at
&gt;&gt;
&gt;org.drools.workflow.instance.node.ActionNodeInstance.internalTrigger(ActionNodeInstance.java:54)
&gt;&gt;     at
&gt;&gt;
&gt;org.drools.workflow.instance.impl.NodeInstanceImpl.trigger(NodeInstanceImpl.java:111)
&gt;&gt;     at
&gt;&gt;
&gt;org.drools.workflow.instance.impl.NodeInstanceImpl.triggerConnection(NodeInstanceImpl.java:141)
&gt;&gt;     at
&gt;&gt;
&gt;org.drools.workflow.instance.impl.NodeInstanceImpl.triggerCompleted(NodeInstanceImpl.java:128)
&gt;&gt;     at
&gt;&gt;
&gt;org.drools.workflow.instance.node.StartNodeInstance.triggerCompleted(StartNodeInstance.java:49)
&gt;&gt;     at
&gt;&gt;
&gt;org.drools.workflow.instance.node.StartNodeInstance.internalTrigger(StartNodeInstance.java:41)
&gt;&gt;     at
&gt;&gt;
&gt;org.drools.workflow.instance.impl.NodeInstanceImpl.trigger(NodeInstanceImpl.java:111)
&gt;&gt;     at
&gt;&gt;
&gt;org.drools.ruleflow.instance.RuleFlowProcessInstance.internalStart(RuleFlowProcessInstance.java:16)
&gt;&gt;     at
&gt;&gt;
&gt;org.drools.process.instance.impl.ProcessInstanceImpl.start(ProcessInstanceImpl.java:185)
&gt;&gt;     at
&gt;&gt;
&gt;org.drools.workflow.instance.impl.WorkflowProcessInstanceImpl.start(WorkflowProcessInstanceImpl.java:230)
&gt;&gt;     at
&gt;&gt;
&gt;org.drools.common.AbstractWorkingMemory.startProcess(AbstractWorkingMemory.java:1639)
&gt;&gt;     at
&gt;&gt;
&gt;org.drools.workflow.instance.node.SubProcessNodeInstance.internalTrigger(SubProcessNodeInstance.java:83)
&gt;&gt;     at
&gt;&gt;
&gt;org.drools.workflow.instance.impl.NodeInstanceImpl.trigger(NodeInstanceImpl.java:111)
&gt;&gt;     at
&gt;&gt;
&gt;org.drools.workflow.instance.impl.NodeInstanceImpl.triggerConnection(NodeInstanceImpl.java:141)
&gt;&gt;     at
&gt;&gt;
&gt;org.drools.workflow.instance.impl.NodeInstanceImpl.triggerCompleted(NodeInstanceImpl.java:128)
&gt;&gt;     at
&gt;&gt;
&gt;org.drools.workflow.instance.node.JoinInstance.triggerCompleted(JoinInstance.java:152)
&gt;&gt;     at
&gt;&gt;
&gt;org.drools.workflow.instance.node.JoinInstance.internalTrigger(JoinInstance.java:52)
&gt;&gt;     at
&gt;&gt;
&gt;org.drools.workflow.instance.impl.NodeInstanceImpl.trigger(NodeInstanceImpl.java:111)
&gt;&gt;     at
&gt;&gt;
&gt;org.drools.workflow.instance.impl.NodeInstanceImpl.triggerConnection(NodeInstanceImpl.java:141)
&gt;&gt;     at
&gt;&gt;
&gt;org.drools.workflow.instance.impl.NodeInstanceImpl.triggerCompleted(NodeInstanceImpl.java:128)
&gt;&gt;     at
&gt;&gt;
&gt;org.drools.workflow.instance.node.ActionNodeInstance.triggerCompleted(ActionNodeInstance.java:62)
&gt;&gt;     at
&gt;&gt;
&gt;org.drools.workflow.instance.node.ActionNodeInstance.internalTrigger(ActionNodeInstance.java:58)
&gt;&gt;     at
&gt;&gt;
&gt;org.drools.workflow.instance.impl.NodeInstanceImpl.trigger(NodeInstanceImpl.java:111)
&gt;&gt;     at
&gt;&gt;
&gt;org.drools.workflow.instance.impl.NodeInstanceImpl.triggerConnection(NodeInstanceImpl.java:141)
&gt;&gt;     at
&gt;&gt;
&gt;org.drools.workflow.instance.node.SplitInstance.internalTrigger(SplitInstance.java:74)
&gt;&gt;     at
&gt;&gt;
&gt;org.drools.workflow.instance.impl.NodeInstanceImpl.trigger(NodeInstanceImpl.java:111)
&gt;&gt;     at
&gt;&gt;
&gt;org.drools.workflow.instance.impl.NodeInstanceImpl.triggerConnection(NodeInstanceImpl.java:141)
&gt;&gt;     at
&gt;&gt;
&gt;org.drools.workflow.instance.impl.NodeInstanceImpl.triggerCompleted(NodeInstanceImpl.java:128)
&gt;&gt;     at
&gt;&gt;
&gt;org.drools.workflow.instance.node.StartNodeInstance.triggerCompleted(StartNodeInstance.java:49)
&gt;&gt;     at
&gt;&gt;
&gt;org.drools.workflow.instance.node.StartNodeInstance.internalTrigger(StartNodeInstance.java:41)
&gt;&gt;     at
&gt;&gt;
&gt;org.drools.workflow.instance.impl.NodeInstanceImpl.trigger(NodeInstanceImpl.java:111)
&gt;&gt;     at
&gt;&gt;
&gt;org.drools.ruleflow.instance.RuleFlowProcessInstance.internalStart(RuleFlowProcessInstance.java:16)
&gt;&gt;     at
&gt;&gt;
&gt;org.drools.process.instance.impl.ProcessInstanceImpl.start(ProcessInstanceImpl.java:185)
&gt;&gt;     at
&gt;&gt;
&gt;org.drools.workflow.instance.impl.WorkflowProcessInstanceImpl.start(WorkflowProcessInstanceImpl.java:230)
&gt;&gt;     at
&gt;&gt;
&gt;org.drools.common.AbstractWorkingMemory.startProcess(AbstractWorkingMemory.java:1639)
&gt;&gt;     at
&gt;&gt;
&gt;org.drools.common.AbstractWorkingMemory.startProcess(AbstractWorkingMemory.java:1604)
&gt;&gt;     at
&gt;&gt;
&gt;org.drools.impl.StatefulKnowledgeSessionImpl.startProcess(StatefulKnowledgeSessionImpl.java:267)
&gt;&gt;     at
&gt;&gt; drools.ruleflow.xiayu.XiaYuSubflowTest.main(XiaYuSubflowTest.java:32)
&gt;&gt; 
&gt;&gt; 
&gt;&gt; 
&gt;&gt; 
&gt;&gt; 
&gt;&gt; ÔÚ2009-11-23£¬"Kris Verlaenen" &lt;Kris.Verlaenen@cs.kuleuven.be&gt; Ð´µÀ£º
&gt;&gt; &gt;What do you mean by "NoSuchMethod error is thrown" ?  Could you
&gt;&gt; provide
&gt;&gt; &gt;the full stack trace?  In theory, you should simply be able to call
&gt;&gt; any
&gt;&gt; &gt;other process, whether it is in the same package or not.
&gt;&gt; &gt;
&gt;&gt; &gt;Kris
&gt;&gt; &gt;
&gt;&gt; &gt;Quoting "nesta.fdb" &lt;nesta.fdb@163.com&gt;:
&gt;&gt; &gt;
&gt;&gt; &gt;&gt; Drools version: 5.0.1
&gt;&gt; &gt;&gt; I defined two flows, one is main flow and the other is sub flow.
&gt;&gt; &gt;&gt; These two flows have same package name, and are built and added
&gt;&gt; into
&gt;&gt; &gt;&gt; one knowledge base.
&gt;&gt; &gt;&gt; When I start the main flow process, the NoSuchMethod error is
&gt;&gt; thrown
&gt;&gt; &gt;&gt; out.
&gt;&gt; &gt;&gt; 
&gt;&gt; &gt;&gt; I also test with two unrelated flows, and I can't get correct
&gt;&gt; result.
&gt;&gt; &gt;&gt; 
&gt;&gt; &gt;&gt; 
&gt;&gt; &gt;&gt; So my question is that whether there is the constraint which two
&gt;&gt; &gt;&gt; flows must not have same package name?
&gt;&gt; &gt;&gt; 
&gt;&gt; &gt;&gt; main.rf
&gt;&gt; &gt;&gt; &lt;?xml version="1.0" encoding="UTF-8"?&gt; 
&gt;&gt; &gt;&gt; &lt;process xmlns="http://drools.org/drools-5.0/process"
&gt;&gt; &gt;&gt;          xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"
&gt;&gt; &gt;&gt;          xs:schemaLocation="http://drools.org/drools-5.0/process
&gt;&gt; &gt;&gt; drools-processes-5.0.xsd"
&gt;&gt; &gt;&gt;          type="RuleFlow" name="flow" id="process_plan"
&gt;&gt; &gt;&gt; package-name="sample" version="" &gt;
&gt;&gt; &gt;&gt; 
&gt;&gt; &gt;&gt;   &lt;header&gt;
&gt;&gt; &gt;&gt;     &lt;variables&gt;
&gt;&gt; &gt;&gt;       &lt;variable name="v1" &gt;
&gt;&gt; &gt;&gt;         &lt;type
&gt;&gt; &gt;&gt; name="org.drools.process.core.datatype.impl.type.BooleanDataType"
&gt;&gt; /&gt;
&gt;&gt; &gt;&gt;         &lt;value&gt;false&lt;/value&gt;
&gt;&gt; &gt;&gt;       &lt;/variable&gt;
&gt;&gt; &gt;&gt;     &lt;/variables&gt;
&gt;&gt; &gt;&gt;   &lt;/header&gt;
&gt;&gt; &gt;&gt; 
&gt;&gt; &gt;&gt;   &lt;nodes&gt;
&gt;&gt; &gt;&gt;     &lt;start id="1" name="Start" x="195" y="15" width="30"
&gt;&gt; height="30"
&gt;&gt; &gt;&gt; /&gt;
&gt;&gt; &gt;&gt;     &lt;split id="2" name="Split" x="185" y="70" width="40"
&gt;&gt; height="40"
&gt;&gt; &gt;&gt; type="2" &gt;
&gt;&gt; &gt;&gt;       &lt;constraints&gt;
&gt;&gt; &gt;&gt;         &lt;constraint toNodeId="10" toType="DROOLS_DEFAULT" name="a"
&gt;&gt; &gt;&gt; priority="1" type="code" dialect="java" &gt;return v1;&lt;/constraint&gt;
&gt;&gt; &gt;&gt;         &lt;constraint toNodeId="11" toType="DROOLS_DEFAULT" name="b"
&gt;&gt; &gt;&gt; priority="1" type="code" dialect="java" &gt;return !v1;&lt;/constraint&gt;
&gt;&gt; &gt;&gt;       &lt;/constraints&gt;
&gt;&gt; &gt;&gt;     &lt;/split&gt;
&gt;&gt; &gt;&gt;     &lt;join id="5" name="Join" x="185" y="260" width="40"
&gt;&gt; height="40"
&gt;&gt; &gt;&gt; type="2" /&gt;
&gt;&gt; &gt;&gt;     &lt;actionNode id="7" name="test" x="155" y="320" width="100"
&gt;&gt; &gt;&gt; height="80" &gt;
&gt;&gt; &gt;&gt;         &lt;action type="expression" dialect="java"
&gt;&gt; &gt;&gt; &gt;System.out.println("Action Test");&lt;/action&gt;
&gt;&gt; &gt;&gt;     &lt;/actionNode&gt;
&gt;&gt; &gt;&gt;     &lt;end id="8" name="End" x="191" y="436" width="28" height="28"
&gt;&gt; /&gt;
&gt;&gt; &gt;&gt;     &lt;subProcess id="9" name="SubProcess" x="312" y="292"
&gt;&gt; width="96"
&gt;&gt; &gt;&gt; height="76" processId="com.sample.subflow" independent="false" &gt;
&gt;&gt; &gt;&gt;     &lt;/subProcess&gt;
&gt;&gt; &gt;&gt;     &lt;actionNode id="10" name="a" x="75" y="151" width="80"
&gt;&gt; &gt;&gt; height="40" &gt;
&gt;&gt; &gt;&gt;         &lt;action type="expression" dialect="java"
&gt;&gt; &gt;&gt; &gt;System.out.println("a");&lt;/action&gt;
&gt;&gt; &gt;&gt;     &lt;/actionNode&gt;
&gt;&gt; &gt;&gt;     &lt;actionNode id="11" name="b" x="287" y="153" width="80"
&gt;&gt; &gt;&gt; height="40" &gt;
&gt;&gt; &gt;&gt;         &lt;action type="expression" dialect="java"
&gt;&gt; &gt;&gt; &gt;System.out.println("b");&lt;/action&gt;
&gt;&gt; &gt;&gt;     &lt;/actionNode&gt;
&gt;&gt; &gt;&gt;   &lt;/nodes&gt;
&gt;&gt; &gt;&gt; 
&gt;&gt; &gt;&gt;   &lt;connections&gt;
&gt;&gt; &gt;&gt;     &lt;connection from="1" to="2" /&gt;
&gt;&gt; &gt;&gt;     &lt;connection from="10" to="5" /&gt;
&gt;&gt; &gt;&gt;     &lt;connection from="11" to="5" /&gt;
&gt;&gt; &gt;&gt;     &lt;connection from="9" to="7" /&gt;
&gt;&gt; &gt;&gt;     &lt;connection from="7" to="8" /&gt;
&gt;&gt; &gt;&gt;     &lt;connection from="5" to="9" /&gt;
&gt;&gt; &gt;&gt;     &lt;connection from="2" to="10" /&gt;
&gt;&gt; &gt;&gt;     &lt;connection from="2" to="11" /&gt;
&gt;&gt; &gt;&gt;   &lt;/connections&gt;
&gt;&gt; &gt;&gt; 
&gt;&gt; &gt;&gt; &lt;/process&gt;
&gt;&gt; &gt;&gt; 
&gt;&gt; &gt;&gt; sub.rf
&gt;&gt; &gt;&gt; &lt;?xml version="1.0" encoding="UTF-8"?&gt; 
&gt;&gt; &gt;&gt; &lt;process xmlns="http://drools.org/drools-5.0/process"
&gt;&gt; &gt;&gt;          xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"
&gt;&gt; &gt;&gt;          xs:schemaLocation="http://drools.org/drools-5.0/process
&gt;&gt; &gt;&gt; drools-processes-5.0.xsd"
&gt;&gt; &gt;&gt;          type="RuleFlow" name="subflow" id="com.sample.subflow"
&gt;&gt; &gt;&gt; package-name="sample" version="" &gt;
&gt;&gt; &gt;&gt; 
&gt;&gt; &gt;&gt;   &lt;header&gt;
&gt;&gt; &gt;&gt;   &lt;/header&gt;
&gt;&gt; &gt;&gt; 
&gt;&gt; &gt;&gt;   &lt;nodes&gt;
&gt;&gt; &gt;&gt;     &lt;start id="1" name="Start" x="29" y="76" width="30"
&gt;&gt; height="30"
&gt;&gt; &gt;&gt; /&gt;
&gt;&gt; &gt;&gt;     &lt;actionNode id="2" name="Action" x="134" y="51" width="100"
&gt;&gt; &gt;&gt; height="80" &gt;
&gt;&gt; &gt;&gt;         &lt;action type="expression" dialect="java"
&gt;&gt; &gt;&gt; &gt;System.out.println("This is test subflow");&lt;/action&gt;
&gt;&gt; &gt;&gt;     &lt;/actionNode&gt;
&gt;&gt; &gt;&gt;     &lt;end id="3" name="End" x="309" y="77" width="28" height="28"
&gt;&gt; /&gt;
&gt;&gt; &gt;&gt;     &lt;actionNode id="4" name="Action" x="240" y="210" width="100"
&gt;&gt; &gt;&gt; height="80" &gt;
&gt;&gt; &gt;&gt;         &lt;action type="expression" dialect="java"
&gt;&gt; &gt;&gt; &gt;System.out.println("This is test 2222");&lt;/action&gt;
&gt;&gt; &gt;&gt;     &lt;/actionNode&gt;
&gt;&gt; &gt;&gt;   &lt;/nodes&gt;
&gt;&gt; &gt;&gt; 
&gt;&gt; &gt;&gt;   &lt;connections&gt;
&gt;&gt; &gt;&gt;     &lt;connection from="1" to="2" /&gt;
&gt;&gt; &gt;&gt;     &lt;connection from="4" to="3" /&gt;
&gt;&gt; &gt;&gt;     &lt;connection from="2" to="4" /&gt;
&gt;&gt; &gt;&gt;   &lt;/connections&gt;
&gt;&gt; &gt;&gt; 
&gt;&gt; &gt;&gt; &lt;/process&gt;
&gt;&gt; &gt;&gt; 
&gt;&gt; &gt;&gt; Test codes:
&gt;&gt; &gt;&gt; public class XiaYuSubflowTest {
&gt;&gt; &gt;&gt;     
&gt;&gt; &gt;&gt;     public static void main(String[] args) {
&gt;&gt; &gt;&gt;         KnowledgeBuilder builder =
&gt;&gt; &gt;&gt; KnowledgeBuilderFactory.newKnowledgeBuilder();
&gt;&gt; &gt;&gt;        
&gt;&gt; builder.add(ResourceFactory.newClassPathResource("main.rf"),
&gt;&gt; &gt;&gt; ResourceType.DRF);
&gt;&gt; &gt;&gt;        
&gt;&gt; builder.add(ResourceFactory.newClassPathResource("sub.rf"),
&gt;&gt; &gt;&gt; ResourceType.DRF);
&gt;&gt; &gt;&gt;         if (builder.hasErrors()) {
&gt;&gt; &gt;&gt;             System.out.println(builder.getErrors());
&gt;&gt; &gt;&gt;         }
&gt;&gt; &gt;&gt;         KnowledgeBase kbase =
&gt;&gt; &gt;&gt; KnowledgeBaseFactory.newKnowledgeBase();
&gt;&gt; &gt;&gt;        
&gt;&gt; kbase.addKnowledgePackages(builder.getKnowledgePackages());
&gt;&gt; &gt;&gt;         StatefulKnowledgeSession sks =
&gt;&gt; &gt;&gt; kbase.newStatefulKnowledgeSession();        
&gt;&gt; &gt;&gt;         sks.startProcess("process_plan");    
&gt;&gt; &gt;&gt;         sks.dispose();        
&gt;&gt; &gt;&gt;     }
&gt;&gt; &gt;&gt; }
&gt;&gt; &gt;&gt; 
&gt;&gt; &gt;
&gt;&gt; &gt;
&gt;&gt; &gt;
&gt;&gt; &gt;
&gt;&gt; &gt;Disclaimer: http://www.kuleuven.be/cwis/email_disclaimer.htm
&gt;&gt; 
&gt;
&gt;
&gt;
&gt;
&gt;Disclaimer: http://www.kuleuven.be/cwis/email_disclaimer.htm
</pre><br><br><span title="neteasefooter"/><hr/>
<a href="http://allyes.nie.163.com/main/adfclick?db=afanie&bid=1254,611,23&cid=145,4,1&sid=1351&show=ignore&url=http://tx2.163.com/fab.html">09年新晋3D主流网游《天下贰》,网易六年亿资打造</a>
</span>