Как я могу реализовать пример Drools 5 в Drools 7 - PullRequest
0 голосов
/ 23 февраля 2019

Я новичок в Drools и натолкнулся на некоторые примеры Drools 5, которые я намереваюсь реализовать в Drools 7. Однако некоторые классы, которые существовали в Drools 5, больше не доступны в Drools 7, например, DroolsParserException, PackageBuilder и т. Д. Мне было интереснокаковы их замены в Drools 7. Я предполагаю, что могут быть методы KIE, которые соответствуют этим.Это фрагмент кода, над которым я работаю

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. Спасибо.

1 Ответ

0 голосов
/ 05 мая 2019

Я наконец достиг своей цели и смог успешно написать приведенный выше фрагмент кода в Drools 7. Поэтому, чтобы облегчить задачу любому, кто изучает Drools 7, я подготовил другой пример, используя некоторые классы Java (т.е. Person иСтраховка) которая у меня уже была.Так что для любого, кто использует Drools, этот код вам нужно реализовать, все, кроме методов runTheRule () и ruleencapsulate () являются общими, вам придется использовать их в своем коде.

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; 
          }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...