[jboss-svn-commits] JBL Code SVN: r15056 - in labs/jbossrules/trunk/drools-core/src/main/java/org/drools: audit and 2 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Wed Sep 12 12:26:15 EDT 2007


Author: tirelli
Date: 2007-09-12 12:26:15 -0400 (Wed, 12 Sep 2007)
New Revision: 15056

Modified:
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/EventManager.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/RuleBase.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/WorkingMemory.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/audit/WorkingMemoryFileLogger.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AbstractRuleBase.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AbstractWorkingMemory.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ReteooRuleBase.java
Log:
JBRULES-1185: adding support to RuleBase events. Unit test added

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/EventManager.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/EventManager.java	2007-09-12 16:25:00 UTC (rev 15055)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/EventManager.java	2007-09-12 16:26:15 UTC (rev 15056)
@@ -20,11 +20,8 @@
 import java.util.List;
 
 import org.drools.event.AgendaEventListener;
-import org.drools.event.AgendaEventSupport;
 import org.drools.event.RuleFlowEventListener;
-import org.drools.event.RuleFlowEventSupport;
 import org.drools.event.WorkingMemoryEventListener;
-import org.drools.event.WorkingMemoryEventSupport;
 
 /**
  * The EventManager class is implemented by classes wishing to add,remove and get the various Drools EventListeners.

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/RuleBase.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/RuleBase.java	2007-09-12 16:25:00 UTC (rev 15055)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/RuleBase.java	2007-09-12 16:26:15 UTC (rev 15056)
@@ -21,7 +21,6 @@
 import java.io.Serializable;
 
 import org.drools.rule.Package;
-import org.drools.ruleflow.common.core.Process;
 
 /**
  * Active collection of <code>Rule</code>s.
@@ -36,7 +35,8 @@
  */
 public interface RuleBase
     extends
