Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在DROOLS中从一个规则访问另一个规则的arraylist_Drools - Fatal编程技术网

如何在DROOLS中从一个规则访问另一个规则的arraylist

如何在DROOLS中从一个规则访问另一个规则的arraylist,drools,Drools,这是作为规则引擎的java文件 RuleRunner.java public class RuleRunner { KieSession kSession = null; public RuleRunner() { } /** * Method that executes all the rules specified in rule file * * @param rules * @param facts */ public void runRules(String[] rul

这是作为规则引擎的java文件 RuleRunner.java

public class RuleRunner {
KieSession kSession = null;

public RuleRunner() {
}

/**
 * Method that executes all the rules specified in rule file
 * 
 * @param rules
 * @param facts
 */
public void runRules(String[] rules, String[] values) {

    KieServices kieServices = KieServices.Factory.get();
    KieResources kieResources = kieServices.getResources();
    KieFileSystem kieFileSystem = kieServices.newKieFileSystem();
    KieRepository kieRepository = kieServices.getRepository();

    for (String ruleFile : rules) {
        Resource resource = kieResources.newClassPathResource(ruleFile);
        kieFileSystem.write(
                "src/main/resources/com/skills421/examples/drools6_0/"
                        + ruleFile, resource);
    }

    KieBuilder kb = kieServices.newKieBuilder(kieFileSystem);

    kb.buildAll();
    if (kb.getResults().hasMessages(Level.ERROR)) {
        throw new RuntimeException("Build Errors:\n"
                + kb.getResults().toString());
    }

    KieContainer kContainer = kieServices.newKieContainer(kieRepository
            .getDefaultReleaseId());

    kSession = kContainer.newKieSession();
    for (String value : values){
    kSession.insert(value);
    }
    kSession.fireAllRules();


}
}

这是Main.java,它集成了drl文件和规则引擎

public class Main
{
public static void main(String[] args)
{
    long startTime = System.currentTimeMillis();
    //Creating the rule and specifying the rule file
    RuleRunner runner = new RuleRunner();



    String[] rules = { "test1.drl"};
    String[] values={"creditcard","personal_status","male single"};
    //Object[] facts = { new CreditCard("male single",25,">=7")};


    runner.runRules(rules,values);

    long endTime = System.currentTimeMillis();
    System.out.println("Took "+(endTime - startTime) + " ms"); 
}
}

我不太会流口水。这是我的.drl文件

dialect "mvel"
/*
*This rule picks people with good credit record and an employment history      
of more than 7 years
*/

rule "Credit Card employment and class check"
when 
passList : ArrayList()
$creditCard : CreditCard() from passList
eval($creditCard.get_class() == "good" && $creditCard.getEmployment() ==    
">=7")

then 
passList = new  ArrayList();
passList.add($creditCard);

end  

dialect "java"

rule "passList check"
 when 
  eval( true )
 then
   System.out.println("passList size2....");
end    

我想将passList的计算值从规则1传递到规则2。如有任何帮助,将不胜感激。

这与Drools的使用方式相去甚远。请不要发布代码-描述您的Java类和问题,即。,如果检查成功或失败,应该检查和执行哪些操作。感谢您的回复。我的规则运行程序基本上会向数据存储触发一个规则,并以arraylist的形式检索记录。我们检查列表中的一个条件,以确定类是否良好,雇用期是否超过7年。我们只添加与第二个arraylist匹配的对象。我想检查另一个规则中新计算的arraylist。我正在寻找将arraylist传递给第二个规则的方法。是否可以在第一个规则中为arraylist声明一个局部变量,然后将其发送给第二个规则?这根本不起作用。插入三个字符串对象creditcard、personal_status、male single,但您的规则引用了包含creditcard对象的ArrayList。-不能将新值分配给绑定变量,因为它位于第一个规则密码列表中。无法将变量从一个规则传递到下一个规则。全局变量或insert是否有助于通过规则访问ArrayList