首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Drools 7中实现Drools 5示例

如何在Drools 7中实现Drools 5示例
EN

Stack Overflow用户
提问于 2019-02-23 23:31:04
回答 1查看 368关注 0票数 0

我是Drools的新手,我遇到了一些Drools 5的例子,我打算在Drools 7中实现它们。然而,Drools 5中存在的一些类在Drools 7中不再可用,例如DroolsParserException,PackageBuilder等。我想知道它们在Drools 7中的替代品是什么。我假设可能有与这些类相对应的KIE方法。这是我正在编写的一段代码

代码语言:javascript
复制
public void executeDrools() throws DroolsParserException, IOException 
{
   PackageBuilder packbuild = new PackageBuilder();

   String ruleFile = "/com/rules/manufacturerRules.drl";

   InputStream inStream = getClass().getResourceAsStream(ruleFile);

   Reader reader = new InputStreamReader(inStream);

   packageBuilder.addPackageFromDrl(reader);

   Package rulesPackage = packbuild.getPackage();

   RuleBase ruleBase = RuleBaseFactory.newRuleBase();

   ruleBase.addPackage(rulesPackage);

   WorkingMemory inmemory = ruleBase.newStatefulSession();

   Garment manufactuer = new Garment();

   manufactuer.setQuota(10000);

   manufactuer.setExpectation(45000);

   manufactuer.setTimeline(10);

   inmemory.insert(manufactuer);

   inmemory.fireAllRules();

}

非常感谢关于如何使用Drools 7实现这一点的一些指导。谢谢。

EN

回答 1

Stack Overflow用户

发布于 2019-05-05 16:28:12

我最终实现了我的目标,并且能够成功地用Drools 7编写上面的代码。所以,为了让正在学习Drools 7的人更容易,我使用了一些我已经拥有的Java类(即Person和Insurance)编写了一个不同的示例。所以对于任何使用Drools的人来说,这就是你需要实现的代码,除了runTheRule()和ruleencapsulate()方法之外的所有东西都是泛型的,你必须在你的代码中使用它们。

代码语言:javascript
复制
import java.io.IOException;
import org.drools.compiler.kie.builder.impl.InternalKieModule;
import org.drools.compiler.kie.builder.impl.KieContainerImpl;
import org.drools.compiler.kie.builder.impl.KieModuleKieProject;
import org.drools.compiler.kie.builder.impl.KieProject;
import org.kie.api.KieServices;
import org.kie.api.builder.KieBuilder;
import org.kie.api.builder.KieFileSystem;
import org.kie.api.builder.KieModule;
import org.kie.api.builder.KieRepository;
import org.kie.api.builder.ReleaseId;

import org.kie.api.runtime.KieContainer;
import org.kie.api.runtime.KieSession;
import org.kie.internal.io.ResourceFactory;
import org.springframework.core.io.Resource;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.core.io.support.ResourcePatternResolver;


public class ruleClass {

     private static final String RULES_PATH = "C:/MyDrools_files/";
     private static final String RULES_FILE="DroolsLogic.drl";
     public ruleClass()
     {

     }
     public void runTheRule()
        {
            Person p=new Person();
            p.setTime(15);
            p.setName("Ulugh Khan");
            Insurance i=new Insurance();
            ruleencapsulate(p, i);

            System.out.println("--The Following is the output---");
            System.out.println(p.getGreet()+" "+i.getMessage());
        }
        private void ruleencapsulate(Person p, Insurance i)
        {
            try {
                KieSession chamSession=chkieSession();
                chamSession.insert(p);
                chamSession.setGlobal("insure", i);
                chamSession.fireAllRules();
            }
            catch(Exception e)
            {
                e.printStackTrace();
            }

        }
        private KieFileSystem chkieFileSystem() throws IOException 
        {
            KieFileSystem kieFileSystem = getchKieServices().newKieFileSystem();            
           try {
                for (Resource file : getchRuleFiles()) 
                {
                    org.kie.api.io.Resource theResource=ResourceFactory.newFileResource(file.getFile());        
                    kieFileSystem.write(theResource);                 
                }
           }
           catch(Exception ex)
           {
               ex.printStackTrace();
           }
                return kieFileSystem;
        }

        private KieContainer chkieContainer() throws IOException  
        {
           final KieRepository kieRepository = getchKieServices().getRepository();

            kieRepository.addKieModule(new KieModule() {
                public ReleaseId getReleaseId() 
                {
                    return kieRepository.getDefaultReleaseId();
                }
            });

            KieBuilder kieBuilder = getchKieServices().newKieBuilder(chkieFileSystem());
            kieBuilder.buildAll();

            ReleaseId release=kieRepository.getDefaultReleaseId();
            KieProject kieProject = new KieModuleKieProject((InternalKieModule) kieBuilder.getKieModule());
            KieContainer contains=new KieContainerImpl(kieProject, KieServices.Factory.get().getRepository(), release);
           return contains;   
        } 

        private KieSession chkieSession() throws IOException 
        {
            return chkieContainer().newKieSession();
        }

          private KieServices getchKieServices() 
          {
                return KieServices.Factory.get();
          }
          private Resource[] getchRuleFiles() throws IOException 
          {
             ResourcePatternResolver resourcePatternResolver = new PathMatchingResourcePatternResolver();
             Resource[] resc=resourcePatternResolver.getResources("file:"+RULES_PATH+RULES_FILE);

             return resc; 
          }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54843146

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档