From 912bc8b903dfa6d438c2469ecdad35c181c71830 Mon Sep 17 00:00:00 2001 From: Trygve Laugstøl Date: Mon, 25 Jan 2021 21:29:12 +0100 Subject: Improving usability, massive refactoring. * Moving all Drools code into their own modules. This fixes ri-engine to acme dependency. * Now they all inherit from their own parent, should be used by third party code too. * Separating acme planning code into its own module. * Splitting rules code from ri-engine into ri-base. ri-engine is now a pure launcher for modules. * Dumping kogito for the most part, but it seems like the planner still requires that. --- .../main/java/io/trygvis/rules/engine/Engine.java | 64 ++++++++++++++++++---- 1 file changed, 53 insertions(+), 11 deletions(-) (limited to 'module/ri-engine/src/main/java/io/trygvis/rules/engine/Engine.java') diff --git a/module/ri-engine/src/main/java/io/trygvis/rules/engine/Engine.java b/module/ri-engine/src/main/java/io/trygvis/rules/engine/Engine.java index b73e2e8..3db1625 100644 --- a/module/ri-engine/src/main/java/io/trygvis/rules/engine/Engine.java +++ b/module/ri-engine/src/main/java/io/trygvis/rules/engine/Engine.java @@ -2,41 +2,83 @@ package io.trygvis.rules.engine; import org.drools.core.audit.WorkingMemoryConsoleLogger; import org.kie.api.KieServices; +import org.kie.api.builder.Message; +import org.kie.api.builder.Message.Level; +import org.kie.api.builder.ReleaseId; import org.kie.api.event.rule.AgendaEventListener; import org.kie.api.event.rule.RuleRuntimeEventListener; import org.kie.api.runtime.KieSession; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import java.io.Closeable; import java.io.File; import java.io.IOException; public class Engine implements Closeable { + private final Logger logger = LoggerFactory.getLogger(getClass()); + public final DbIo io; public final KieSession session; - public Engine(String name, String database, File output, String[] agendaGroups) throws IOException { + public Engine(String name, File database, File output, String[] agendaGroups, File[] modules) throws IOException { + logger.info("Getting KieServices"); + var services = KieServices.Factory.get(); - var container = services.getKieClasspathContainer(); - var kieBase = container.getKieBase(name); - io = new DbIo(kieBase); - var objects = io.load(database); + ReleaseId releaseId = null; + for (File path : (modules == null ? new File[0] : modules)) { + logger.info("New KieBuilder: {}", path); + + +// var kieBuilder = services.newKieBuilder(fileSystem); + var kieBuilder = services.newKieBuilder(path); + logger.info("Building module"); + kieBuilder.buildAll(); + + logger.info("Module built!"); + + var results = kieBuilder.getResults(); + + for (Message message : results.getMessages(Level.INFO, Level.WARNING, Level.ERROR)) { +// logger.info("{} {}", message.getLevel(), message.getText()); + logger.info(message.toString()); + } + + var module = kieBuilder.getKieModule(); + releaseId = module.getReleaseId(); + logger.info("module.getReleaseId() = {}", releaseId); + logger.info("module.getClass() = {}", module.getClass()); + } + + logger.info("Creating classpath container"); +// var container = services.getKieClasspathContainer(); + var container = services.newKieContainer(releaseId); + + logger.info("Creating KieBase"); + logger.info("Available kie base names: {}", container.getKieBaseNames()); + var kieBase = container.getKieBase(name); session = container.newKieSession(name); - var logger = new WorkingMemoryConsoleLogger(session); - session.addEventListener((AgendaEventListener) logger); - session.addEventListener((RuleRuntimeEventListener) logger); + var l = new WorkingMemoryConsoleLogger(session); + session.addEventListener((AgendaEventListener) l); + session.addEventListener((RuleRuntimeEventListener) l); - session.setGlobal("te", new TemplateEngine(output)); + session.setGlobal("te", new JinjavaTemplateEngine(output)); + + logger.info("Loading data"); + io = new DbIo(container, kieBase); + var objects = io.load(database); + logger.info("Loaded {} objects", objects.size()); for (var object : objects) { - System.out.println("object = " + object); + logger.info("object = " + object); session.insert(object); } for (var agendaGroup : agendaGroups) { - System.out.println("Setting agenda: " + agendaGroup); + logger.info("Setting agenda: " + agendaGroup); session.getAgenda().getAgendaGroup(agendaGroup).setFocus(); session.fireAllRules(); } -- cgit v1.2.3