Consider adapting to the new API using KnowledgeBuilder etc. You can use a
ObjectOutput/InputStream with write/readObject on
Collection<KnowledgePackage>, which simplifies matters somewhat.
See below, two remarks.
On 7/23/09, Olaf Raether <o.raether(a)epro.de> wrote:
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)));
Here, call builder.getErrors() or at least builder.hasErrors() and check the
result.
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" };
Above, we had rulefile1, rulefile2?
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.
_______________________________________________
rules-users mailing list
rules-users(a)lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users