[rules-users] Problem when using multiple rule files (Drools 5)

Olaf Raether o.raether at epro.de
Thu Jul 23 07:21:29 EDT 2009


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 at 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 at 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%29-tp24623347p24623763.html
Sent from the drools - user mailing list archive at Nabble.com.




More information about the rules-users mailing list