The simplest would be to create a physical subclass of DefaultAgendaEventListener rather than the anonymous one used to date:-<br><br>MyEventListener myEventListener = new MyEventListener(myGlobal);<br>ksession.addEventListener(myEventListener);<br>
<br>class MyEventListener extends DefaultAgendaEventListener {<br><br>    private Set&lt;Rule&gt; rules;<br><br>    public MyEventListener(Set&lt;Rule&gt; rules) {<br>        this.rules = rules;<br>    }<br><br>    @Override<br>
    public void activationCreated(ActivationCreatedEvent event) {<br>        rules.remove(event.getActivation().getRule());<br>    }<br><br>    @Override<br>    public void activationCancelled(ActivationCancelledEvent event) {<br>
        rules.add((Rule) event.getActivation().getRule());<br>    }<br>}<br><br>Note: you also need to use a Set instead of a List for your &quot;myGlobal&quot;.<br><br><div class="gmail_quote">2010/10/14 Navdeep Kumar <span dir="ltr">&lt;<a href="mailto:nkumar@objectwave.com">nkumar@objectwave.com</a>&gt;</span><br>
<blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">Yes i am using Eclipse IDE, i tried other import statements and errors are gone now.<br><div>
<br></div><div><div><span style="white-space: pre-wrap;">        </span>Map&lt;String,String&gt; availablity = new HashMap&lt;String,String&gt;();</div>
<div><span style="white-space: pre-wrap;">                </span><b>List&lt;Rule&gt;myGlobal = new ArrayList&lt;Rule&gt;();</b></div><div><span style="white-space: pre-wrap;">                </span>//Feature feature = new Feature();</div>
<div><span style="white-space: pre-wrap;">                </span></div><div><span style="white-space: pre-wrap;">                </span>try{</div><div><span style="white-space: pre-wrap;">                        </span>LOG.info(&quot;Before calling the function readKnowledgeBase&quot;);</div>

<div><span style="white-space: pre-wrap;">                        </span>//KnowledgeBase kbase = readKnowledgeBase();</div><div><span style="white-space: pre-wrap;">                        </span>LOG.info(&quot;Rule file is loaded&quot;);</div>
<div><span style="white-space: pre-wrap;">                        </span>KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();</div><div><span style="white-space: pre-wrap;">                        </span>kbuilder.add(ResourceFactory.newClassPathResource(&quot;AvailabilityRule.drl&quot;), ResourceType.DRL);</div>

<div><span style="white-space: pre-wrap;">                        </span>LOG.info(&quot;Rule file added to the knowledgebuilder&quot;);</div><div><span style="white-space: pre-wrap;">                        </span>KnowledgeBuilderErrors errors = kbuilder.getErrors();</div>

<div><span style="white-space: pre-wrap;">                        </span></div><div><span style="white-space: pre-wrap;">                        </span>if (errors.size() &gt; 0) {</div><div><span style="white-space: pre-wrap;">                                </span>for (KnowledgeBuilderError error: errors) {</div>

<div><span style="white-space: pre-wrap;">                                        </span>LOG.error(errors);</div><div><span style="white-space: pre-wrap;">                                        </span>LOG.error(&quot;in error loop of readKnowledgeBase&quot;);</div>
<div><span style="white-space: pre-wrap;">                                </span>}</div><div><span style="white-space: pre-wrap;">                                </span>throw new IllegalArgumentException(&quot;Could not parse knowledge.&quot;);</div><div class="im">
<div><span style="white-space: pre-wrap;">                        </span>}</div><div><span style="white-space: pre-wrap;">                        </span>KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();</div><div><span style="white-space: pre-wrap;">                        </span> </div>

<div><span style="white-space: pre-wrap;">                        </span>Collection&lt;KnowledgePackage&gt;kpackages = kbuilder.getKnowledgePackages();</div><div><span style="white-space: pre-wrap;">                        </span>kbase.addKnowledgePackages(kpackages);</div>

</div><div><span style="white-space: pre-wrap;">                        </span>StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();</div><div><span style="white-space: pre-wrap;">                        </span>KnowledgeRuntimeLogger logger = KnowledgeRuntimeLoggerFactory.newFileLogger(ksession, &quot;test&quot;);</div>

<div><span style="white-space: pre-wrap;">                        </span>ksession.setGlobal(&quot;availablity&quot;, availablity);</div><div><span style="white-space: pre-wrap;">                        </span><b>for(KnowledgePackage kpackage : kpackages) {</b></div>

<div><span style="white-space: pre-wrap;"><b>                        </b></span><b>    for(org.drools.definition.rule.Rule rule : kpackage.getRules()) {</b></div><div><span style="white-space: pre-wrap;"><b>                        </b></span><b>        myGlobal.add((Rule) rule);</b></div>

<div><span style="white-space: pre-wrap;"><b>                        </b></span><b>    }</b></div><div><span style="white-space: pre-wrap;"><b>                        </b></span><b>}</b></div><div><br></div><div><span style="white-space: pre-wrap;">                        </span>ksession.insert(Obj1);</div>

<div><span style="white-space: pre-wrap;">                        </span>ksession.insert(Obj2);</div><div><span style="white-space: pre-wrap;">                        </span>LOG.info(&quot;Rules are fired&quot;);</div><div class="im"><div><span style="white-space: pre-wrap;">                        </span><b>ksession.addEventListener(new DefaultAgendaEventListener() {</b></div>

<div><span style="white-space: pre-wrap;"><b>                        </b></span><b>    @Override</b></div></div><div><span style="white-space: pre-wrap;"><b>                                </b></span><b>public</b></div><div class="im"><div><span style="white-space: pre-wrap;"><b>                        </b></span><b>    void activationCreated(ActivationCreatedEvent event) {</b></div>

<div><span style="white-space: pre-wrap;"><b>                        </b></span><b>        myGlobal.remove(event.getActivation().getRule());</b></div><div><span style="white-space: pre-wrap;"><b>                        </b></span><b>    }</b></div>
<div><b><br></b></div><div><span style="white-space: pre-wrap;"><b>                        </b></span><b>    @Override</b></div></div><div><span style="white-space: pre-wrap;"><b>                                </b></span><b>public</b></div><div>
<span style="white-space: pre-wrap;"><b>                        </b></span><b>    void activationCancelled(ActivationCancelledEvent event) {</b></div><div><span style="white-space: pre-wrap;"><b>                        </b></span><b>        myGlobal.add((Rule) event.getActivation().getRule());</b></div>

<div><span style="white-space: pre-wrap;"><b>                        </b></span><b>    }</b></div><div><span style="white-space: pre-wrap;"><b>                        </b></span><b>});</b></div><div><span style="white-space: pre-wrap;">                        </span>ksession.addEventListener( new DefaultAgendaEventListener() {</div>

<div><span style="white-space: pre-wrap;">                        </span>    public void afterActivationFired(AfterActivationFiredEvent event) {</div><div><span style="white-space: pre-wrap;">                        </span>        super.afterActivationFired( event );</div>

<div><span style="white-space: pre-wrap;">                        </span>        System.out.println( event );</div><div><span style="white-space: pre-wrap;">                        </span>    }</div><div><span style="white-space: pre-wrap;">                        </span>});</div>
<div><span style="white-space: pre-wrap;">                        </span>ksession.fireAllRules();</div></div><div><br></div><div><br></div><div><br></div><div><br></div><div>i declared myGlobal at the top of the program before the rule file is loading. the added code is in bold. it changed Rule:rule to some import statement, i guess that is because of casting. but in the both of the action listeners it is giving me an error saying that myGlobal should be declared final because of inner class. if i will declare this final i cant do anything with this. this is the last error which i have now. please suggest what to do with that.</div>

<div><br></div><div>Thanks</div>
<br>_______________________________________________<br>
rules-users mailing list<br>
<a href="mailto:rules-users@lists.jboss.org">rules-users@lists.jboss.org</a><br>
<a href="https://lists.jboss.org/mailman/listinfo/rules-users" target="_blank">https://lists.jboss.org/mailman/listinfo/rules-users</a><br>
<br></blockquote></div><br>