Uploaded image for project: 'JBRULES'
  1. JBRULES
  2. JBRULES-3256

PropertyChangeListener of dynamic facts is not cleaned up on session.dispose()

This issue belongs to an archived project. You can view it, but you can't modify it. Learn more

XMLWordPrintable

    • Workaround Exists
    • Hide

      Retracting facts will remove the propertyChangeListener.

        Collection<FactHandle> factHandles = session.getFactHandles();
        for (Iterator<FactHandle> iterator = factHandles.iterator(); iterator.hasNext();) {
          FactHandle handle = iterator.next();
          session.retract(handle);
        }
      
        session.dispose();
      
      Show
      Retracting facts will remove the propertyChangeListener. Collection<FactHandle> factHandles = session.getFactHandles(); for (Iterator<FactHandle> iterator = factHandles.iterator(); iterator.hasNext();) { FactHandle handle = iterator.next(); session.retract(handle); } session.dispose();

      PropertyChangeListener of dynamic facts is not cleaned up on session.dispose() and the remaining listener may cause some issues later on (unexpected firePropertyChange() and memory leak etc.).
      You can reproduce this with attached drl and java client.

      The output would be like:

      == Listeners attached before rules ==
      == Listeners attached before rules ==
      Print name of person: Test 2
      Print name of person: Test 1
      Session disposed
      == Listeners attached after rules ==
      Listener attached of type: org.drools.common.NamedEntryPoint@7d15d06c
      Listener attached of type: org.drools.common.NamedEntryPoint@7d15d06c
      == Listeners attached after rules ==
      

              etirelli@redhat.com Edson Tirelli
              rhn-support-tkobayas Toshiya Kobayashi
              Archiver:
              rhn-support-ceverson Clark Everson

                Created:
                Updated:
                Resolved:
                Archived: