1
votes

I am working on drools Drools/Java program (Drools 6.2). I have 3 separate drools files (.drl) where the rules are stored. When I build and deploy this program with Maven it creates a JAR file and the rules are inside this JAR file in a "rules" folder. However, when I run this program, it can not find the Drools files and not fire them.

The error I get is:

 "java.io.FileNotFoundException: /src/main/resources/rules/Rule1.drl (No such file or directory)"

The program is structured:

src - main
           - java - com - Java files
           - resources - rules - Drools files.

This is the method that calles and fires the rules.

String drlFileName = "./src/main/resources/rules/Rule1.drl");   

KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();

FileInputStream fis = null;
try {
    fis = new FileInputStream(drlFileName);
} catch (FileNotFoundException e) {
    e.printStackTrace();
}

kbuilder.add( ResourceFactory.newInputStreamResource(fis), ResourceType.DRL);       
KnowledgeBuilderErrors errors = kbuilder.getErrors();
if (errors.size() > 0) {
    for (KnowledgeBuilderError error: errors) {
         System.err.println(error);
     }
     throw new IllegalArgumentException("Could not parse knowledge.");
}
KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
//Create a kbase using the generated kpackages
kbase.addKnowledgePackages(kbuilder.getKnowledgePackages());
StatefulKnowledgeSession kSession = kbase.newStatefulKnowledgeSession();

What should I do so when the program is run and it tries to fire the rules, it know where these Drools files are?

Should I include anything in my .classpath file or in pom.xml file? Should I fire the rules differently?

1

1 Answers

0
votes

Try tihs to load your file

ClassLoader classLoader = getClass().getClassLoader();
File file = new File(classLoader.getResource("rules/Rule1.drl").getFile());

Also make sure you have resources added in your pom

< resources >  
       < resource >  
          < directory > src/main/resources </ directory >  
       </ resource >  
   </ resources >