I found my problem, in case anyone else has this same issue (until 4.0.1 which may have this fixed):
 
The ClassObjectFilter's accept method works like this:

    public boolean accept(Object object) {
        return object.getClass().isAssignableFrom( this.clazz );
    }

which is opposite of what I expected.  I want to find all the objects in working memory that implement a particular interface.  So I created my own ObjectFilter that works like you'd expect:

    public boolean accept(Object object) {
        return this.clazz.isAssignableFrom(object.getClass());
    }

Hope it helps someone,
Michael

 
On 8/16/07, Michael Waluk <mwaluk@gmail.com> wrote:
The log file also shows that the BenefitsProgramEvent was inserted properly.  So why wouldn't it appear in the working memory?  Do I need to do something special or is somehow inserted in another working memory?
 
Thanks for any suggestions,
Michael
 
<object-stream>
  <list>
    <org.drools.audit.event.ActivationLogEvent>
      <activationId>RecognizeBenefitsProgramEvent [1]</activationId>
      <rule>RecognizeBenefitsProgramEvent</rule>
      <declarations>$edit=com.workscape.oba.model.editor.benefits.BenefitsProgramModelEdit@12d91d5(1)</declarations>
      <type>6</type>
    </org.drools.audit.event.ActivationLogEvent>
    <org.drools.audit.event.ObjectLogEvent>
      <factId>84</factId>
      <objectToString>com.workscape.oba.model.events.BenefitsProgramEvent@9b6713[]</objectToString>
      <type>1</type>
    </org.drools.audit.event.ObjectLogEvent>
    <org.drools.audit.event.ActivationLogEvent>
      <activationId>RecognizeBenefitsProgramEvent [1]</activationId>
      <rule>RecognizeBenefitsProgramEvent</rule>
      <declarations>$edit=com.workscape.oba.model.editor.benefits.BenefitsProgramModelEdit@12d91d5(1)</declarations>
      <type>7</type>
    </org.drools.audit.event.ActivationLogEvent>
  </list>
</object-stream>
 


 
On 8/15/07, Michael Waluk <mwaluk@gmail.com> wrote:
I just upgraded to Drools 4.0 and changed my assertObject calls to insert.  I also switched from WorkingMemory to StatefulSession.  The rules seem to be fine, but I am not able to retrieve any inserted objects from the working memory for some reason.  Here is what I'm doing.  I'd appreciate any suggestions...

StatefulSession workingMemory = getActiveWorkingMemories(id);
workingMemory.fireAllRules();

// Here is the rule that fires:

rule

"RecognizeBenefitsProgramEvent" 
  when $edit: BenefitsProgramModelEdit() 
  then 
    insert (new BenefitsProgramEvent("BenefitsProgramEvent", $edit.getValidFrom(), "AnnualEnrollmentEvent")); 
    System.out.println(
"Rule RecognizeBenefitsProgramEvent fired " );
end

I see the print statement in the console but the inserted object is not actually in the working memory.  I look using this: 

Iterator events = workingMemory.iterateObjects(new ClassObjectFilter(BenefitsProgramEvent.class));

This iterator is empty.  I also debug and look at the assetMap inside workingMemory and it never changes.

Thanks,

Michael