-    Serializable {
+    Serializable,
+    RuleBaseEventManager {
 
     public static final int RETEOO = 1;
 

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/WorkingMemory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/WorkingMemory.java	2007-09-12 16:25:00 UTC (rev 15055)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/WorkingMemory.java	2007-09-12 16:26:15 UTC (rev 15056)
@@ -16,17 +16,9 @@
  * limitations under the License.
  */
 
-import java.io.Serializable;
 import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
 
-import org.drools.event.AgendaEventListener;
-import org.drools.event.RuleFlowEventListener;
-import org.drools.event.WorkingMemoryEventListener;
-import org.drools.rule.Rule;
 import org.drools.ruleflow.common.instance.ProcessInstance;
-import org.drools.spi.Activation;
 import org.drools.spi.AgendaFilter;
 import org.drools.spi.AgendaGroup;
 import org.drools.spi.AsyncExceptionHandler;

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/audit/WorkingMemoryFileLogger.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/audit/WorkingMemoryFileLogger.java	2007-09-12 16:25:00 UTC (rev 15055)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/audit/WorkingMemoryFileLogger.java	2007-09-12 16:26:15 UTC (rev 15056)
@@ -23,8 +23,8 @@
 import java.util.List;
 
 import org.drools.EventManager;
-import org.drools.WorkingMemory;
 import org.drools.audit.event.LogEvent;
+
 import com.thoughtworks.xstream.XStream;
 
 /**

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AbstractRuleBase.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AbstractRuleBase.java	2007-09-12 16:25:00 UTC (rev 15055)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AbstractRuleBase.java	2007-09-12 16:26:15 UTC (rev 15056)
@@ -25,7 +25,6 @@
 import java.io.ObjectOutput;
 import java.io.ObjectOutputStream;
 import java.io.Serializable;
-import java.util.ArrayList;
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.HashSet;
@@ -41,6 +40,8 @@
 import org.drools.RuleBaseConfiguration;
 import org.drools.RuleIntegrationException;
 import org.drools.StatefulSession;
+import org.drools.event.RuleBaseEventListener;
+import org.drools.event.RuleBaseEventSupport;
 import org.drools.rule.CompositePackageClassLoader;
 import org.drools.rule.InvalidPatternException;
 import org.drools.rule.MapBackedClassLoader;
@@ -88,6 +89,8 @@
     protected Map                                   globals;
     
     private ReloadPackageCompilationData reloadPackageCompilationData = null;
+    
+    private RuleBaseEventSupport                    eventSupport = new RuleBaseEventSupport();
 
     /**
      * WeakHashMap to keep references of WorkingMemories but allow them to be
@@ -160,6 +163,7 @@
         out.writeObject( this.factHandleFactory );
         out.writeObject( this.globals );
         out.writeObject( this.config );
+        out.writeObject( this.eventSupport );
 
         for ( int i = 0, length = objects.length; i < length; i++ ) {
             out.writeObject( objects[i] );
@@ -210,6 +214,7 @@
         this.globals = (Map) childStream.readObject();
 
         this.config = (RuleBaseConfiguration) childStream.readObject();
+        this.eventSupport = (RuleBaseEventSupport) childStream.readObject();
 
         this.statefulSessions = new ObjectHashSet();
 
@@ -306,6 +311,8 @@
                     wms[lastAquiredLock].getLock().lock();
                 }
 
+                this.eventSupport.fireBeforePackageAdded( newPkg );
+                
                 if ( pkg != null ) {
                     mergePackage( pkg,
                                   newPkg );
@@ -334,7 +341,7 @@
                 final Rule[] rules = newPkg.getRules();
 
                 for ( int i = 0; i < rules.length; ++i ) {
-                    addRule( rules[i] );
+                    addRule( newPkg, rules[i] );
                 }
 
                 //and now the rule flows
@@ -349,6 +356,8 @@
 
                 this.packageClassLoader.addClassLoader( newPkg.getPackageCompilationData().getClassLoader() );
 
+                this.eventSupport.fireAfterPackageAdded( newPkg );
+
             } finally {
                 // Iterate each workingMemory and attempt to fire any rules, that were activated as a result 
                 // of the new rule addition. Unlock after fireAllRules();
@@ -427,13 +436,18 @@
             }
         }
     }
-
-    protected synchronized void addRule(final Rule rule) throws InvalidPatternException {
+    
+    private synchronized void addRule( final Package pkg, final Rule rule ) throws InvalidPatternException {
+        this.eventSupport.fireBeforeRuleAdded( pkg, rule );
         if ( !rule.isValid() ) {
             throw new IllegalArgumentException( "The rule called " + rule.getName() + " is not valid. Check for compile errors reported." );
         }
+        addRule( rule );
+        this.eventSupport.fireAfterRuleAdded( pkg, rule );
     }
 
+    protected abstract void addRule(final Rule rule) throws InvalidPatternException;
+
     public synchronized void removePackage(final String packageName) {
         synchronized ( this.pkgs ) {
             final Package pkg = (Package) this.pkgs.get( packageName );
@@ -453,11 +467,13 @@
                 for ( lastAquiredLock = 0; lastAquiredLock < wms.length; lastAquiredLock++ ) {
                     wms[lastAquiredLock].getLock().lock();
                 }
+                
+                this.eventSupport.fireBeforePackageRemoved( pkg );
 
                 final Rule[] rules = pkg.getRules();
 
                 for ( int i = 0; i < rules.length; ++i ) {
-                    removeRule( rules[i] );
+                    removeRule( pkg, rules[i] );
                 }
 
                 this.packageClassLoader.removeClassLoader( pkg.getPackageCompilationData().getClassLoader() );
@@ -486,6 +502,9 @@
                 }
                 // removing the package itself from the list
                 this.pkgs.remove( pkg.getName() );
+                
+                this.eventSupport.fireAfterPackageRemoved( pkg );
+                
             } finally {
                 // Iterate each workingMemory and attempt to fire any rules, that were activated as a result 
                 // of the new rule addition. Unlock after fireAllRules();
@@ -527,7 +546,7 @@
                     wms[lastAquiredLock].getLock().lock();
                 }
 
-                removeRule( rule );
+                removeRule( pkg, rule );
                 compilationData = pkg.removeRule( rule );
                 if ( this.reloadPackageCompilationData == null ) {
                     this.reloadPackageCompilationData = new ReloadPackageCompilationData();
@@ -545,6 +564,12 @@
             }                       
         }
     }
+    
+    private void removeRule( final Package pkg, final Rule rule ) {
+        this.eventSupport.fireBeforeRuleRemoved( pkg, rule );
+        removeRule( rule );
+        this.eventSupport.fireAfterRuleRemoved( pkg, rule );
+    }
 
     protected abstract void removeRule(Rule rule);
     
@@ -656,7 +681,23 @@
         }
     }    
     
+    public void addEventListener(final RuleBaseEventListener listener) {
+        // since the event support is thread-safe, no need for locks... right?
+        this.eventSupport.addEventListener( listener );
+    }
+
+    public void removeEventListener(final RuleBaseEventListener listener) {
+        // since the event support is thread-safe, no need for locks... right?
+        this.eventSupport.removeEventListener( listener );
+    }
+
+    public List getRuleBaseEventListeners() {
+        // since the event support is thread-safe, no need for locks... right?
+        return this.eventSupport.getEventListeners();
+    }
+    
     public static class ReloadPackageCompilationData implements RuleBaseAction {
+        private static final long serialVersionUID = 1L;
         private Set set;
         
         public void addPackageCompilationData(PackageCompilationData packageCompilationData) {

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AbstractWorkingMemory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AbstractWorkingMemory.java	2007-09-12 16:25:00 UTC (rev 15055)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AbstractWorkingMemory.java	2007-09-12 16:26:15 UTC (rev 15056)
@@ -41,7 +41,6 @@
 import org.drools.WorkingMemory;
 import org.drools.RuleBaseConfiguration.AssertBehaviour;
 import org.drools.RuleBaseConfiguration.LogicalOverride;
-import org.drools.base.DroolsQuery;
 import org.drools.base.MapGlobalResolver;
 import org.drools.base.ShadowProxy;
 import org.drools.event.AgendaEventListener;

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ReteooRuleBase.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ReteooRuleBase.java	2007-09-12 16:25:00 UTC (rev 15055)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ReteooRuleBase.java	2007-09-12 16:26:15 UTC (rev 15056)
@@ -262,8 +262,6 @@
     }
 
     protected synchronized void addRule(final Rule rule) throws InvalidPatternException {
-        super.addRule( rule );
-
         // This adds the rule. ReteBuilder has a reference to the WorkingMemories and will propagate any existing facts.
         this.reteooBuilder.addRule( rule );
     }




More information about the jboss-svn-commits mailing list