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

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Wed Nov 7 20:41:09 EST 2007


Author: mark.proctor at jboss.com
Date: 2007-11-07 20:41:09 -0500 (Wed, 07 Nov 2007)
New Revision: 16418

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/AbstractWorkingMemory.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/InternalWorkingMemory.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/event/RuleBaseEventSupport.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ReteooStatefulSession.java
Log:
JBRULES-1316 Serialising Both the RuleBase and WorkingMemory throws null pointer

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-11-08 01:40:59 UTC (rev 16417)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AbstractRuleBase.java	2007-11-08 01:41:09 UTC (rev 16418)
@@ -40,8 +40,11 @@
 import org.drools.RuleBaseConfiguration;
 import org.drools.RuleIntegrationException;
 import org.drools.StatefulSession;
+import org.drools.concurrent.CommandExecutor;
+import org.drools.concurrent.ExecutorService;
 import org.drools.event.RuleBaseEventListener;
 import org.drools.event.RuleBaseEventSupport;
+import org.drools.reteoo.ReteooStatefulSession;
 import org.drools.rule.CompositePackageClassLoader;
 import org.drools.rule.InvalidPatternException;
 import org.drools.rule.MapBackedClassLoader;
@@ -49,6 +52,7 @@
 import org.drools.rule.PackageCompilationData;
 import org.drools.rule.Rule;
 import org.drools.ruleflow.common.core.Process;
+import org.drools.spi.ExecutorServiceFactory;
 import org.drools.spi.FactHandleFactory;
 import org.drools.util.ObjectHashSet;
 import org.drools.util.concurrent.locks.ReentrantLock;
@@ -164,7 +168,7 @@
      * 
      */
     public void doWriteExternal(final ObjectOutput stream,
-                                final Object[] objects) throws IOException {
+                                final Object[] objects) throws IOException {        
         stream.writeObject( this.pkgs );
 
         // Rules must be restored by an ObjectInputStream that can resolve using a given ClassLoader to handle seaprately by storing as
@@ -177,12 +181,14 @@
         out.writeObject( this.factHandleFactory );
         out.writeObject( this.globals );
         out.writeObject( this.config );
+        
+        this.eventSupport.removeEventListener( RuleBaseEventListener.class );
         out.writeObject( this.eventSupport );
-
+        
         for ( int i = 0, length = objects.length; i < length; i++ ) {
             out.writeObject( objects[i] );
-        }
-
+        }        
+        
         stream.writeObject( bos.toByteArray() );
     }
 
@@ -703,11 +709,24 @@
         final DroolsObjectInputStream streamWithLoader = new DroolsObjectInputStream( stream,
                                                                                       this.packageClassLoader );
 
-        final AbstractWorkingMemory workingMemory = (AbstractWorkingMemory) streamWithLoader.readObject();
+        final StatefulSession session = (StatefulSession) streamWithLoader.readObject();
 
         synchronized ( this.pkgs ) {
-            workingMemory.setRuleBase( this );
-            return (StatefulSession) workingMemory;
+            ((InternalWorkingMemory) session).setRuleBase( this );
+            ((InternalWorkingMemory) session).setId( ( nextWorkingMemoryCounter() ) );
+            
+            ExecutorService executor = ExecutorServiceFactory.createExecutorService(  this.config.getExecutorService() );;
+
+            executor.setCommandExecutor( new CommandExecutor( session ) );
+
+            if ( keepReference ) {
+                addStatefulSession( session );
+                for( Iterator it = session.getRuleBaseUpdateListeners().iterator(); it.hasNext(); ) {
+                    addEventListener( (RuleBaseEventListener) it.next() ); 
+                }
+            }     
+            
+            return (StatefulSession) session;
         }
     }
 

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-11-08 01:40:59 UTC (rev 16417)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AbstractWorkingMemory.java	2007-11-08 01:41:09 UTC (rev 16418)
@@ -93,7 +93,7 @@
     // ------------------------------------------------------------
     // Instance members
     // ------------------------------------------------------------
-    protected final long                            id;
+    protected long                                  id;
 
     /** The arguments used when adding/removing a property change listener. */
     protected final Object[]                        addRemovePropertyChangeListenerArgs           = new Object[]{this};
@@ -204,7 +204,7 @@
     // Instance methods
     // ------------------------------------------------------------
 
-    void setRuleBase(final InternalRuleBase ruleBase) {
+    public void setRuleBase(final InternalRuleBase ruleBase) {
         this.ruleBase = ruleBase;
     }
 
@@ -385,6 +385,10 @@
     public long getId() {
         return this.id;
     }
+    
+    public void setId(long id) {
+        this.id = id;
+    }
 
     public Object getGlobal(final String identifier) {
         try {

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/InternalWorkingMemory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/InternalWorkingMemory.java	2007-11-08 01:40:59 UTC (rev 16417)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/InternalWorkingMemory.java	2007-11-08 01:41:09 UTC (rev 16418)
@@ -19,6 +19,10 @@
     extends
     WorkingMemory {
     public long getId();
+    
+    public void setId(long id);
+    
+    void setRuleBase(final InternalRuleBase ruleBase);
 
     public void setWorkingMemoryEventSupport(WorkingMemoryEventSupport workingMemoryEventSupport);
 

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/event/RuleBaseEventSupport.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/event/RuleBaseEventSupport.java	2007-11-08 01:40:59 UTC (rev 16417)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/event/RuleBaseEventSupport.java	2007-11-08 01:41:09 UTC (rev 16418)
@@ -18,12 +18,15 @@
 import java.io.Serializable;
 import java.util.ArrayList;
 import java.util.Collections;
+import java.util.EventListener;
 import java.util.List;
 
 import org.drools.RuleBase;
 import org.drools.rule.Rule;
 import org.drools.rule.Package;
 
+import java.util.Iterator;
+
 /**
  * 
  * @author etirelli
@@ -35,7 +38,7 @@
      * 
      */
     private static final long serialVersionUID = 400L;
-    private final List        listeners        = Collections.synchronizedList( new ArrayList() );
+    private final List<EventListener>        listeners        = Collections.synchronizedList( new ArrayList<EventListener>() );
     private transient RuleBase    ruleBase;
 
     public RuleBaseEventSupport(final RuleBase ruleBase) {
@@ -51,12 +54,21 @@
     public void setRuleBase(RuleBase ruleBase) {
         this.ruleBase = ruleBase;
     }
+    
+    public void removeEventListener(Class cls) {
+        for ( Iterator<EventListener> it = this.listeners.iterator(); it.hasNext(); ) {
+            EventListener listener = it.next();
+            if ( cls.isAssignableFrom( listener.getClass() ) ) {
+                it.remove();
+            }
+        }        
+    }
 
     public void removeEventListener(final RuleBaseEventListener listener) {
         this.listeners.remove( listener );
     }
 
-    public List getEventListeners() {
+    public List<EventListener> getEventListeners() {
         return Collections.unmodifiableList( this.listeners );
     }
 

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ReteooStatefulSession.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ReteooStatefulSession.java	2007-11-08 01:40:59 UTC (rev 16417)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ReteooStatefulSession.java	2007-11-08 01:41:09 UTC (rev 16418)
@@ -23,7 +23,7 @@
     StatefulSession {
 
     private static final long serialVersionUID = -5360554247241558374L;
-    private ExecutorService executor;
+    private transient ExecutorService executor;
     
     private transient List                          ruleBaseListeners;
 




More information about the jboss-svn-commits mailing list