jbpm进程未使用ruleFlowGroup触发drools规则

jbpm进程未使用ruleFlowGroup触发drools规则,drools,jbpm,Drools,Jbpm,我无法从jbpm业务规则任务中触发规则。似乎找不到该进程的规则文件。试着解释一下 首先,我扩展了Drools示例,在其中添加了业务规则任务,并设置了ruleFlowGroup: 这是业务规则任务规则1的属性: processTest.java简单设置消息和启动进程: package com.sample; import org.kie.api.KieServices; import org.kie.api.runtime.KieContainer; import org.kie.api.r

我无法从jbpm业务规则任务中触发规则。似乎找不到该进程的规则文件。试着解释一下

首先,我扩展了Drools示例,在其中添加了业务规则任务,并设置了ruleFlowGroup:

这是业务规则任务规则1的属性:

processTest.java简单设置消息和启动进程:

package com.sample;

import org.kie.api.KieServices;
import org.kie.api.runtime.KieContainer;
import org.kie.api.runtime.KieSession;

import com.sample.DroolsTest.Message;

/**
 * This is a sample file to launch a process.
 */
public class ProcessTest {

    public static final void main(String[] args) {
        try {
            // load up the knowledge base
            KieServices ks = KieServices.Factory.get();
            KieContainer kContainer = ks.getKieClasspathContainer();
            KieSession kSession = kContainer.newKieSession("ksession-process");

            // go !
            Message message = new Message();
            message.setMessage("Hello Giorgio");
            message.setStatus(Message.HELLO);
            kSession.insert(message);

            // start a new process instance
            kSession.startProcess("com.sample.bpmn.hello");
        } catch (Throwable t) {
            t.printStackTrace();
        }
    }

}
然后,我运行并正确触发脚本任务(“Hello world”),但在RuleGroup1.drl中未找到规则:

//created on: 21-gen-2019
package com.sample

//list any import classes here.
import com.sample.DroolsTest.Message;


//declare any global variables here


rule "First Giorgio rule"
    ruleflow-group "Group1"

    when
        m : Message( status == Message.HELLO, myMessage : message )
    then
        System.out.println( "rule0 Group1" );

end

rule "Your First Rule"
    ruleflow-group "Group1"
    when
        //conditions
    then
        System.out.println( "rule1 Group1" );

end

rule "Your Second Rule"
    ruleflow-group "Group1"
    //include attributes such as "salience" here...
    when
        //conditions
    then
        System.out.println( "rule2 Group1" );

end
遵循项目文件夹:


谢谢您的帮助。

我决定添加一个
kSession.fireAllRules()
并将流程和规则文件存储在同一个包中

  • 修改kmodule.xml以添加ksession名称“processrules”:

    
    
  • 创建一个链接到ksession name的新包。就我而言,规则:


  • 确保规则文件和流程文件位于同一文件夹中。 最重要的是,确保规则文件中声明的包与包含它的目录名以及kmodule.xml中的包声明一致。如果它们不同步,您的规则将不会被解雇。
    检查此示例项目

    要触发规则执行,必须在代码中添加“ksession.fireAllRules()”。尝试添加它。正确,我忘记了kSession.fireAllRules()但是。。。这还不够。另一个需要做的事情是修改kmodule.xml以添加新的包,其中存储所有流程和规则文件。现在它工作了。
    <?xml version="1.0" encoding="UTF-8"?>
    <kmodule xmlns="http://jboss.org/kie/6.0.0/kmodule">
        <kbase name="rules" packages="rules">
            <ksession name="ksession-rules"/>
        </kbase>
        <kbase name="dtables" packages="dtables">
            <ksession name="ksession-dtables"/>
        </kbase>
        <kbase name="process" packages="process">
            <ksession name="ksession-process"/>
        </kbase>
        <kbase name="processrules" packages="processrules">
            <ksession name="ksession-processrules"/>
        </kbase>
    </kmodule>