I create *.pkg file with the following app:
--------------------------------------------------------------------------------------------------
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStreamReader;
import java.io.ObjectOutputStream;
import java.net.URL;
import org.drools.RuleBase;
import org.drools.RuleBaseFactory;
import org.drools.WorkingMemory;
import org.drools.rule.Package;
import org.drools.compiler.PackageBuilder;
public class DroolsPackageWriter {
String[] fileNames = { "rulefile1", "rulefile2"};
public void readWritePackages() {
for(int i = 0; i < fileNames.length; i++) {
try {
RuleBase ruleBase = RuleBaseFactory.newRuleBase();
PackageBuilder builder = new PackageBuilder();
String ruleFile = fileNames[i] + ".drl";
System.out.println("Lese:"+ ruleFile);
builder.addPackageFromDrl(new
InputStreamReader(DroolsPackageWriter.class.getResourceAsStream(ruleFile)));
Package pkg = builder.getPackage();
ruleBase.addPackage(pkg);
WorkingMemory workingMemory = ruleBase.newStatefulSession();
workingMemory.fireAllRules();
URL url = DroolsPackageWriter.class.getResource(ruleFile);
String file = url.getPath().replaceAll("%20","
").replaceAll(".drl",
".pkg");
File f = new File(file);
pkg.writeExternal(new ObjectOutputStream(new FileOutputStream(f)));
System.out.println("geschrieben:"+ file);
}
catch(Exception ex) {
ex.printStackTrace();
}
}
}
/**
* @param args
*/
public static void main(String[] args) {
DroolsPackageWriter dpw = new DroolsPackageWriter();
dpw.readWritePackages();
}
}
--------------------------------------------------------------------------------------------------
I the app where i read the *.pkg files the code looks like this:
---------------------------------------------------------------
String[] rules = new String[]{"rule1.pkg","rule2.pkg" };
RuleBase ruleBase = RuleBaseFactory.newRuleBase();
for (int i = 0; i < rules.length; i++) {
String ruleFile = rules[i];
log.debug("Loading file: " + ruleFile);
pkg = new Package();
pkg.readExternal(new
ObjectInputStream(this.getClass().getResourceAsStream(ruleFile)));
ruleBase.addPackage(pkg);
}
WorkingMemory workingMemory = ruleBase.newStatefulSession();
setGlobals(workingMemory);
Object[] facts = { /* anything you want */};
for (int i = 0; i < facts.length; i++) {
Object fact = facts[i];
log.debug("Inserting fact: " + fact);
try {
workingMemory.insert(fact);
} catch(NullPointerException npe) {
System.out.println("NPE bei Fact:"+fact);
npe.printStackTrace();
}
}
workingMemory.fireAllRules();
log.debug("END: runRules()");
}
---------------------------------------------------------------
Hope this helps - to help me !
Wolfgang Laun-2 wrote:
On 7/23/09, Olaf Raether <o.raether(a)epro.de> wrote:
>
> The code looks like this:
>
> RuleBase ruleBase = RuleBaseFactory.newRuleBase();
> for (int i = 0; i < rules.length; i++) {
> Package pkg = getPackage(i);
> ruleBase.addPackage(pkg);
> }
I'd expect to find "Package pkg = rules[i];" or similar in the loop.
Anyway, this doesn't tell how the Package objects were created from your
two
rules files, which might be significant.
Do you check for package build errors?
-W
for (int i = 0; i < facts.length; i++) {
> Object fact = facts[i];
> workingMemory.insert(fact); // <<<<< Exception, when
multiple
> rule
> files
> }
>
>
_______________________________________________
rules-users mailing list
rules-users(a)lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users
--
View this message in context:
http://www.nabble.com/Problem-when-using-multiple-rule-files-%28Drools-5%...
Sent from the drools - user mailing list archive at
Nabble.com.