我是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实现这一点的一些指导。谢谢。
发布于 2019-05-05 16:28:12
我最终实现了我的目标,并且能够成功地用Drools 7编写上面的代码。所以,为了让正在学习Drools 7的人更容易,我使用了一些我已经拥有的Java类(即Person和Insurance)编写了一个不同的示例。所以对于任何使用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;
}
}https://stackoverflow.com/questions/54843146
复制相似问题