[jboss-svn-commits] JBL Code SVN: r16419 - in labs/jbossrules/branches/4.0.x/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:53:29 EST 2007
Author: mark.proctor at jboss.com
Date: 2007-11-07 20:53:29 -0500 (Wed, 07 Nov 2007)
New Revision: 16419
Modified:
labs/jbossrules/branches/4.0.x/drools-core/src/main/java/org/drools/common/AbstractRuleBase.java
labs/jbossrules/branches/4.0.x/drools-core/src/main/java/org/drools/common/AbstractWorkingMemory.java
labs/jbossrules/branches/4.0.x/drools-core/src/main/java/org/drools/common/InternalWorkingMemory.java
labs/jbossrules/branches/4.0.x/drools-core/src/main/java/org/drools/event/RuleBaseEventSupport.java
labs/jbossrules/branches/4.0.x/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/branches/4.0.x/drools-core/src/main/java/org/drools/common/AbstractRuleBase.java
===================================================================
--- labs/jbossrules/branches/4.0.x/drools-core/src/main/java/org/drools/common/AbstractRuleBase.java 2007-11-08 01:41:09 UTC (rev 16418)
+++ labs/jbossrules/branches/4.0.x/drools-core/src/main/java/org/drools/common/AbstractRuleBase.java 2007-11-08 01:53:29 UTC (rev 16419)
@@ -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/branches/4.0.x/drools-core/src/main/java/org/drools/common/AbstractWorkingMemory.java
===================================================================
--- labs/jbossrules/branches/4.0.x/drools-core/src/main/java/org/drools/common/AbstractWorkingMemory.java 2007-11-08 01:41:09 UTC (rev 16418)
+++ labs/jbossrules/branches/4.0.x/drools-core/src/main/java/org/drools/common/AbstractWorkingMemory.java 2007-11-08 01:53:29 UTC (rev 16419)
@@ -92,7 +92,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};
@@ -201,7 +201,7 @@
// Instance methods
// ------------------------------------------------------------
- void setRuleBase(final InternalRuleBase ruleBase) {
+ public void setRuleBase(final InternalRuleBase ruleBase) {
this.ruleBase = ruleBase;
}
@@ -382,6 +382,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/branches/4.0.x/drools-core/src/main/java/org/drools/common/InternalWorkingMemory.java
===================================================================
--- labs/jbossrules/branches/4.0.x/drools-core/src/main/java/org/drools/common/InternalWorkingMemory.java 2007-11-08 01:41:09 UTC (rev 16418)
+++ labs/jbossrules/branches/4.0.x/drools-core/src/main/java/org/drools/common/InternalWorkingMemory.java 2007-11-08 01:53:29 UTC (rev 16419)
@@ -16,9 +16,13 @@
public interface InternalWorkingMemory
extends
- WorkingMemory {
- public long getId();
+ WorkingMemory {
+ public long getId();
+ public void setId(long id);
+
+ void setRuleBase(final InternalRuleBase ruleBase);
+
public void setWorkingMemoryEventSupport(WorkingMemoryEventSupport workingMemoryEventSupport);
public ObjectHashMap getAssertMap();
Modified: labs/jbossrules/branches/4.0.x/drools-core/src/main/java/org/drools/event/RuleBaseEventSupport.java
===================================================================
--- labs/jbossrules/branches/4.0.x/drools-core/src/main/java/org/drools/event/RuleBaseEventSupport.java 2007-11-08 01:41:09 UTC (rev 16418)
+++ labs/jbossrules/branches/4.0.x/drools-core/src/main/java/org/drools/event/RuleBaseEventSupport.java 2007-11-08 01:53:29 UTC (rev 16419)
@@ -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/branches/4.0.x/drools-core/src/main/java/org/drools/reteoo/ReteooStatefulSession.java
===================================================================
--- labs/jbossrules/branches/4.0.x/drools-core/src/main/java/org/drools/reteoo/ReteooStatefulSession.java 2007-11-08 01:41:09 UTC (rev 16418)
+++ labs/jbossrules/branches/4.0.x/drools-core/src/main/java/org/drools/reteoo/ReteooStatefulSession.java 2007-11-08 01:53:29 UTC (rev 16419)
@@ -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