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 <[email protected]> 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 <[email protected]> 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 > > [email protected] > > 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%29-tp24623347p24623763.html > Sent from the drools - user mailing list archive at Nabble.com. > > _______________________________________________ > rules-users mailing list > [email protected] > https://lists.jboss.org/mailman/listinfo/rules-users >
_______________________________________________ rules-users mailing list [email protected] https://lists.jboss.org/mailman/listinfo/rules-users
