Hello,
I am currently working on a Drools project using eclipse kepler and the drools plug-in from drools 601.
I have a main java class that contains POJO classes representing facts and the initialization of the kie container and session. When executing the command System.out.println(kContainer.verify().getMessages().toString()); I get the following messages:(note the warning “No files found for KieBase InfectionRules, searching folder…”)
[main] INFO org.drools.compiler.kie.builder.impl.ClasspathKieProject - Found kmodule: file:/C:/TFM/Infections/Workspace/InfectionRules/VAP/target/META-INF/kmodule.xml
[main] INFO org.drools.compiler.kie.builder.impl.KieRepositoryImpl - KieModule was added:FileKieModule[ ReleaseId=${project.groupId}:${project.artifactId}:${project.version}file=\TFM\Infections\Workspace\InfectionRules\VAP\target]
[main] INFO org.drools.compiler.kie.builder.impl.ClasspathKieProject - Found kmodule: file:/C:/TFM/Infections/Workspace/InfectionRules/VAP/target/META-INF/kmodule.xml
[main] INFO org.drools.compiler.kie.builder.impl.KieRepositoryImpl - KieModule was added:FileKieModule[ ReleaseId=${project.groupId}:${project.artifactId}:${project.version}file=\TFM\Infections\Workspace\InfectionRules\VAP\target]
[main] WARN org.drools.compiler.kie.builder.impl.AbstractKieModule - No files found for KieBase InfectionRules, searching folder \TFM\Infections\Workspace\InfectionRules\VAP\target
[]
java.lang.NullPointerException
at InfectionRules.VAPDroolsTest.main(VAPDroolsTest.java:62)
The kie initialization module has the following code:
package InfectionRules;
import java.util.*;
import java.util.concurrent.TimeUnit;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import org.drools.core.time.*;
import org.kie.internal.*;
import org.kie.api.conf.EventProcessingOption;
import org.kie.api.runtime.KieRuntime;
import org.kie.api.KieBaseConfiguration;
import org.kie.api.KieServices;
import org.kie.api.runtime.KieContainer;
import org.kie.api.runtime.KieSession;
import org.kie.api.runtime.KieSessionConfiguration;
import org.kie.api.runtime.conf.ClockTypeOption;
import org.kie.api.runtime.rule.EntryPoint;
import org.kie.api.runtime.rule.FactHandle;
import org.kie.api.time.SessionClock;
public static void main(final String[] args) {
try {
// load up the knowledge base
KieServices ks = KieServices.Factory.get();
KieContainer kContainer = ks.getKieClasspathContainer();
System.out.println(kContainer.verify().getMessages().toString());
KieSession kSession = kContainer.newKieSession("VAPSession");
// set clock to pseudo clock to be able to advance it manually
KieSessionConfiguration ksconf = KieServices.Factory.get().newKieSessionConfiguration();
ksconf.setOption(ClockTypeOption.get("pseudo"));
SessionPseudoClock clock = kSession.getSessionClock();
// set stream mode as opposite to cloud mode
KieBaseConfiguration config = KieServices.Factory.get().newKieBaseConfiguration();
config.setOption(EventProcessingOption.STREAM );
// Insert test patients and related classes
// mr Jones has no VAP, so the cpi score is less than 6
final Patient p1 = new Patient( "MrJones", 45, 1, false,false,true,37.0,
5000,"None","No Infiltrate","None","No Growth","S.Aureus",235,true, false, 0,
true,new SimpleDateFormat("yyyy-MM-dd").parse("2014-05-17"),"",
new SimpleDateFormat("yyyy-MM-dd").parse("2014-05-17"),false,false,false,false);
kSession.insert( p1 );
// get a reference to the entry point and insert events
EntryPoint nursingStream = kSession.getEntryPoint( "NursingStream" );
final CPIScore cpiScore1 = new CPIScore( p1,"initial",7);
nursingStream.insert( cpiScore1 );
clock.advanceTime( 75, TimeUnit.HOURS );
final CPIScore cpiScore2 = new CPIScore( p1,"3days",7 );
nursingStream..insert( cpiScore2 );
I am running this class directly from the Eclipse Run menu option. I have installed maven but I’m not using it (yet)
The kmodule.xml file has the following format:
<?xml version="1.0" encoding="UTF-8"?>
<kmodule xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://jboss.org/kie/6.0.0/kmodule">
<kbase name="InfectionRules" eventProcessingMode="stream" packages="InfectionRules">
<ksession name="VAPSession" type="stateful" clockType="pseudo" />
</kbase>
</kmodule>
(I have tried to change the packages field of kmodule to *, but it does not work either.)
And the directory structure where both the java and drl code reside is:
C:\TFM\Infections\Workspace\InfectionRules\VAP\src\main
Subdirectory java contains the java classes and resources the drl file.
The target directory is located under ..\VAP\target\ with the following structure:
From Eclipse IDE this is the project structure
Any idea as to what I’m doing wrong? I don´t know why the kmodule does not locate the kbase in the directory \TFM\Infections\Workspace\InfectionRules\VAP\target as this directory contains the drl file vap.drl in the rules subdirectory. Although I get later a null pointer exception, I guess that it has to do with this warning, as if there is no kbase located no session can be used.
Thanks in advance!
Best regards
Natalia
Este mensaje no contiene virus ni malware porque la protección de avast! Antivirus está activa. |