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 <[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

Reply via email to