Hallo Ich versuche, drl-Datei aus dem Dateisystem in drools 6.3.0 zu laden. Ich habe den Code von Drools-Projekt. Code, der verwendet wird, um Drl-Datei zu laden, ist wie folgt.Wie drl-Datei aus dem Dateisystem in drools 6.3.0 laden
package org.drools.examples.banking;
import org.kie.internal.KnowledgeBase;
import org.kie.internal.KnowledgeBaseFactory;
import org.kie.internal.builder.KnowledgeBuilder;
import org.kie.internal.builder.KnowledgeBuilderFactory;
import org.kie.internal.definition.KnowledgePackage;
import org.kie.internal.io.ResourceFactory;
import org.kie.internal.runtime.StatefulKnowledgeSession;
import org.kie.api.io.ResourceType;
import java.util.Collection;
public class RuleRunner {
public RuleRunner() {
}
public void runRules(String[] rules,
Object[] facts) {
KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
for (int i = 0; i < rules.length; i++) {
String ruleFile = rules[i];
System.out.println("Loading file: " + ruleFile);
kbuilder.add(ResourceFactory.newClassPathResource(ruleFile,
RuleRunner.class),
ResourceType.DRL);
}
Collection<KnowledgePackage> pkgs = kbuilder.getKnowledgePackages();
kbase.addKnowledgePackages(pkgs);
/*ResourceFactory.getResourceChangeNotifierService().start();
ResourceFactory.getResourceChangeScannerService().start();
*/
StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
for (int i = 0; i < facts.length; i++) {
Object fact = facts[i];
System.out.println("Inserting fact: " + fact);
ksession.insert(fact);
}
ksession.fireAllRules();
}
}
Hier ist KnowledgeBase veraltet. Gibt es eine Alternative für KnowledgeBase? Wenn Alternativen vorhanden sind, geben Sie mir bitte einen Beispielcode dafür. Ich möchte nicht Drl-Datei im Ressourcenordner der Anwendung kopieren. Jede Hilfe wird geschätzt. Am Ende habe ich es wie folgt:
KieServices kieServices = KieServices.Factory.get();
KieFileSystem kfs = kieServices.newKieFileSystem();
kfs.write(ResourceFactory.newFileResource(new File("C:/Users/ab/Desktop/fly.drl")));
KieBuilder kieBuilder = kieServices.newKieBuilder(kfs).buildAll();
KieContainer kieContainer = kieServices.newKieContainer(kieServices.getRepository().getDefaultReleaseId());
KieSessionConfiguration conf= SessionConfiguration.getDefaultInstance();
KieSession ksession = kieContainer.newKieSession(conf);
if (kieBuilder.getResults().hasMessages(Level.ERROR)) {
List<Message> errors = kieBuilder.getResults().getMessages(Level.ERROR);
StringBuilder sb = new StringBuilder("Errors:");
for (Message msg : errors) {
sb.append("\n " + msg);
}
throw new Exception(sb.toString());
}
System.out.println("KieServices built: ");
Ich glaube, dass KnowledgeBase und Freunde durch KieServices.Factory.Get() ersetzt werden und dann die KieServices verwenden, um zu erstellen, was auch immer Sie benötigen. – pandaadb
Es funktioniert auch in 6.4.0. Finale. Dankessssssssss! – capcom923
Und es funktioniert in 7.4.0. Finale!! Vielen Dank! – jjmartinez