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