[rules-users] drools flow package issue

nesta.fdb nesta.fdb at 163.com
Mon Nov 23 22:25:12 EST 2009


Hi,
Yes, it is fixed in the latest snapshot releases.
Thanks very much.

Regards,
Nesta



在2009-11-24,"Kris Verlaenen" <Kris.Verlaenen at cs.kuleuven.be> 写道:
>I believe there used to be an issue with action class generation (where
>there could be a clash between actions of different processes), but this
>was fixed quite some time ago.  Could you verify whether the problem
>still exists on the latest snapshot releases?
>http://hudson.jboss.org/hudson/job/drools/lastSuccessfulBuild/artifact/trunk/target/
>
>Kris
>
>Quoting "nesta.fdb" <nesta.fdb at 163.com>:
>
>> 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
>> 
>
>
>
>
>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/20091124/474fbbf6/attachment.html 


More information about the rules-users mailing list