[jboss-svn-commits] JBL Code SVN: r21587 - in labs/jbossrules/trunk: drools-core/src/main/java/org/drools and 5 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Sun Aug 17 22:22:01 EDT 2008
Author: mark.proctor at jboss.com
Date: 2008-08-17 22:22:01 -0400 (Sun, 17 Aug 2008)
New Revision: 21587
Modified:
labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/ExecutionFlowControlTest.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/Agenda.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AbstractFactHandleFactory.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/AgendaGroupFactory.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/ArrayAgendaGroup.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/ArrayAgendaGroupFactory.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/ConcurrentNodeMemories.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/DefaultAgenda.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/NodeMemories.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/ObjectStore.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/PriorityQueueAgendaGroupFactory.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/RuleFlowGroupImpl.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/SingleThreadedObjectStore.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/TruthMaintenanceSystem.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/DefaultMarshaller.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/InputMarshaller.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/FactHandleFactory.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/RuleFlowGroup.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/ArrayIterator.java
labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/AgendaTest.java
Log:
JBRULES-1737 Support WorkingMemory clearing without firing events
-differentiates between clear and clearAndCancel
-marshallers now can read into an existing session.
Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/ExecutionFlowControlTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/ExecutionFlowControlTest.java 2008-08-17 08:06:35 UTC (rev 21586)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/ExecutionFlowControlTest.java 2008-08-18 02:22:01 UTC (rev 21587)
@@ -745,7 +745,7 @@
// Check we have 0 activation cancellation events
assertEquals( 0, activations.size() );
- workingMemory.getAgenda().clearRuleFlowGroup( "flowgroup-1" );
+ workingMemory.getAgenda().clearAndCancelRuleFlowGroup( "flowgroup-1" );
// Check the AgendaGroup and RuleFlowGroup are now empty
assertEquals( 0, agenda.getAgendaGroup( "MAIN" ).size() );
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/Agenda.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/Agenda.java 2008-08-17 08:06:35 UTC (rev 21586)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/Agenda.java 2008-08-18 02:22:01 UTC (rev 21587)
@@ -98,7 +98,7 @@
* Clears all Activations from the Agenda
*
*/
- public void clearAgenda();
+ public void clearAndCancel();
/**
* Clears all Activations from an Agenda Group. Any Activations that are also in an Xor Group are removed the
@@ -106,7 +106,7 @@
*
* @param agendaGroup
*/
- public void clearAgendaGroup(String name);
+ public void clearAndCancelAgendaGroup(String name);
/**
* Clears all Activations from an Agenda Group. Any Activations that are also in an Xor Group are removed the
@@ -114,7 +114,7 @@
*
* @param agendaGroup
*/
- public void clearAgendaGroup(AgendaGroup agendaGroup);
+ public void clearAndCancelAgendaGroup(AgendaGroup agendaGroup);
/**
* Clears all Activations from an Activation-Group. Any Activations that are also in an Agenda Group are removed
@@ -122,7 +122,7 @@
*
* @param activationGroup
*/
- public void clearActivationGroup(String name);
+ public void clearAndCancelActivationGroup(String name);
/**
* Clears all Activations from an Activation Group. Any Activations that are also in an Agenda Group are removed
@@ -130,11 +130,11 @@
*
* @param activationGroup
*/
- public void clearActivationGroup(ActivationGroup activationGroup);
+ public void clearAndCancelActivationGroup(ActivationGroup activationGroup);
- public void clearRuleFlowGroup(final String name);
+ public void clearAndCancelRuleFlowGroup(final String name);
- public void clearRuleFlowGroup(final RuleFlowGroup ruleFlowGroup);
+ public void clearAndCancelAndCancel(final RuleFlowGroup ruleFlowGroup);
/**
* Returns the name of the agenda group that currently
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AbstractFactHandleFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AbstractFactHandleFactory.java 2008-08-17 08:06:35 UTC (rev 21586)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AbstractFactHandleFactory.java 2008-08-18 02:22:01 UTC (rev 21587)
@@ -124,4 +124,9 @@
public long getRecency() {
return this.counter.get();
}
+
+ public void clear(int id, long counter) {
+ this.id = new AtomicInteger( id );
+ this.counter = new AtomicLong( counter );
+ }
}
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 2008-08-17 08:06:35 UTC (rev 21586)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AbstractWorkingMemory.java 2008-08-18 02:22:01 UTC (rev 21587)
@@ -295,7 +295,24 @@
this.entryPointNode = this.ruleBase.getRete().getEntryPointNode( this.entryPoint );
this.typeConfReg = new ObjectTypeConfigurationRegistry( this.ruleBase );
}
+
+ public void reset(int handleId, long handleCounter, long propagationCounter) {
+ this.nodeMemories.clear();
+ this.agenda.clear();
+ this.objectStore.clear();
+ this.handleFactory.clear(handleId, handleCounter);
+ this.tms.clear();
+ this.liaPropagations.clear();
+ this.actionQueue.clear();
+
+ this.propagationIdCounter = new AtomicLong( propagationCounter );
+ // TODO should these be cleared?
+ // we probably neeed to do CEP and Flow timers too
+ // this.processInstanceManager.clear()
+ // this.workItemManager.clear();
+ }
+
public void setWorkingMemoryEventSupport(WorkingMemoryEventSupport workingMemoryEventSupport) {
this.workingMemoryEventSupport = workingMemoryEventSupport;
}
@@ -434,19 +451,19 @@
}
public void clearAgenda() {
- this.agenda.clearAgenda();
+ this.agenda.clearAndCancel();
}
public void clearAgendaGroup(final String group) {
- this.agenda.clearAgendaGroup( group );
+ this.agenda.clearAndCancelAgendaGroup( group );
}
public void clearActivationGroup(final String group) {
- this.agenda.clearActivationGroup( group );
+ this.agenda.clearAndCancelActivationGroup( group );
}
public void clearRuleFlowGroup(final String group) {
- this.agenda.clearRuleFlowGroup( group );
+ this.agenda.clearAndCancelRuleFlowGroup( group );
}
public RuleBase getRuleBase() {
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AgendaGroupFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AgendaGroupFactory.java 2008-08-17 08:06:35 UTC (rev 21586)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AgendaGroupFactory.java 2008-08-18 02:22:01 UTC (rev 21587)
@@ -1,7 +1,6 @@
package org.drools.common;
-import org.drools.spi.AgendaGroup;
public interface AgendaGroupFactory {
- AgendaGroup createAgendaGroup(String name, InternalRuleBase ruleBase);
+ InternalAgendaGroup createAgendaGroup(String name, InternalRuleBase ruleBase);
}
\ No newline at end of file
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/ArrayAgendaGroup.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/ArrayAgendaGroup.java 2008-08-17 08:06:35 UTC (rev 21586)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/ArrayAgendaGroup.java 2008-08-18 02:22:01 UTC (rev 21587)
@@ -87,6 +87,7 @@
this.index = this.array.length-1;
this.lastIndex = 0;
}
+
public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
name = (String)in.readObject();
@@ -114,7 +115,8 @@
}
public void clear() {
- this.array = new LinkedList[this.array.length];
+ this.lastIndex = 0;
+ this.array = new LinkedList[ this.array.length ];
}
/* (non-Javadoc)
@@ -206,7 +208,7 @@
public String toString() {
return "AgendaGroup '" + this.name + "'";
- }
+ }
public boolean equal(final Object object) {
if ( (object == null) || !(object instanceof ArrayAgendaGroup) ) {
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/ArrayAgendaGroupFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/ArrayAgendaGroupFactory.java 2008-08-17 08:06:35 UTC (rev 21586)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/ArrayAgendaGroupFactory.java 2008-08-18 02:22:01 UTC (rev 21587)
@@ -1,6 +1,5 @@
package org.drools.common;
-import org.drools.spi.AgendaGroup;
public class ArrayAgendaGroupFactory implements AgendaGroupFactory {
private static final AgendaGroupFactory INSTANCE = new ArrayAgendaGroupFactory();
@@ -9,7 +8,7 @@
return INSTANCE;
}
- public AgendaGroup createAgendaGroup(String name, InternalRuleBase ruleBase) {
+ public InternalAgendaGroup createAgendaGroup(String name, InternalRuleBase ruleBase) {
return new ArrayAgendaGroup( name,
ruleBase );
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/ConcurrentNodeMemories.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/ConcurrentNodeMemories.java 2008-08-17 08:06:35 UTC (rev 21586)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/ConcurrentNodeMemories.java 2008-08-18 02:22:01 UTC (rev 21587)
@@ -32,15 +32,12 @@
*/
public class ConcurrentNodeMemories implements NodeMemories {
- private static final long serialVersionUID = -2032997426288974117L;
+ private static final long serialVersionUID = -2032997426288974117L;
private AtomicReferenceArray<Object> memories;
- private transient Lock lock;
- private InternalRuleBase rulebase;
- // required by the Externalizable framework
- public ConcurrentNodeMemories() {
- }
+ private Lock lock;
+ private InternalRuleBase rulebase;
public ConcurrentNodeMemories( InternalRuleBase rulebase ) {
this.rulebase = rulebase;
@@ -49,32 +46,17 @@
}
/**
- * @param in
- * @throws IOException
- * @throws ClassNotFoundException
- */
- public void readExternal( ObjectInput in ) throws IOException, ClassNotFoundException {
- rulebase = (InternalRuleBase) in.readObject();
- memories = (AtomicReferenceArray<Object>) in.readObject();
- this.lock = new ReentrantLock();
- }
-
- /**
- * @param out
- * @throws IOException
- */
- public void writeExternal( ObjectOutput out ) throws IOException {
- out.writeObject( rulebase );
- out.writeObject( memories );
- }
-
- /**
* @inheritDoc
* @see org.drools.common.NodeMemories#clearNodeMemory(org.drools.common.NodeMemory)
*/
public void clearNodeMemory( NodeMemory node ) {
- this.memories.set( node.getId(), null );
+ this.memories.set( node.getId(),
+ null );
}
+
+ public void clear() {
+ this.memories = new AtomicReferenceArray<Object>( this.rulebase.getNodeCount() );
+ }
/**
* @inheritDoc
@@ -123,8 +105,9 @@
if( node.getId() >= this.memories.length() ) {
int size = Math.max( this.rulebase.getNodeCount(), node.getId() + 1 );
AtomicReferenceArray<Object> newMem = new AtomicReferenceArray<Object>( size );
- for( int i = 0; i < this.memories.length(); i++ ) {
- newMem.set( i, this.memories.get( i ) );
+ for ( int i = 0; i < this.memories.length(); i++ ) {
+ newMem.set( i,
+ this.memories.get( i ) );
}
this.memories = newMem;
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/DefaultAgenda.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/DefaultAgenda.java 2008-08-17 08:06:35 UTC (rev 21586)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/DefaultAgenda.java 2008-08-18 02:22:01 UTC (rev 21587)
@@ -72,36 +72,36 @@
/**
*
*/
- private static final long serialVersionUID = 400L;
+ private static final long serialVersionUID = 400L;
/** Working memory of this Agenda. */
- private InternalWorkingMemory workingMemory;
+ private InternalWorkingMemory workingMemory;
- private org.drools.util.LinkedList scheduledActivations;
+ private org.drools.util.LinkedList scheduledActivations;
/** Items time-delayed. */
- private Map<String, AgendaGroup> agendaGroups;
+ private Map<String, InternalAgendaGroup> agendaGroups;
- private Map<String, ActivationGroup> activationGroups;
+ private Map<String, ActivationGroup> activationGroups;
- private Map<String, RuleFlowGroup> ruleFlowGroups;
+ private Map<String, RuleFlowGroup> ruleFlowGroups;
- private LinkedList<AgendaGroup> focusStack;
+ private LinkedList<AgendaGroup> focusStack;
- private AgendaGroup currentModule;
+ private InternalAgendaGroup currentModule;
- private AgendaGroup main;
+ private InternalAgendaGroup main;
- private AgendaGroupFactory agendaGroupFactory;
+ private AgendaGroupFactory agendaGroupFactory;
- private KnowledgeHelper knowledgeHelper;
+ private KnowledgeHelper knowledgeHelper;
- public int activeActivations;
+ public int activeActivations;
- public int dormantActivations;
+ public int dormantActivations;
- private ConsequenceExceptionHandler consequenceExceptionHandler;
+ private ConsequenceExceptionHandler consequenceExceptionHandler;
// ------------------------------------------------------------
// Constructors
@@ -133,7 +133,7 @@
public DefaultAgenda(InternalRuleBase rb,
boolean initMain) {
- this.agendaGroups = new HashMap<String, AgendaGroup>();
+ this.agendaGroups = new HashMap<String, InternalAgendaGroup>();
this.activationGroups = new HashMap<String, ActivationGroup>();
this.ruleFlowGroups = new HashMap<String, RuleFlowGroup>();
this.focusStack = new LinkedList<AgendaGroup>();
@@ -164,6 +164,57 @@
}
}
+ // public void write(WMSerialisationOutContext context) throws IOException {
+ // BinaryHeapQueueAgendaGroup[] agendaGroups = (BinaryHeapQueueAgendaGroup[]) this.agendaGroups.values().toArray( new AgendaGroup[this.agendaGroups.size()] );
+ // Arrays.sort( agendaGroups,
+ // AgendaGroupSorter.instance );
+ //
+ // for ( BinaryHeapQueueAgendaGroup group : agendaGroups ) {
+ // context.writeInt( PersisterEnums.AGENDA_GROUP );
+ // group.write( context );
+ // }
+ // context.writeInt( PersisterEnums.END );
+ //
+ // for ( ListIterator it = this.focusStack.listIterator( this.focusStack.size() - 1 ); it.hasPrevious(); ) {
+ // AgendaGroup group = (AgendaGroup) it.previous();
+ // context.writeInt( PersisterEnums.AGENDA_GROUP );
+ // context.writeUTF( group.getName() );
+ // }
+ // context.writeInt( PersisterEnums.END );
+ //
+ // RuleFlowGroupImpl[] ruleFlowGroups = (RuleFlowGroupImpl[]) this.ruleFlowGroups.values().toArray( new RuleFlowGroupImpl[this.ruleFlowGroups.size()] );
+ // Arrays.sort( agendaGroups,
+ // AgendaGroupSorter.instance );
+ //
+ // for ( BinaryHeapQueueAgendaGroup group : agendaGroups ) {
+ // context.writeInt( PersisterEnums.RULE_FLOW_GROUP );
+ // group.write( context );
+ // }
+ // context.writeInt( PersisterEnums.END );
+ // }
+
+ // public static class AgendaGroupSorter
+ // implements
+ // Comparator<AgendaGroup> {
+ // public static final AgendaGroupSorter instance = new AgendaGroupSorter();
+ //
+ // public int compare(AgendaGroup group1,
+ // AgendaGroup group2) {
+ // return group1.getName().compareTo( group2.getName() );
+ // }
+ // }
+ //
+ // public static class RuleFlowGroupSorter
+ // implements
+ // Comparator<AgendaGroup> {
+ // public static final AgendaGroupSorter instance = new AgendaGroupSorter();
+ //
+ // public int compare(AgendaGroup group1,
+ // AgendaGroup group2) {
+ // return group1.getName().compareTo( group2.getName() );
+ // }
+ // }
+
public void readExternal(ObjectInput in) throws IOException,
ClassNotFoundException {
workingMemory = (InternalWorkingMemory) in.readObject();
@@ -172,8 +223,8 @@
activationGroups = (Map) in.readObject();
ruleFlowGroups = (Map) in.readObject();
focusStack = (LinkedList) in.readObject();
- currentModule = (AgendaGroup) in.readObject();
- main = (AgendaGroup) in.readObject();
+ currentModule = (InternalAgendaGroup) in.readObject();
+ main = (InternalAgendaGroup) in.readObject();
agendaGroupFactory = (AgendaGroupFactory) in.readObject();
knowledgeHelper = (KnowledgeHelper) in.readObject();
activeActivations = in.readInt();
@@ -217,6 +268,7 @@
Scheduler.getInstance().scheduleAgendaItem( item,
this );
+
if ( this.scheduledActivations == null ) {
this.scheduledActivations = new org.drools.util.LinkedList();
}
@@ -355,7 +407,7 @@
public void addAgendaGroup(final AgendaGroup agendaGroup) {
this.agendaGroups.put( agendaGroup.getName(),
- agendaGroup );
+ (InternalAgendaGroup) agendaGroup );
}
/*
@@ -435,7 +487,7 @@
*
* @see org.drools.common.AgendaI#setCurrentAgendaGroup(org.drools.spi.AgendaGroup)
*/
- public void setCurrentAgendaGroup(final AgendaGroup agendaGroup) {
+ public void setCurrentAgendaGroup(final InternalAgendaGroup agendaGroup) {
this.currentModule = agendaGroup;
}
@@ -476,7 +528,7 @@
return (AgendaGroup[]) this.agendaGroups.values().toArray( new AgendaGroup[this.agendaGroups.size()] );
}
- public Map<String, AgendaGroup> getAgendaGroupsMap() {
+ public Map<String, InternalAgendaGroup> getAgendaGroupsMap() {
return this.agendaGroups;
}
@@ -593,17 +645,43 @@
public org.drools.util.LinkedList getScheduledActivationsLinkedList() {
return this.scheduledActivations;
}
+
+ public void clear() {
+ // reset focus stack
+ this.focusStack.clear();
+ this.focusStack.add( this.main );
+
+ // reset scheduled activations
+ if ( this.scheduledActivations != null && !this.scheduledActivations.isEmpty() ) {
+ for ( ScheduledAgendaItem item = (ScheduledAgendaItem) this.scheduledActivations.removeFirst(); item != null; item = (ScheduledAgendaItem) this.scheduledActivations.removeFirst() ) {
+ Scheduler.getInstance().removeAgendaItem( item );
+ }
+ }
- /*
- * (non-Javadoc)
- *
+ //reset all agenda groups
+ for ( InternalAgendaGroup group : this.agendaGroups.values() ) {
+ group.clear();
+ }
+
+ // reset all ruleflows
+ for ( RuleFlowGroup group : this.ruleFlowGroups.values() ) {
+ group.clear();
+ }
+
+ // reset all activation groups.
+ for ( ActivationGroup group : this.activationGroups.values() ) {
+ group.clear();
+ }
+ }
+
+ /** (non-Javadoc)
* @see org.drools.common.AgendaI#clearAgenda()
*/
- public void clearAgenda() {
+ public void clearAndCancel() {
// Cancel all items and fire a Cancelled event for each Activation
for ( final java.util.Iterator agendaGroupIterator = this.agendaGroups.values().iterator(); agendaGroupIterator.hasNext(); ) {
final AgendaGroup group = (AgendaGroup) agendaGroupIterator.next();
- clearAgendaGroup( group );
+ clearAndCancelAgendaGroup( group );
}
final EventSupport eventsupport = (EventSupport) this.workingMemory;
@@ -614,6 +692,17 @@
this.workingMemory );
}
}
+
+ // cancel all ruleflows
+ for ( RuleFlowGroup group : this.ruleFlowGroups.values() ) {
+ clearAndCancelAndCancel( group );
+ }
+
+ // cancel all activation groups.
+ for ( ActivationGroup group : this.activationGroups.values() ) {
+ clearAndCancelActivationGroup( group );
+ }
+
}
/*
@@ -621,10 +710,10 @@
*
* @see org.drools.common.AgendaI#clearAgendaGroup(java.lang.String)
*/
- public void clearAgendaGroup(final String name) {
+ public void clearAndCancelAgendaGroup(final String name) {
final AgendaGroup agendaGroup = (AgendaGroup) this.agendaGroups.get( name );
if ( agendaGroup != null ) {
- clearAgendaGroup( agendaGroup );
+ clearAndCancelAgendaGroup( agendaGroup );
}
}
@@ -633,7 +722,7 @@
*
* @see org.drools.common.AgendaI#clearAgendaGroup(org.drools.common.AgendaGroupImpl)
*/
- public void clearAgendaGroup(final AgendaGroup agendaGroup) {
+ public void clearAndCancelAgendaGroup(final AgendaGroup agendaGroup) {
final EventSupport eventsupport = (EventSupport) this.workingMemory;
final Activation[] queueable = ((InternalAgendaGroup) agendaGroup).getQueue();
@@ -668,10 +757,10 @@
*
* @see org.drools.common.AgendaI#clearActivationGroup(java.lang.String)
*/
- public void clearActivationGroup(final String name) {
+ public void clearAndCancelActivationGroup(final String name) {
final ActivationGroup activationGroup = (ActivationGroup) this.activationGroups.get( name );
if ( activationGroup != null ) {
- clearActivationGroup( activationGroup );
+ clearAndCancelActivationGroup( activationGroup );
}
}
@@ -680,7 +769,7 @@
*
* @see org.drools.common.AgendaI#clearActivationGroup(org.drools.spi.ActivationGroup)
*/
- public void clearActivationGroup(final ActivationGroup activationGroup) {
+ public void clearAndCancelActivationGroup(final ActivationGroup activationGroup) {
final EventSupport eventsupport = (EventSupport) this.workingMemory;
for ( final Iterator it = activationGroup.iterator(); it.hasNext(); ) {
@@ -704,14 +793,14 @@
activationGroup.clear();
}
- public void clearRuleFlowGroup(final String name) {
+ public void clearAndCancelRuleFlowGroup(final String name) {
final RuleFlowGroup ruleFlowGrlup = (RuleFlowGroup) this.ruleFlowGroups.get( name );
if ( ruleFlowGrlup != null ) {
- clearRuleFlowGroup( ruleFlowGrlup );
+ clearAndCancelAndCancel( ruleFlowGrlup );
}
}
- public void clearRuleFlowGroup(final RuleFlowGroup ruleFlowGroup) {
+ public void clearAndCancelAndCancel(final RuleFlowGroup ruleFlowGroup) {
final EventSupport eventsupport = (EventSupport) this.workingMemory;
for ( Iterator it = ruleFlowGroup.iterator(); it.hasNext(); ) {
@@ -791,7 +880,7 @@
// so lets remove the information now, before the consequence fires
final ActivationGroup activationGroup = activation.getActivationGroupNode().getActivationGroup();
activationGroup.removeActivation( activation );
- clearActivationGroup( activationGroup );
+ clearAndCancelActivationGroup( activationGroup );
}
activation.setActivated( false );
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/NodeMemories.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/NodeMemories.java 2008-08-17 08:06:35 UTC (rev 21586)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/NodeMemories.java 2008-08-18 02:22:01 UTC (rev 21587)
@@ -25,12 +25,14 @@
*
* @author etirelli
*/
-public interface NodeMemories extends Externalizable {
+public interface NodeMemories {
public Object getNodeMemory( NodeMemory node );
public void clearNodeMemory( NodeMemory node );
public void setRuleBaseReference(InternalRuleBase ruleBase);
+
+ public void clear();
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/ObjectStore.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/ObjectStore.java 2008-08-17 08:06:35 UTC (rev 21586)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/ObjectStore.java 2008-08-18 02:22:01 UTC (rev 21587)
@@ -9,6 +9,8 @@
public abstract int size();
public abstract boolean isEmpty();
+
+ public void clear();
public abstract Object getObjectForHandle(InternalFactHandle handle);
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/PriorityQueueAgendaGroupFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/PriorityQueueAgendaGroupFactory.java 2008-08-17 08:06:35 UTC (rev 21586)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/PriorityQueueAgendaGroupFactory.java 2008-08-18 02:22:01 UTC (rev 21587)
@@ -5,7 +5,6 @@
import java.io.IOException;
import java.io.ObjectInput;
-import org.drools.spi.AgendaGroup;
public class PriorityQueueAgendaGroupFactory implements AgendaGroupFactory, Externalizable {
private static final AgendaGroupFactory INSTANCE = new PriorityQueueAgendaGroupFactory();
@@ -20,7 +19,7 @@
return INSTANCE;
}
- public AgendaGroup createAgendaGroup(String name, InternalRuleBase ruleBase) {
+ public InternalAgendaGroup createAgendaGroup(String name, InternalRuleBase ruleBase) {
return new BinaryHeapQueueAgendaGroup( name,
ruleBase );
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/RuleFlowGroupImpl.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/RuleFlowGroupImpl.java 2008-08-17 08:06:35 UTC (rev 21586)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/RuleFlowGroupImpl.java 2008-08-18 02:22:01 UTC (rev 21587)
@@ -172,6 +172,7 @@
public void clear() {
this.list.clear();
+ this.active = false;
}
public int size() {
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/SingleThreadedObjectStore.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/SingleThreadedObjectStore.java 2008-08-17 08:06:35 UTC (rev 21586)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/SingleThreadedObjectStore.java 2008-08-18 02:22:01 UTC (rev 21587)
@@ -72,6 +72,11 @@
public boolean isEmpty() {
return this.assertMap != null;
}
+
+ public void clear() {
+ this.assertMap.clear();
+ this.identityMap.clear();
+ }
/* (non-Javadoc)
* @see org.drools.common.ObjectStore#getObjectForHandle(org.drools.common.InternalFactHandle)
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/TruthMaintenanceSystem.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/TruthMaintenanceSystem.java 2008-08-17 08:06:35 UTC (rev 21586)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/TruthMaintenanceSystem.java 2008-08-18 02:22:01 UTC (rev 21587)
@@ -339,4 +339,9 @@
}
set.add( node );
}
+
+ public void clear() {
+ this.justifiedMap.clear();
+ this.assertMap.clear();
+ }
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/DefaultMarshaller.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/DefaultMarshaller.java 2008-08-17 08:06:35 UTC (rev 21586)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/DefaultMarshaller.java 2008-08-18 02:22:01 UTC (rev 21587)
@@ -12,7 +12,9 @@
import org.drools.reteoo.ReteooStatefulSession;
import org.drools.spi.GlobalResolver;
-public class DefaultMarshaller implements Marshaller {
+public class DefaultMarshaller
+ implements
+ Marshaller {
GlobalResolver globalResolver;
private RuleBaseConfiguration config;
PlaceholderResolverStrategyFactory factory;
@@ -20,20 +22,21 @@
public DefaultMarshaller() {
this( null );
}
-
+
public DefaultMarshaller(RuleBaseConfiguration config) {
- this( config, null);
- }
+ this( config,
+ null );
+ }
public DefaultMarshaller(RuleBaseConfiguration config,
- PlaceholderResolverStrategyFactory factory) {
+ PlaceholderResolverStrategyFactory factory) {
this.config = (config != null) ? config : new RuleBaseConfiguration();
-
+
if ( factory == null ) {
this.factory = new PlaceholderResolverStrategyFactory();
ClassPlaceholderResolverStrategyAcceptor acceptor = new ClassPlaceholderResolverStrategyAcceptor( "*.*" );
IdentityPlaceholderResolverStrategy strategy = new IdentityPlaceholderResolverStrategy( acceptor );
- this.factory.addStrategy( strategy );
+ this.factory.addStrategy( strategy );
} else {
this.factory = factory;
}
@@ -48,18 +51,34 @@
final ExecutorService executor) throws IOException,
ClassNotFoundException {
MarshallerReaderContext context = new MarshallerReaderContext( stream,
- ruleBase,
- RuleBaseNodes.getNodeMap( ruleBase ),
- factory );
+ ruleBase,
+ RuleBaseNodes.getNodeMap( ruleBase ),
+ factory );
ReteooStatefulSession session = InputMarshaller.readSession( context,
- id,
- executor );
+ id,
+ executor );
context.close();
return session;
-
+
}
+ public ReteooStatefulSession read(final InputStream stream,
+ final InternalRuleBase ruleBase,
+ ReteooStatefulSession session) throws IOException,
+ ClassNotFoundException {
+ MarshallerReaderContext context = new MarshallerReaderContext( stream,
+ ruleBase,
+ RuleBaseNodes.getNodeMap( ruleBase ),
+ factory );
+
+ session = InputMarshaller.readSession( session,
+ context );
+ context.close();
+ return session;
+
+ }
+
/* (non-Javadoc)
* @see org.drools.marshalling.Marshaller#write(java.io.OutputStream, org.drools.common.InternalRuleBase, org.drools.StatefulSession)
*/
@@ -67,10 +86,10 @@
final InternalRuleBase ruleBase,
final StatefulSession session) throws IOException {
MarshallerWriteContext context = new MarshallerWriteContext( stream,
- ruleBase,
- (InternalWorkingMemory) session,
- RuleBaseNodes.getNodeMap( ruleBase ),
- this.factory );
+ ruleBase,
+ (InternalWorkingMemory) session,
+ RuleBaseNodes.getNodeMap( ruleBase ),
+ this.factory );
OutputMarshaller.writeSession( context );
context.close();
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/InputMarshaller.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/InputMarshaller.java 2008-08-17 08:06:35 UTC (rev 21586)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/InputMarshaller.java 2008-08-18 02:22:01 UTC (rev 21587)
@@ -68,6 +68,60 @@
import org.drools.workflow.instance.node.WorkItemNodeInstance;
public class InputMarshaller {
+ /**
+ * Stream the data into an existing session
+ *
+ * @param session
+ * @param context
+ * @param id
+ * @param executor
+ * @return
+ * @throws IOException
+ * @throws ClassNotFoundException
+ */
+ public static ReteooStatefulSession readSession(ReteooStatefulSession session,
+ MarshallerReaderContext context) throws IOException,
+ ClassNotFoundException {
+ int handleId = context.readInt();
+ long handleCounter = context.readLong();
+ long propagationCounter = context.readLong();
+
+ // these are for the InitialFactHandle, on a reset we just ignore
+ context.readInt();
+ context.readLong();
+
+ session.reset(handleId, handleCounter, propagationCounter);
+ DefaultAgenda agenda = ( DefaultAgenda ) session.getAgenda();
+
+ readAgenda( context,
+ agenda );
+
+ context.wm = session;
+
+ readFactHandles( context );
+
+ readActionQueue( context );
+
+ if ( context.readBoolean() ) {
+ readTruthMaintenanceSystem( context );
+ }
+
+ readProcessInstances( context );
+
+ readWorkItems( context );
+
+ return session;
+ }
+
+ /**
+ * Create a new session into which to read the stream data
+ * @param context
+ * @param id
+ * @param executor
+ * @return
+ * @throws IOException
+ * @throws ClassNotFoundException
+ */
public static ReteooStatefulSession readSession(MarshallerReaderContext context,
int id,
ExecutorService executor) throws IOException,
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/FactHandleFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/FactHandleFactory.java 2008-08-17 08:06:35 UTC (rev 21586)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/FactHandleFactory.java 2008-08-18 02:22:01 UTC (rev 21587)
@@ -64,4 +64,6 @@
public int getId();
public long getRecency();
+
+ public void clear(int id, long counter);
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/RuleFlowGroup.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/RuleFlowGroup.java 2008-08-17 08:06:35 UTC (rev 21586)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/RuleFlowGroup.java 2008-08-18 02:22:01 UTC (rev 21587)
@@ -42,4 +42,6 @@
* activations when it was activated, it will be deactivated immediately.
*/
void setAutoDeactivate(boolean autoDeactivate);
+
+ void clear();
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/ArrayIterator.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/ArrayIterator.java 2008-08-17 08:06:35 UTC (rev 21586)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/ArrayIterator.java 2008-08-18 02:22:01 UTC (rev 21587)
@@ -137,7 +137,7 @@
* If an array has previously been set (using the single-arg constructor
* or this method) then that array is discarded in favour of this one.
* Iteration is restarted at the start of the new array.
- * Although this can be used to reset iteration, the {@link #reset()} method
+ * Although this can be used to reset iteration, the {@link #clear()} method
* is a more effective choice.
*
* @param array the array that the iterator should iterate over.
Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/AgendaTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/AgendaTest.java 2008-08-17 08:06:35 UTC (rev 21586)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/AgendaTest.java 2008-08-18 02:22:01 UTC (rev 21587)
@@ -165,7 +165,7 @@
assertEquals( 1,
agenda.getScheduledActivations().length );
- agenda.clearAgenda();
+ agenda.clearAndCancel();
assertEquals( 0,
agenda.getFocus().size() );
@@ -250,7 +250,7 @@
results.get( "fired" ) );
// clear the agenda and the result map
- agenda.clearAgenda();
+ agenda.clearAndCancel();
results.clear();
// False filter, activations should always be denied
@@ -587,7 +587,7 @@
agendaGroup.size() );
// Clear the agenda we we can test again
- agenda.clearAgenda();
+ agenda.clearAndCancel();
assertEquals( 0,
agendaGroup.size() );
@@ -837,7 +837,7 @@
assertEquals( 1,
activationGroup3.size() );
- agenda.clearAgendaGroup( "agendaGroup3" );
+ agenda.clearAndCancelAgendaGroup( "agendaGroup3" );
assertEquals( 3,
agenda.agendaSize() );
assertEquals( 0,
More information about the jboss-svn-commits
mailing list