}
public void execute(InternalWorkingMemory workingMemory) {
if ( this.factHandle.isValid() ) {
// if the fact is still in the working memory (since it may have been previously retracted already
final PropagationContext context = new PropagationContextImpl( workingMemory.getNextPropagationIdCounter(),
PropagationContext.EXPIRATION,
null,
null,
this.factHandle );
((EventFactHandle) factHandle).setExpired( true );
this.node.retractObject( factHandle,
context,
workingMemory );
context.evaluateActionQueue( workingMemory );
// if no activations for this expired event
if ( ((EventFactHandle) factHandle).getActivationsCount() == 0 ) {
// remove it from the object store and clean up resources
((EventFactHandle) factHandle).getEntryPoint().retract( factHandle );
}
context.evaluateActionQueue( workingMemory );
}
}