@Test
public void testReload() throws Exception {
final PackageBuilder builder = new PackageBuilder();
final PackageDescr packageDescr = new PackageDescr( "p1" );
final RuleDescr ruleDescr = new RuleDescr( "rule-1" );
packageDescr.addRule( ruleDescr );
final AndDescr lhs = new AndDescr();
ruleDescr.setLhs( lhs );
packageDescr.addGlobal( new GlobalDescr( "map",
"java.util.Map" ) );
ruleDescr.setConsequence( "map.put(\"value\", new Integer(1) );" );
builder.addPackage( packageDescr );
Package pkg = builder.getPackage();
Rule rule = pkg.getRule( "rule-1" );
assertLength( 0,
builder.getErrors().getErrors() );
final ReteooRuleBase ruleBase = (ReteooRuleBase) RuleBaseFactory.newRuleBase();
ruleBase.getGlobals().put( "map",
Map.class );
final WorkingMemory workingMemory = ruleBase.newStatefulSession();
final HashMap map = new HashMap();
workingMemory.setGlobal( "map",
map );
final LeftTuple tuple = new MockTuple( new HashMap() );
tuple.setLeftTupleSink( new RuleTerminalNode(1, null, rule,rule.getLhs(), new BuildContext(ruleBase, null) ) );
final Activation activation = new MockActivation( rule,
0,
rule.getLhs(),
tuple );
DefaultKnowledgeHelper knowledgeHelper = new org.drools.base.DefaultKnowledgeHelper( workingMemory );
knowledgeHelper.setActivation( activation );
rule.getConsequence().evaluate( knowledgeHelper,
workingMemory );
assertEquals( new Integer( 1 ),
map.get( "value" ) );
ruleDescr.setConsequence( "map.put(\"value\", new Integer(2) );" );
pkg.removeRule( rule );
// Make sure the compiled classes are also removed
assertEquals( 0,
((JavaDialectRuntimeData) pkg.getDialectRuntimeRegistry().getDialectData( "java" )).list().length );