Details
-
Bug
-
Resolution: Done
-
Major
-
3.0, 3.0.1, 3.0.2
-
None
Description
Here is the complete test case to reproduce the error:
package simpletest;
import java.io.InputStreamReader;
import java.util.List;
import mit.rules.test.TestRules;
import org.drools.RuleBase;
import org.drools.RuleBaseFactory;
import org.drools.WorkingMemory;
import org.drools.audit.WorkingMemoryFileLogger;
import org.drools.compiler.PackageBuilder;
public class TestRemovePackage {
public static void main(String[] args) throws Exception
{ // TODO Auto-generated method stub final PackageBuilder builder = new PackageBuilder(); builder.addPackageFromDrl( new InputStreamReader( TestRemovePackage.class.getResourceAsStream( "testremove.drl" ) ) ); final RuleBase ruleBase = RuleBaseFactory.newRuleBase(); String packageName=builder.getPackage().getName(); System.out.println("Package Name " + packageName); ruleBase.addPackage( builder.getPackage() ); final WorkingMemory workingMemory = ruleBase.newWorkingMemory(); fireRules(workingMemory); RuleBase ruleBaseWM=workingMemory.getRuleBase(); System.out.println("ruleBase" + ruleBaseWM.toString()); ruleBaseWM.removePackage(packageName); final PackageBuilder builder1 = new PackageBuilder(); builder1.addPackageFromDrl( new InputStreamReader( TestRules.class.getResourceAsStream( "testremove2.drl" ) ) ); ruleBaseWM.addPackage(builder1.getPackage()); fireRules(workingMemory); } public static void fireRules(WorkingMemory workingMemory) {
final WorkingMemoryFileLogger logger = new WorkingMemoryFileLogger( workingMemory );
logger.setFileName( "log/testcup" );
final boolean dynamic = false;
workingMemory.assertObject( new Precondition(
"genericcode","genericvalue"),
dynamic );
workingMemory.fireAllRules();
List listaStrutture=workingMemory.getObjects(AssertedObject.class);
if (listaStrutture==null)
for (int i=0;i<listaStrutture.size();i++)
{ AssertedObject assObj=(AssertedObject)listaStrutture.get(i); System.out.println("found:" + assObj.getValue()); }
logger.writeToDisk();
}
}
package simpletest;
public class Precondition {
private String code;
private String value;
public Precondition(String code, String value)
{ super(); // TODO Auto-generated constructor stub this.code = code; this.value = value; }public String getValue()
{ return value; }public void setValue(String value) { this.value = value; }
public String getCode() { return code; }
public void setCode(String code) { this.code = code; }
}
package simpletest;
public class AssertedObject {
private String value;
public String getValue() { return value; }
public void setValue(String value)
{ this.value = value; }public AssertedObject(String value)
{ // TODO Auto-generated constructor stub this.value = value; }}
and here is the drl file
package simpletest;
import simpletest.Precondition;
import simpletest.AssertedObject;
rule rule1
salience 10
when
p: Precondition ( code == "genericcode")
then
assert( new AssertedObject( "value1") );
assert( new AssertedObject( "value2") );
end
rule rule2
when
p: Precondition ( code == "genericcode", value=="genericvalue")
then
assert( new AssertedObject( "value3") );
assert( new AssertedObject( "value4") );
end