[jboss-svn-commits] JBL Code SVN: r20151 - in labs/jbossrules/trunk/drools-core/src: main/java/org/drools/reteoo and 1 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Sat May 24 01:07:33 EDT 2008
Author: mark.proctor at jboss.com
Date: 2008-05-24 01:07:32 -0400 (Sat, 24 May 2008)
New Revision: 20151
Added:
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/NodeTypeEnums.java
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/OutputMarshaller.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/PersisterEnums.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/AccumulateNode.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/AlphaNetworkCompiler.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/BetaNode.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/CollectNode.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/EvalConditionNode.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ExistsNode.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/FromNode.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/JoinNode.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/LeftTupleSink.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/NotNode.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/QueryTerminalNode.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/RightInputAdapterNode.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/RuleTerminalNode.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/Sink.java
labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/CompositeObjectSinkAdapterTest.java
labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/MockLeftTupleSink.java
Log:
JBRULES-1598 Efficient WorkingMemory serialization with binary protocol
-now uses a case statement for the nodes.
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-05-24 05:06:41 UTC (rev 20150)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/InputMarshaller.java 2008-05-24 05:07:32 UTC (rev 20151)
@@ -37,6 +37,7 @@
import org.drools.reteoo.JoinNode;
import org.drools.reteoo.LeftTuple;
import org.drools.reteoo.LeftTupleSink;
+import org.drools.reteoo.NodeTypeEnums;
import org.drools.reteoo.NotNode;
import org.drools.reteoo.ObjectTypeNode;
import org.drools.reteoo.ReteooStatefulSession;
@@ -84,8 +85,10 @@
long propagationCounter = context.readLong();
- DefaultAgenda agenda = new DefaultAgenda( context.ruleBase, false );
- readAgenda( context, agenda );
+ DefaultAgenda agenda = new DefaultAgenda( context.ruleBase,
+ false );
+ readAgenda( context,
+ agenda );
ReteooStatefulSession session = new ReteooStatefulSession( id,
context.ruleBase,
executor,
@@ -93,7 +96,7 @@
initialFactHandle,
propagationCounter,
agenda );
-
+
// RuleFlowGroups need to reference the session
for ( RuleFlowGroup group : agenda.getRuleFlowGroupsMap().values() ) {
((RuleFlowGroupImpl) group).setWorkingMemory( session );
@@ -107,41 +110,47 @@
if ( context.readBoolean() ) {
readTruthMaintenanceSystem( context );
}
-
+
readProcessInstances( context );
readWorkItems( context );
return session;
}
-
- public static void readAgenda(MarshallerReaderContext context, DefaultAgenda agenda) throws IOException {
+
+ public static void readAgenda(MarshallerReaderContext context,
+ DefaultAgenda agenda) throws IOException {
ObjectInputStream stream = context.stream;
- while ( stream.readInt() == PersisterEnums.AGENDA_GROUP ) {
- BinaryHeapQueueAgendaGroup group = new BinaryHeapQueueAgendaGroup( stream.readUTF(), context.ruleBase );
+ while ( stream.readShort() == PersisterEnums.AGENDA_GROUP ) {
+ BinaryHeapQueueAgendaGroup group = new BinaryHeapQueueAgendaGroup( stream.readUTF(),
+ context.ruleBase );
group.setActive( stream.readBoolean() );
- agenda.getAgendaGroupsMap().put( group.getName(), group );
+ agenda.getAgendaGroupsMap().put( group.getName(),
+ group );
}
-
- while ( stream.readInt() == PersisterEnums.AGENDA_GROUP ) {
+
+ while ( stream.readShort() == PersisterEnums.AGENDA_GROUP ) {
String agendaGroupName = stream.readUTF();
agenda.getStackList().add( agenda.getAgendaGroup( agendaGroupName ) );
}
-
- while ( stream.readInt() == PersisterEnums.RULE_FLOW_GROUP ) {
+
+ while ( stream.readShort() == PersisterEnums.RULE_FLOW_GROUP ) {
String rfgName = stream.readUTF();
boolean active = stream.readBoolean();
boolean autoDeactivate = stream.readBoolean();
- RuleFlowGroup rfg = new RuleFlowGroupImpl( rfgName, active, autoDeactivate );
- agenda.getRuleFlowGroupsMap().put( rfgName, rfg );
- }
-
+ RuleFlowGroup rfg = new RuleFlowGroupImpl( rfgName,
+ active,
+ autoDeactivate );
+ agenda.getRuleFlowGroupsMap().put( rfgName,
+ rfg );
+ }
+
}
public static void readActionQueue(MarshallerReaderContext context) throws IOException {
ReteooWorkingMemory wm = (ReteooWorkingMemory) context.wm;
Queue actionQueue = wm.getActionQueue();
- while ( context.readInt() == PersisterEnums.WORKING_MEMORY_ACTION ) {
+ while ( context.readShort() == PersisterEnums.WORKING_MEMORY_ACTION ) {
actionQueue.offer( PersisterHelper.readWorkingMemoryAction( context ) );
}
}
@@ -150,14 +159,14 @@
ObjectInputStream stream = context.stream;
TruthMaintenanceSystem tms = context.wm.getTruthMaintenanceSystem();
- while ( stream.readInt() == PersisterEnums.EQUALITY_KEY ) {
+ while ( stream.readShort() == PersisterEnums.EQUALITY_KEY ) {
int status = stream.readInt();
int factHandleId = stream.readInt();
InternalFactHandle handle = (InternalFactHandle) context.handles.get( factHandleId );
EqualityKey key = new EqualityKey( handle,
status );
handle.setEqualityKey( key );
- while ( stream.readInt() == PersisterEnums.FACT_HANDLE ) {
+ while ( stream.readShort() == PersisterEnums.FACT_HANDLE ) {
factHandleId = stream.readInt();
handle = (InternalFactHandle) context.handles.get( factHandleId );
key.addFactHandle( handle );
@@ -168,7 +177,7 @@
}
public static void readFactHandles(MarshallerReaderContext context) throws IOException,
- ClassNotFoundException {
+ ClassNotFoundException {
ObjectInputStream stream = context.stream;
InternalRuleBase ruleBase = context.ruleBase;
PlaceholderResolverStrategyFactory resolverStrategyFactory = context.resolverStrategyFactory;
@@ -192,7 +201,7 @@
for ( int i = 0; i < size; i++ ) {
int id = stream.readInt();
long recency = stream.readLong();
-
+
int strategyIndex = stream.readInt();
PlaceholderResolverStrategy strategy = resolverStrategyFactory.getStrategy( strategyIndex );
ObjectPlaceholder placeHolder = strategy.read( stream );
@@ -227,7 +236,7 @@
}
InternalFactHandle handle = wm.getInitialFactHandle();
- while ( stream.readInt() == PersisterEnums.LEFT_TUPLE ) {
+ while ( stream.readShort() == PersisterEnums.LEFT_TUPLE ) {
LeftTupleSink sink = (LeftTupleSink) context.sinks.get( stream.readInt() );
LeftTuple leftTuple = new LeftTuple( handle,
sink,
@@ -246,7 +255,7 @@
public static void readRightTuples(InternalFactHandle factHandle,
MarshallerReaderContext context) throws IOException {
ObjectInputStream stream = context.stream;
- while ( stream.readInt() == PersisterEnums.RIGHT_TUPLE ) {
+ while ( stream.readShort() == PersisterEnums.RIGHT_TUPLE ) {
readRightTuple( context,
factHandle );
}
@@ -272,7 +281,7 @@
public static void readLeftTuples(MarshallerReaderContext context) throws IOException {
ObjectInputStream stream = context.stream;
- while ( stream.readInt() == PersisterEnums.LEFT_TUPLE ) {
+ while ( stream.readShort() == PersisterEnums.LEFT_TUPLE ) {
LeftTupleSink sink = (LeftTupleSink) context.sinks.get( stream.readInt() );
int factHandleId = stream.readInt();
LeftTuple leftTuple = new LeftTuple( context.handles.get( factHandleId ),
@@ -292,74 +301,31 @@
LeftTupleSink sink = parentLeftTuple.getLeftTupleSink();
- if ( sink instanceof JoinNode ) {
- BetaMemory memory = (BetaMemory) context.wm.getNodeMemory( (BetaNode) sink );
- memory.getLeftTupleMemory().add( parentLeftTuple );
-
- while ( stream.readInt() == PersisterEnums.RIGHT_TUPLE ) {
- LeftTupleSink childSink = (LeftTupleSink) sinks.get( stream.readInt() );
- int factHandleId = stream.readInt();
- RightTupleKey key = new RightTupleKey( factHandleId,
- sink );
- RightTuple rightTuple = context.rightTuples.get( key );
- LeftTuple childLeftTuple = new LeftTuple( parentLeftTuple,
- rightTuple,
- childSink,
- true );
- readLeftTuple( childLeftTuple,
- context );
- }
-
- } else if ( sink instanceof EvalConditionNode ) {
- final EvalMemory memory = (EvalMemory) context.wm.getNodeMemory( (EvalConditionNode) sink );
- memory.tupleMemory.add( parentLeftTuple );
- while ( stream.readInt() == PersisterEnums.LEFT_TUPLE ) {
- LeftTupleSink childSink = (LeftTupleSink) sinks.get( stream.readInt() );
- LeftTuple childLeftTuple = new LeftTuple( parentLeftTuple,
- childSink,
- true );
- readLeftTuple( childLeftTuple,
- context );
- }
- } else if ( sink instanceof NotNode ) {
- BetaMemory memory = (BetaMemory) context.wm.getNodeMemory( (BetaNode) sink );
- int type = stream.readInt();
- if ( type == PersisterEnums.LEFT_TUPLE_NOT_BLOCKED ) {
+ switch ( sink.getType() ) {
+ case NodeTypeEnums.JoinNode : {
+ BetaMemory memory = (BetaMemory) context.wm.getNodeMemory( (BetaNode) sink );
memory.getLeftTupleMemory().add( parentLeftTuple );
- while ( stream.readInt() == PersisterEnums.LEFT_TUPLE ) {
+ while ( stream.readShort() == PersisterEnums.RIGHT_TUPLE ) {
LeftTupleSink childSink = (LeftTupleSink) sinks.get( stream.readInt() );
+ int factHandleId = stream.readInt();
+ RightTupleKey key = new RightTupleKey( factHandleId,
+ sink );
+ RightTuple rightTuple = context.rightTuples.get( key );
LeftTuple childLeftTuple = new LeftTuple( parentLeftTuple,
+ rightTuple,
childSink,
true );
readLeftTuple( childLeftTuple,
context );
}
+ break;
- } else {
- int factHandleId = stream.readInt();
- RightTupleKey key = new RightTupleKey( factHandleId,
- sink );
- RightTuple rightTuple = context.rightTuples.get( key );
-
- parentLeftTuple.setBlocker( rightTuple );
- rightTuple.setBlocked( parentLeftTuple );
}
- } else if ( sink instanceof ExistsNode ) {
- BetaMemory memory = (BetaMemory) context.wm.getNodeMemory( (BetaNode) sink );
- int type = stream.readInt();
- if ( type == PersisterEnums.LEFT_TUPLE_NOT_BLOCKED ) {
- memory.getLeftTupleMemory().add( parentLeftTuple );
- } else {
- int factHandleId = stream.readInt();
- RightTupleKey key = new RightTupleKey( factHandleId,
- sink );
- RightTuple rightTuple = context.rightTuples.get( key );
-
- parentLeftTuple.setBlocker( rightTuple );
- rightTuple.setBlocked( parentLeftTuple );
-
- while ( stream.readInt() == PersisterEnums.LEFT_TUPLE ) {
+ case NodeTypeEnums.EvalConditionNode : {
+ final EvalMemory memory = (EvalMemory) context.wm.getNodeMemory( (EvalConditionNode) sink );
+ memory.tupleMemory.add( parentLeftTuple );
+ while ( stream.readShort() == PersisterEnums.LEFT_TUPLE ) {
LeftTupleSink childSink = (LeftTupleSink) sinks.get( stream.readInt() );
LeftTuple childLeftTuple = new LeftTuple( parentLeftTuple,
childSink,
@@ -367,22 +333,76 @@
readLeftTuple( childLeftTuple,
context );
}
+ break;
}
- } else if ( sink instanceof RuleTerminalNode ) {
- RuleTerminalNode ruleTerminalNode = (RuleTerminalNode) sink;
- TerminalNodeMemory memory = (TerminalNodeMemory) wm.getNodeMemory( ruleTerminalNode );
- memory.getTupleMemory().add( parentLeftTuple );
+ case NodeTypeEnums.NotNode : {
+ BetaMemory memory = (BetaMemory) context.wm.getNodeMemory( (BetaNode) sink );
+ int type = stream.readShort();
+ if ( type == PersisterEnums.LEFT_TUPLE_NOT_BLOCKED ) {
+ memory.getLeftTupleMemory().add( parentLeftTuple );
- int pos = context.terminalTupleMap.size();
- context.terminalTupleMap.put( pos,
- parentLeftTuple );
+ while ( stream.readShort() == PersisterEnums.LEFT_TUPLE ) {
+ LeftTupleSink childSink = (LeftTupleSink) sinks.get( stream.readInt() );
+ LeftTuple childLeftTuple = new LeftTuple( parentLeftTuple,
+ childSink,
+ true );
+ readLeftTuple( childLeftTuple,
+ context );
+ }
+
+ } else {
+ int factHandleId = stream.readInt();
+ RightTupleKey key = new RightTupleKey( factHandleId,
+ sink );
+ RightTuple rightTuple = context.rightTuples.get( key );
+
+ parentLeftTuple.setBlocker( rightTuple );
+ rightTuple.setBlocked( parentLeftTuple );
+ }
+ break;
+ }
+ case NodeTypeEnums.ExistsNode : {
+ BetaMemory memory = (BetaMemory) context.wm.getNodeMemory( (BetaNode) sink );
+ int type = stream.readShort();
+ if ( type == PersisterEnums.LEFT_TUPLE_NOT_BLOCKED ) {
+ memory.getLeftTupleMemory().add( parentLeftTuple );
+ } else {
+ int factHandleId = stream.readInt();
+ RightTupleKey key = new RightTupleKey( factHandleId,
+ sink );
+ RightTuple rightTuple = context.rightTuples.get( key );
+
+ parentLeftTuple.setBlocker( rightTuple );
+ rightTuple.setBlocked( parentLeftTuple );
+
+ while ( stream.readShort() == PersisterEnums.LEFT_TUPLE ) {
+ LeftTupleSink childSink = (LeftTupleSink) sinks.get( stream.readInt() );
+ LeftTuple childLeftTuple = new LeftTuple( parentLeftTuple,
+ childSink,
+ true );
+ readLeftTuple( childLeftTuple,
+ context );
+ }
+ }
+ break;
+ }
+ case NodeTypeEnums.RuleTerminalNode : {
+ RuleTerminalNode ruleTerminalNode = (RuleTerminalNode) sink;
+ TerminalNodeMemory memory = (TerminalNodeMemory) wm.getNodeMemory( ruleTerminalNode );
+ memory.getTupleMemory().add( parentLeftTuple );
+
+ int pos = context.terminalTupleMap.size();
+ context.terminalTupleMap.put( pos,
+ parentLeftTuple );
+ break;
+ }
}
}
public static void readActivations(MarshallerReaderContext context) throws IOException {
ObjectInputStream stream = context.stream;
- while ( stream.readInt() == PersisterEnums.ACTIVATION ) {
+ while ( stream.readShort() == PersisterEnums.ACTIVATION ) {
readActivation( context );
}
}
@@ -437,9 +457,9 @@
// from the Agenda
agendaGroup = (InternalAgendaGroup) wm.getAgenda().getAgendaGroup( rule.getAgendaGroup() );
}
-
+
activation.setAgendaGroup( agendaGroup );
-
+
if ( activated ) {
if ( rule.getRuleFlowGroup() == null ) {
agendaGroup.add( activation );
@@ -450,7 +470,7 @@
}
TruthMaintenanceSystem tms = context.wm.getTruthMaintenanceSystem();
- while ( stream.readInt() == PersisterEnums.LOGICAL_DEPENDENCY ) {
+ while ( stream.readShort() == PersisterEnums.LOGICAL_DEPENDENCY ) {
int factHandleId = stream.readInt();
InternalFactHandle handle = (InternalFactHandle) context.handles.get( factHandleId );
tms.addLogicalDependency( handle,
@@ -465,7 +485,7 @@
public static void readPropagationContexts(MarshallerReaderContext context) throws IOException {
ObjectInputStream stream = context.stream;
- while ( stream.readInt() == PersisterEnums.PROPAGATION_CONTEXT ) {
+ while ( stream.readShort() == PersisterEnums.PROPAGATION_CONTEXT ) {
readPropagationContext( context );
}
@@ -522,7 +542,7 @@
public static void readProcessInstances(MarshallerReaderContext context) throws IOException {
ObjectInputStream stream = context.stream;
- while ( stream.readInt() == PersisterEnums.PROCESS_INSTANCE ) {
+ while ( stream.readShort() == PersisterEnums.PROCESS_INSTANCE ) {
readProcessInstance( context );
}
}
@@ -531,89 +551,87 @@
ObjectInputStream stream = context.stream;
InternalRuleBase ruleBase = context.ruleBase;
InternalWorkingMemory wm = context.wm;
-
+
RuleFlowProcessInstance processInstance = new RuleFlowProcessInstance();
- processInstance.setId(stream.readLong());
- processInstance.setProcess(ruleBase.getProcess(stream.readUTF()));
- processInstance.setState(stream.readInt());
+ processInstance.setId( stream.readLong() );
+ processInstance.setProcess( ruleBase.getProcess( stream.readUTF() ) );
+ processInstance.setState( stream.readInt() );
long nodeInstanceCounter = stream.readLong();
- processInstance.setWorkingMemory(wm);
-
+ processInstance.setWorkingMemory( wm );
+
int nbVariables = stream.readInt();
- if (nbVariables > 0) {
- VariableScopeInstance variableScopeInstance = (VariableScopeInstance)
- processInstance.getContextInstance(VariableScope.VARIABLE_SCOPE);
- for (int i = 0; i < nbVariables; i++) {
- String name = stream.readUTF();
- try {
- Object value = stream.readObject();
- variableScopeInstance.setVariable(name, value);
- } catch (ClassNotFoundException e) {
- throw new IllegalArgumentException("Could not reload variable " + name);
- }
- }
+ if ( nbVariables > 0 ) {
+ VariableScopeInstance variableScopeInstance = (VariableScopeInstance) processInstance.getContextInstance( VariableScope.VARIABLE_SCOPE );
+ for ( int i = 0; i < nbVariables; i++ ) {
+ String name = stream.readUTF();
+ try {
+ Object value = stream.readObject();
+ variableScopeInstance.setVariable( name,
+ value );
+ } catch ( ClassNotFoundException e ) {
+ throw new IllegalArgumentException( "Could not reload variable " + name );
+ }
+ }
}
-
- while ( stream.readInt() == PersisterEnums.NODE_INSTANCE ) {
- readNodeInstance( context, processInstance );
+
+ while ( stream.readShort() == PersisterEnums.NODE_INSTANCE ) {
+ readNodeInstance( context,
+ processInstance );
}
-
- processInstance.internalSetNodeInstanceCounter(nodeInstanceCounter);
- wm.addProcessInstance(processInstance);
+
+ processInstance.internalSetNodeInstanceCounter( nodeInstanceCounter );
+ wm.addProcessInstance( processInstance );
return processInstance;
}
-
+
public static NodeInstance readNodeInstance(MarshallerReaderContext context,
RuleFlowProcessInstance processInstance) throws IOException {
ObjectInputStream stream = context.stream;
NodeInstanceImpl nodeInstance = null;
long id = stream.readLong();
long nodeId = stream.readLong();
- int nodeType = stream.readInt();
- switch (nodeType) {
- case PersisterEnums.RULE_SET_NODE_INSTANCE:
+ int nodeType = stream.readShort();
+ switch ( nodeType ) {
+ case PersisterEnums.RULE_SET_NODE_INSTANCE :
nodeInstance = new RuleSetNodeInstance();
break;
- case PersisterEnums.WORK_ITEM_NODE_INSTANCE:
+ case PersisterEnums.WORK_ITEM_NODE_INSTANCE :
nodeInstance = new WorkItemNodeInstance();
- ((WorkItemNodeInstance) nodeInstance)
- .internalSetWorkItemId(stream.readLong());
+ ((WorkItemNodeInstance) nodeInstance).internalSetWorkItemId( stream.readLong() );
break;
- case PersisterEnums.SUB_PROCESS_NODE_INSTANCE:
+ case PersisterEnums.SUB_PROCESS_NODE_INSTANCE :
nodeInstance = new SubProcessNodeInstance();
- ((SubProcessNodeInstance) nodeInstance)
- .internalSetProcessInstanceId(stream.readLong());
+ ((SubProcessNodeInstance) nodeInstance).internalSetProcessInstanceId( stream.readLong() );
break;
- case PersisterEnums.MILESTONE_NODE_INSTANCE:
+ case PersisterEnums.MILESTONE_NODE_INSTANCE :
nodeInstance = new MilestoneNodeInstance();
break;
- case PersisterEnums.TIMER_NODE_INSTANCE:
+ case PersisterEnums.TIMER_NODE_INSTANCE :
nodeInstance = new TimerNodeInstance();
- ((TimerNodeInstance) nodeInstance)
- .internalSetTimerId(stream.readLong());
+ ((TimerNodeInstance) nodeInstance).internalSetTimerId( stream.readLong() );
break;
- case PersisterEnums.JOIN_NODE_INSTANCE:
+ case PersisterEnums.JOIN_NODE_INSTANCE :
nodeInstance = new JoinInstance();
int number = stream.readInt();
- if (number > 0) {
+ if ( number > 0 ) {
Map<Long, Integer> triggers = new HashMap<Long, Integer>();
- for (int i = 0; i < number; i++) {
+ for ( int i = 0; i < number; i++ ) {
long l = stream.readLong();
int count = stream.readInt();
- triggers.put(l, count);
+ triggers.put( l,
+ count );
}
- ((JoinInstance) nodeInstance).internalSetTriggers(triggers);
+ ((JoinInstance) nodeInstance).internalSetTriggers( triggers );
}
break;
- default:
- throw new IllegalArgumentException(
- "Unknown node type: " + nodeType);
+ default :
+ throw new IllegalArgumentException( "Unknown node type: " + nodeType );
}
- nodeInstance.setNodeId(nodeId);
- nodeInstance.setNodeInstanceContainer(processInstance);
- nodeInstance.setProcessInstance(processInstance);
- nodeInstance.setId(id);
- if (nodeInstance instanceof EventNodeInstance) {
+ nodeInstance.setNodeId( nodeId );
+ nodeInstance.setNodeInstanceContainer( processInstance );
+ nodeInstance.setProcessInstance( processInstance );
+ nodeInstance.setId( id );
+ if ( nodeInstance instanceof EventNodeInstance ) {
((EventNodeInstance) nodeInstance).addEventListeners();
}
return nodeInstance;
@@ -621,7 +639,7 @@
public static void readWorkItems(MarshallerReaderContext context) throws IOException {
ObjectInputStream stream = context.stream;
- while ( stream.readInt() == PersisterEnums.WORK_ITEM ) {
+ while ( stream.readShort() == PersisterEnums.WORK_ITEM ) {
readWorkItem( context );
}
}
@@ -629,15 +647,15 @@
public static WorkItem readWorkItem(MarshallerReaderContext context) throws IOException {
ObjectInputStream stream = context.stream;
InternalWorkingMemory wm = context.wm;
-
+
WorkItemImpl workItem = new WorkItemImpl();
- workItem.setId(stream.readLong());
- workItem.setProcessInstanceId(stream.readLong());
- workItem.setName(stream.readUTF());
- workItem.setState(stream.readInt());
-
- wm.getWorkItemManager().internalAddWorkItem(workItem);
+ workItem.setId( stream.readLong() );
+ workItem.setProcessInstanceId( stream.readLong() );
+ workItem.setName( stream.readUTF() );
+ workItem.setState( stream.readInt() );
+
+ wm.getWorkItemManager().internalAddWorkItem( workItem );
return workItem;
}
-
+
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/OutputMarshaller.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/OutputMarshaller.java 2008-05-24 05:06:41 UTC (rev 20150)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/OutputMarshaller.java 2008-05-24 05:07:32 UTC (rev 20151)
@@ -34,6 +34,7 @@
import org.drools.reteoo.JoinNode;
import org.drools.reteoo.LeftTuple;
import org.drools.reteoo.LeftTupleSink;
+import org.drools.reteoo.NodeTypeEnums;
import org.drools.reteoo.NotNode;
import org.drools.reteoo.ObjectTypeNode;
import org.drools.reteoo.ReteooWorkingMemory;
@@ -84,9 +85,9 @@
} else {
context.writeBoolean( false );
}
-
+
writeProcessInstances( context );
-
+
writeWorkItems( context );
}
@@ -101,32 +102,32 @@
AgendaGroupSorter.instance );
for ( AgendaGroup group : agendaGroups ) {
- context.writeInt( PersisterEnums.AGENDA_GROUP );
+ context.writeShort( PersisterEnums.AGENDA_GROUP );
context.writeUTF( group.getName() );
context.writeBoolean( group.isActive() );
}
- context.writeInt( PersisterEnums.END );
+ context.writeShort( PersisterEnums.END );
LinkedList<AgendaGroup> focusStack = agenda.getStackList();
for ( Iterator<AgendaGroup> it = focusStack.iterator(); it.hasNext(); ) {
AgendaGroup group = it.next();
- context.writeInt( PersisterEnums.AGENDA_GROUP );
+ context.writeShort( PersisterEnums.AGENDA_GROUP );
context.writeUTF( group.getName() );
}
- context.writeInt( PersisterEnums.END );
+ context.writeShort( PersisterEnums.END );
RuleFlowGroupImpl[] ruleFlowGroups = (RuleFlowGroupImpl[]) agenda.getRuleFlowGroupsMap().values().toArray( new RuleFlowGroupImpl[agenda.getRuleFlowGroupsMap().size()] );
Arrays.sort( ruleFlowGroups,
RuleFlowGroupSorter.instance );
for ( RuleFlowGroupImpl group : ruleFlowGroups ) {
- context.writeInt( PersisterEnums.RULE_FLOW_GROUP );
+ context.writeShort( PersisterEnums.RULE_FLOW_GROUP );
//group.write( context );
context.writeUTF( group.getName() );
context.writeBoolean( group.isActive() );
context.writeBoolean( group.isAutoDeactivate() );
}
- context.writeInt( PersisterEnums.END );
+ context.writeShort( PersisterEnums.END );
}
public static class AgendaGroupSorter
@@ -156,10 +157,10 @@
WorkingMemoryAction[] queue = wm.getActionQueue().toArray( new WorkingMemoryAction[wm.getActionQueue().size()] );
for ( int i = queue.length - 1; i >= 0; i-- ) {
- context.writeInt( PersisterEnums.WORKING_MEMORY_ACTION );
+ context.writeShort( PersisterEnums.WORKING_MEMORY_ACTION );
queue[i].write( context );
}
- context.writeInt( PersisterEnums.END );
+ context.writeShort( PersisterEnums.END );
}
public static void writeTruthMaintenanceSystem(MarshallerWriteContext context) throws IOException {
@@ -180,21 +181,21 @@
// write the assert map of Equality keys
for ( EqualityKey key : keys ) {
- stream.writeInt( PersisterEnums.EQUALITY_KEY );
+ stream.writeShort( PersisterEnums.EQUALITY_KEY );
stream.writeInt( key.getStatus() );
InternalFactHandle handle = key.getFactHandle();
stream.writeInt( handle.getId() );
context.out.println( "EqualityKey int:" + key.getStatus() + " int:" + handle.getId() );
if ( key.getOtherFactHandle() != null && !key.getOtherFactHandle().isEmpty() ) {
for ( InternalFactHandle handle2 : key.getOtherFactHandle() ) {
- stream.writeInt( PersisterEnums.FACT_HANDLE );
+ stream.writeShort( PersisterEnums.FACT_HANDLE );
stream.writeInt( handle2.getId() );
context.out.println( "OtherHandle int:" + handle2.getId() );
}
}
- stream.writeInt( PersisterEnums.END );
+ stream.writeShort( PersisterEnums.END );
}
- stream.writeInt( PersisterEnums.END );
+ stream.writeShort( PersisterEnums.END );
}
public static class EqualityKeySorter
@@ -219,7 +220,7 @@
// Write out FactHandles
for ( InternalFactHandle handle : orderFacts( wm.getObjectStore() ) ) {
- //stream.writeInt( PersisterEnums.FACT_HANDLE );
+ //stream.writeShort( PersisterEnums.FACT_HANDLE );
//InternalFactHandle handle = (InternalFactHandle) it.next();
stream.writeInt( handle.getId() );
stream.writeLong( handle.getRecency() );
@@ -231,11 +232,11 @@
if ( object instanceof ShadowProxy ) {
object = ((ShadowProxy) object).getShadowedObject();
}
-
+
PlaceholderResolverStrategy strategy = resolverStrategyFactory.getStrategy( handle.getObject() );
-
+
stream.writeInt( strategy.getIndex() );
-
+
strategy.write( stream,
object );
@@ -309,14 +310,15 @@
context.out.println( "InitialFact LeftTuples Start" );
InternalFactHandle handle = context.wm.getInitialFactHandle();
for ( LeftTuple leftTuple = getLeftTuple( handle.getLeftTuple() ); leftTuple != null; leftTuple = (LeftTuple) leftTuple.getLeftParentPrevious() ) {
- stream.writeInt( PersisterEnums.LEFT_TUPLE );
+ stream.writeShort( PersisterEnums.LEFT_TUPLE );
stream.writeInt( leftTuple.getLeftTupleSink().getId() );
context.out.println( "LeftTuple int:" + leftTuple.getLeftTupleSink().getId() );
writeLeftTuple( leftTuple,
- context );
+ context,
+ true );
}
- stream.writeInt( PersisterEnums.END );
+ stream.writeShort( PersisterEnums.END );
context.out.println( "InitialFact LeftTuples End" );
}
@@ -330,11 +332,11 @@
rightTuple = tempRightTuple;
}
for ( ; rightTuple != null; rightTuple = (RightTuple) rightTuple.getHandlePrevious() ) {
- stream.writeInt( PersisterEnums.RIGHT_TUPLE );
+ stream.writeShort( PersisterEnums.RIGHT_TUPLE );
writeRightTuple( rightTuple,
context );
}
- stream.writeInt( PersisterEnums.END );
+ stream.writeShort( PersisterEnums.END );
context.out.println( "RightTuples END" );
}
@@ -346,6 +348,11 @@
context.out.println( "RightTuple int:" + rightTuple.getRightTupleSink().getId() );
}
+ public void xxx(RightTuple rightTuple,
+ MarshallerWriteContext context) {
+
+ }
+
public static void writeLeftTuples(MarshallerWriteContext context) throws IOException {
ObjectOutputStream stream = context.stream;
InternalWorkingMemory wm = context.wm;
@@ -356,87 +363,103 @@
//InternalFactHandle handle = (InternalFactHandle) it.next();
for ( LeftTuple leftTuple = getLeftTuple( handle.getLeftTuple() ); leftTuple != null; leftTuple = (LeftTuple) leftTuple.getLeftParentPrevious() ) {
- stream.writeInt( PersisterEnums.LEFT_TUPLE );
+ stream.writeShort( PersisterEnums.LEFT_TUPLE );
stream.writeInt( leftTuple.getLeftTupleSink().getId() );
stream.writeInt( handle.getId() );
context.out.println( "LeftTuple int:" + leftTuple.getLeftTupleSink().getId() + " int:" + handle.getId() );
writeLeftTuple( leftTuple,
- context );
+ context,
+ true );
}
}
- stream.writeInt( PersisterEnums.END );
+ stream.writeShort( PersisterEnums.END );
context.out.println( "LeftTuples End" );
}
public static void writeLeftTuple(LeftTuple leftTuple,
- MarshallerWriteContext context) throws IOException {
+ MarshallerWriteContext context,
+ boolean recurse) throws IOException {
ObjectOutputStream stream = context.stream;
InternalRuleBase ruleBase = context.ruleBase;
InternalWorkingMemory wm = context.wm;
LeftTupleSink sink = leftTuple.getLeftTupleSink();
- if ( sink instanceof JoinNode ) {
- context.out.println( "JoinNode" );
-
- for ( LeftTuple childLeftTuple = getLeftTuple( leftTuple.getBetaChildren() ); childLeftTuple != null; childLeftTuple = (LeftTuple) childLeftTuple.getLeftParentPrevious() ) {
- stream.writeInt( PersisterEnums.RIGHT_TUPLE );
- stream.writeInt( childLeftTuple.getLeftTupleSink().getId() );
- stream.writeInt( childLeftTuple.getRightParent().getFactHandle().getId() );
- context.out.println( "RightTuple int:" + childLeftTuple.getLeftTupleSink().getId() + " int:" + childLeftTuple.getRightParent().getFactHandle().getId() );
- writeLeftTuple( childLeftTuple,
- context );
- }
- stream.writeInt( PersisterEnums.END );
- } else if ( sink instanceof EvalConditionNode ) {
- context.out.println( "EvalConditionNode" );
- for ( LeftTuple childLeftTuple = getLeftTuple( leftTuple.getBetaChildren() ); childLeftTuple != null; childLeftTuple = (LeftTuple) childLeftTuple.getLeftParentPrevious() ) {
- stream.writeInt( PersisterEnums.LEFT_TUPLE );
- stream.writeInt( childLeftTuple.getLeftTupleSink().getId() );
- writeLeftTuple( childLeftTuple,
- context );
- }
- stream.writeInt( PersisterEnums.END );
- } else if ( sink instanceof NotNode ) {
- if ( leftTuple.getBlocker() == null ) {
- // is not blocked so has children
- stream.writeInt( PersisterEnums.LEFT_TUPLE_NOT_BLOCKED );
-
- for ( LeftTuple childLeftTuple = getLeftTuple( leftTuple.getBetaChildren() ); childLeftTuple != null; childLeftTuple = (LeftTuple) leftTuple.getLeftParentPrevious() ) {
- stream.writeInt( PersisterEnums.LEFT_TUPLE );
+ switch ( sink.getType() ) {
+ case NodeTypeEnums.JoinNode : {
+ context.out.println( "JoinNode" );
+ for ( LeftTuple childLeftTuple = getLeftTuple( leftTuple.getBetaChildren() ); childLeftTuple != null; childLeftTuple = (LeftTuple) childLeftTuple.getLeftParentPrevious() ) {
+ stream.writeShort( PersisterEnums.RIGHT_TUPLE );
stream.writeInt( childLeftTuple.getLeftTupleSink().getId() );
+ stream.writeInt( childLeftTuple.getRightParent().getFactHandle().getId() );
+ context.out.println( "RightTuple int:" + childLeftTuple.getLeftTupleSink().getId() + " int:" + childLeftTuple.getRightParent().getFactHandle().getId() );
writeLeftTuple( childLeftTuple,
- context );
+ context,
+ recurse );
}
- stream.writeInt( PersisterEnums.END );
-
- } else {
- stream.writeInt( PersisterEnums.LEFT_TUPLE_BLOCKED );
- stream.writeInt( leftTuple.getBlocker().getFactHandle().getId() );
+ stream.writeShort( PersisterEnums.END );
+ break;
}
- } else if ( sink instanceof ExistsNode ) {
- if ( leftTuple.getBlocker() == null ) {
- // is blocked so has children
- stream.writeInt( PersisterEnums.LEFT_TUPLE_NOT_BLOCKED );
- } else {
- stream.writeInt( PersisterEnums.LEFT_TUPLE_BLOCKED );
- stream.writeInt( leftTuple.getBlocker().getFactHandle().getId() );
-
- for ( LeftTuple childLeftTuple = getLeftTuple( leftTuple.getBetaChildren() ); childLeftTuple != null; childLeftTuple = (LeftTuple) leftTuple.getLeftParentPrevious() ) {
- stream.writeInt( PersisterEnums.LEFT_TUPLE );
+ case NodeTypeEnums.EvalConditionNode : {
+ context.out.println( "EvalConditionNode" );
+ for ( LeftTuple childLeftTuple = getLeftTuple( leftTuple.getBetaChildren() ); childLeftTuple != null; childLeftTuple = (LeftTuple) childLeftTuple.getLeftParentPrevious() ) {
+ stream.writeShort( PersisterEnums.LEFT_TUPLE );
stream.writeInt( childLeftTuple.getLeftTupleSink().getId() );
writeLeftTuple( childLeftTuple,
- context );
+ context,
+ recurse );
}
- stream.writeInt( PersisterEnums.END );
+ stream.writeShort( PersisterEnums.END );
+ break;
}
- } else if ( sink instanceof RuleTerminalNode ) {
- context.out.println( "RuleTerminalNode" );
- int pos = context.terminalTupleMap.size();
- context.terminalTupleMap.put( leftTuple,
- pos );
+ case NodeTypeEnums.NotNode : {
+ if ( leftTuple.getBlocker() == null ) {
+ // is not blocked so has children
+ stream.writeShort( PersisterEnums.LEFT_TUPLE_NOT_BLOCKED );
+
+ for ( LeftTuple childLeftTuple = getLeftTuple( leftTuple.getBetaChildren() ); childLeftTuple != null; childLeftTuple = (LeftTuple) leftTuple.getLeftParentPrevious() ) {
+ stream.writeShort( PersisterEnums.LEFT_TUPLE );
+ stream.writeInt( childLeftTuple.getLeftTupleSink().getId() );
+ writeLeftTuple( childLeftTuple,
+ context,
+ recurse );
+ }
+ stream.writeShort( PersisterEnums.END );
+
+ } else {
+ stream.writeShort( PersisterEnums.LEFT_TUPLE_BLOCKED );
+ stream.writeInt( leftTuple.getBlocker().getFactHandle().getId() );
+ }
+ break;
+ }
+ case NodeTypeEnums.ExistsNode : {
+ if ( leftTuple.getBlocker() == null ) {
+ // is blocked so has children
+ stream.writeShort( PersisterEnums.LEFT_TUPLE_NOT_BLOCKED );
+ } else {
+ stream.writeShort( PersisterEnums.LEFT_TUPLE_BLOCKED );
+ stream.writeInt( leftTuple.getBlocker().getFactHandle().getId() );
+
+ for ( LeftTuple childLeftTuple = getLeftTuple( leftTuple.getBetaChildren() ); childLeftTuple != null; childLeftTuple = (LeftTuple) leftTuple.getLeftParentPrevious() ) {
+ stream.writeShort( PersisterEnums.LEFT_TUPLE );
+ stream.writeInt( childLeftTuple.getLeftTupleSink().getId() );
+ writeLeftTuple( childLeftTuple,
+ context,
+ recurse );
+ }
+ stream.writeShort( PersisterEnums.END );
+ }
+ break;
+ }
+ case NodeTypeEnums.RuleTerminalNode : {
+ context.out.println( "RuleTerminalNode" );
+ int pos = context.terminalTupleMap.size();
+ context.terminalTupleMap.put( leftTuple,
+ pos );
+ break;
+ }
}
}
@@ -449,28 +472,30 @@
public static void writeActivations(MarshallerWriteContext context) throws IOException {
ObjectOutputStream stream = context.stream;
-
- Entry<LeftTuple, Integer>[] entries = context.terminalTupleMap.entrySet().toArray( new Entry[ context.terminalTupleMap.size() ] );
- Arrays.sort( entries, TupleSorter.instance );
-
+
+ Entry<LeftTuple, Integer>[] entries = context.terminalTupleMap.entrySet().toArray( new Entry[context.terminalTupleMap.size()] );
+ Arrays.sort( entries,
+ TupleSorter.instance );
+
//Map<LeftTuple, Integer> tuples = context.terminalTupleMap;
if ( entries.length != 0 ) {
for ( Entry<LeftTuple, Integer> entry : entries ) {
LeftTuple leftTuple = entry.getKey();
- stream.writeInt( PersisterEnums.ACTIVATION );
+ stream.writeShort( PersisterEnums.ACTIVATION );
writeActivation( context,
leftTuple,
(AgendaItem) leftTuple.getActivation(),
(RuleTerminalNode) leftTuple.getLeftTupleSink() );
}
}
- stream.writeInt( PersisterEnums.END );
+ stream.writeShort( PersisterEnums.END );
}
public static class TupleSorter
implements
Comparator<Entry<LeftTuple, Integer>> {
public static final TupleSorter instance = new TupleSorter();
+
public int compare(Entry<LeftTuple, Integer> e1,
Entry<LeftTuple, Integer> e2) {
return e1.getValue() - e2.getValue();
@@ -514,28 +539,29 @@
org.drools.util.LinkedList list = agendaItem.getLogicalDependencies();
if ( list != null && !list.isEmpty() ) {
for ( LogicalDependency node = (LogicalDependency) list.getFirst(); node != null; node = (LogicalDependency) node.getNext() ) {
- stream.writeInt( PersisterEnums.LOGICAL_DEPENDENCY );
+ stream.writeShort( PersisterEnums.LOGICAL_DEPENDENCY );
stream.writeInt( ((InternalFactHandle) node.getFactHandle()).getId() );
context.out.println( "Logical Depenency : int " + ((InternalFactHandle) node.getFactHandle()).getId() );
}
}
- stream.writeInt( PersisterEnums.END );
+ stream.writeShort( PersisterEnums.END );
}
public static void writePropagationContexts(MarshallerWriteContext context) throws IOException {
ObjectOutputStream stream = context.stream;
- Entry<LeftTuple, Integer>[] entries = context.terminalTupleMap.entrySet().toArray( new Entry[ context.terminalTupleMap.size() ] );
- Arrays.sort( entries, TupleSorter.instance );
-
+ Entry<LeftTuple, Integer>[] entries = context.terminalTupleMap.entrySet().toArray( new Entry[context.terminalTupleMap.size()] );
+ Arrays.sort( entries,
+ TupleSorter.instance );
+
//Map<LeftTuple, Integer> tuples = context.terminalTupleMap;
if ( entries.length != 0 ) {
Map<Long, PropagationContext> pcMap = new HashMap<Long, PropagationContext>();
- for ( Entry<LeftTuple, Integer> entry : entries ) {
+ for ( Entry<LeftTuple, Integer> entry : entries ) {
LeftTuple leftTuple = entry.getKey();
PropagationContext pc = leftTuple.getActivation().getPropagationContext();
if ( !pcMap.containsKey( pc.getPropagationNumber() ) ) {
- stream.writeInt( PersisterEnums.PROPAGATION_CONTEXT );
+ stream.writeShort( PersisterEnums.PROPAGATION_CONTEXT );
writePropagationContext( context,
pc );
pcMap.put( pc.getPropagationNumber(),
@@ -544,7 +570,7 @@
}
}
- stream.writeInt( PersisterEnums.END );
+ stream.writeShort( PersisterEnums.END );
}
public static void writePropagationContext(MarshallerWriteContext context,
@@ -588,66 +614,66 @@
ObjectOutputStream stream = context.stream;
Collection<ProcessInstance> processInstances = context.wm.getProcessInstances();
- for (ProcessInstance processInstance: processInstances) {
- stream.writeInt( PersisterEnums.PROCESS_INSTANCE );
- writeProcessInstance( context, (RuleFlowProcessInstance) processInstance );
+ for ( ProcessInstance processInstance : processInstances ) {
+ stream.writeShort( PersisterEnums.PROCESS_INSTANCE );
+ writeProcessInstance( context,
+ (RuleFlowProcessInstance) processInstance );
}
- stream.writeInt( PersisterEnums.END );
+ stream.writeShort( PersisterEnums.END );
}
-
+
public static void writeProcessInstance(MarshallerWriteContext context,
RuleFlowProcessInstance processInstance) throws IOException {
ObjectOutputStream stream = context.stream;
- stream.writeLong(processInstance.getId());
- stream.writeUTF(processInstance.getProcessId());
- stream.writeInt(processInstance.getState());
- stream.writeLong(processInstance.getNodeInstanceCounter());
-
- VariableScopeInstance variableScopeInstance = (VariableScopeInstance)
- processInstance.getContextInstance(VariableScope.VARIABLE_SCOPE);
+ stream.writeLong( processInstance.getId() );
+ stream.writeUTF( processInstance.getProcessId() );
+ stream.writeInt( processInstance.getState() );
+ stream.writeLong( processInstance.getNodeInstanceCounter() );
+
+ VariableScopeInstance variableScopeInstance = (VariableScopeInstance) processInstance.getContextInstance( VariableScope.VARIABLE_SCOPE );
Map<String, Object> variables = variableScopeInstance.getVariables();
- stream.writeInt(variables.size());
- for (Map.Entry<String, Object> entry: variables.entrySet()) {
- stream.writeUTF(entry.getKey());
- stream.writeObject(entry.getValue());
+ stream.writeInt( variables.size() );
+ for ( Map.Entry<String, Object> entry : variables.entrySet() ) {
+ stream.writeUTF( entry.getKey() );
+ stream.writeObject( entry.getValue() );
}
-
- for (NodeInstance nodeInstance: processInstance.getNodeInstances()) {
- stream.writeInt( PersisterEnums.NODE_INSTANCE );
- writeNodeInstance( context, nodeInstance );
+
+ for ( NodeInstance nodeInstance : processInstance.getNodeInstances() ) {
+ stream.writeShort( PersisterEnums.NODE_INSTANCE );
+ writeNodeInstance( context,
+ nodeInstance );
}
- stream.writeInt( PersisterEnums.END );
+ stream.writeShort( PersisterEnums.END );
}
-
+
public static void writeNodeInstance(MarshallerWriteContext context,
NodeInstance nodeInstance) throws IOException {
ObjectOutputStream stream = context.stream;
- stream.writeLong(nodeInstance.getId());
- stream.writeLong(nodeInstance.getNodeId());
- if (nodeInstance instanceof RuleSetNodeInstance) {
- stream.writeInt(PersisterEnums.RULE_SET_NODE_INSTANCE);
- } else if (nodeInstance instanceof WorkItemNodeInstance) {
- stream.writeInt(PersisterEnums.WORK_ITEM_NODE_INSTANCE);
- stream.writeLong(((WorkItemNodeInstance) nodeInstance).getWorkItem().getId());
- } else if (nodeInstance instanceof SubProcessNodeInstance) {
- stream.writeInt(PersisterEnums.SUB_PROCESS_NODE_INSTANCE);
- stream.writeLong(((SubProcessNodeInstance) nodeInstance).getProcessInstanceId());
- } else if (nodeInstance instanceof MilestoneNodeInstance) {
- stream.writeInt(PersisterEnums.MILESTONE_NODE_INSTANCE);
- } else if (nodeInstance instanceof TimerNodeInstance) {
- stream.writeInt(PersisterEnums.TIMER_NODE_INSTANCE);
- stream.writeLong(((TimerNodeInstance) nodeInstance).getTimerId());
- } else if (nodeInstance instanceof JoinInstance) {
- stream.writeInt(PersisterEnums.JOIN_NODE_INSTANCE);
+ stream.writeLong( nodeInstance.getId() );
+ stream.writeLong( nodeInstance.getNodeId() );
+ if ( nodeInstance instanceof RuleSetNodeInstance ) {
+ stream.writeShort( PersisterEnums.RULE_SET_NODE_INSTANCE );
+ } else if ( nodeInstance instanceof WorkItemNodeInstance ) {
+ stream.writeShort( PersisterEnums.WORK_ITEM_NODE_INSTANCE );
+ stream.writeLong( ((WorkItemNodeInstance) nodeInstance).getWorkItem().getId() );
+ } else if ( nodeInstance instanceof SubProcessNodeInstance ) {
+ stream.writeShort( PersisterEnums.SUB_PROCESS_NODE_INSTANCE );
+ stream.writeLong( ((SubProcessNodeInstance) nodeInstance).getProcessInstanceId() );
+ } else if ( nodeInstance instanceof MilestoneNodeInstance ) {
+ stream.writeShort( PersisterEnums.MILESTONE_NODE_INSTANCE );
+ } else if ( nodeInstance instanceof TimerNodeInstance ) {
+ stream.writeShort( PersisterEnums.TIMER_NODE_INSTANCE );
+ stream.writeLong( ((TimerNodeInstance) nodeInstance).getTimerId() );
+ } else if ( nodeInstance instanceof JoinInstance ) {
+ stream.writeShort( PersisterEnums.JOIN_NODE_INSTANCE );
Map<Long, Integer> triggers = ((JoinInstance) nodeInstance).getTriggers();
- stream.writeInt(triggers.size());
- for (Map.Entry<Long, Integer> entry: triggers.entrySet()) {
- stream.writeLong(entry.getKey());
- stream.writeInt(entry.getValue());
+ stream.writeInt( triggers.size() );
+ for ( Map.Entry<Long, Integer> entry : triggers.entrySet() ) {
+ stream.writeLong( entry.getKey() );
+ stream.writeInt( entry.getValue() );
}
} else {
- throw new IllegalArgumentException(
- "Unknown node instance type: " + nodeInstance);
+ throw new IllegalArgumentException( "Unknown node instance type: " + nodeInstance );
}
}
@@ -655,20 +681,21 @@
ObjectOutputStream stream = context.stream;
Set<WorkItem> workItems = context.wm.getWorkItemManager().getWorkItems();
- for (WorkItem workItem: workItems) {
- stream.writeInt( PersisterEnums.WORK_ITEM );
- writeWorkItem( context, workItem );
+ for ( WorkItem workItem : workItems ) {
+ stream.writeShort( PersisterEnums.WORK_ITEM );
+ writeWorkItem( context,
+ workItem );
}
- stream.writeInt( PersisterEnums.END );
+ stream.writeShort( PersisterEnums.END );
}
-
+
public static void writeWorkItem(MarshallerWriteContext context,
WorkItem workItem) throws IOException {
ObjectOutputStream stream = context.stream;
- stream.writeLong(workItem.getId());
- stream.writeLong(workItem.getProcessInstanceId());
- stream.writeUTF(workItem.getName());
- stream.writeInt(workItem.getState());
+ stream.writeLong( workItem.getId() );
+ stream.writeLong( workItem.getProcessInstanceId() );
+ stream.writeUTF( workItem.getName() );
+ stream.writeInt( workItem.getState() );
}
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/PersisterEnums.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/PersisterEnums.java 2008-05-24 05:06:41 UTC (rev 20150)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/PersisterEnums.java 2008-05-24 05:07:32 UTC (rev 20151)
@@ -1,39 +1,39 @@
package org.drools.marshalling;
public class PersisterEnums {
- public static final int REPEAT = 0;
- public static final int END = 1;
- public static final int FACT_HANDLE = 2;
- public static final int LEFT_TUPLE = 3;
- public static final int RIGHT_TUPLE = 4;
+ public static final short REPEAT = 0;
+ public static final short END = 1;
+ public static final short FACT_HANDLE = 2;
+ public static final short LEFT_TUPLE = 3;
+ public static final short RIGHT_TUPLE = 4;
- public static final int INITIAL_FACT_NODE = 5;
+ public static final short INITIAL_FACT_NODE = 5;
- public static final int LEFT_TUPLE_BLOCKED = 6;
- public static final int LEFT_TUPLE_NOT_BLOCKED = 7;
+ public static final short LEFT_TUPLE_BLOCKED = 6;
+ public static final short LEFT_TUPLE_NOT_BLOCKED = 7;
- public static final int ACTIVATION = 8;
- public static final int PROPAGATION_CONTEXT = 9;
+ public static final short ACTIVATION = 8;
+ public static final short PROPAGATION_CONTEXT = 9;
- public static final int WORKING_MEMORY_ACTION = 10;
+ public static final short WORKING_MEMORY_ACTION = 10;
- public static final int EQUALITY_KEY = 11;
- public static final int LOGICAL_DEPENDENCY = 12;
+ public static final short EQUALITY_KEY = 11;
+ public static final short LOGICAL_DEPENDENCY = 12;
- public static final int AGENDA_GROUP = 13;
- public static final int ACTIVATION_GROUP = 14;
+ public static final short AGENDA_GROUP = 13;
+ public static final short ACTIVATION_GROUP = 14;
- public static final int RULE_FLOW_GROUP = 15;
- public static final int RULE_FLOW_NODE = 16;
+ public static final short RULE_FLOW_GROUP = 15;
+ public static final short RULE_FLOW_NODE = 16;
- public static final int PROCESS_INSTANCE = 17;
- public static final int NODE_INSTANCE = 18;
- public static final int WORK_ITEM = 19;
- public static final int RULE_SET_NODE_INSTANCE = 20;
- public static final int WORK_ITEM_NODE_INSTANCE = 21;
- public static final int SUB_PROCESS_NODE_INSTANCE = 22;
- public static final int MILESTONE_NODE_INSTANCE = 23;
- public static final int TIMER_NODE_INSTANCE = 24;
- public static final int JOIN_NODE_INSTANCE = 25;
+ public static final short PROCESS_INSTANCE = 17;
+ public static final short NODE_INSTANCE = 18;
+ public static final short WORK_ITEM = 19;
+ public static final short RULE_SET_NODE_INSTANCE = 20;
+ public static final short WORK_ITEM_NODE_INSTANCE = 21;
+ public static final short SUB_PROCESS_NODE_INSTANCE = 22;
+ public static final short MILESTONE_NODE_INSTANCE = 23;
+ public static final short TIMER_NODE_INSTANCE = 24;
+ public static final short JOIN_NODE_INSTANCE = 25;
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/AccumulateNode.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/AccumulateNode.java 2008-05-24 05:06:41 UTC (rev 20150)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/AccumulateNode.java 2008-05-24 05:07:32 UTC (rev 20151)
@@ -48,9 +48,9 @@
* @version $Id$
*/
public class AccumulateNode extends BetaNode {
+
+ private static final long serialVersionUID = 400L;
- private static final long serialVersionUID = 400L;
-
private boolean unwrapRightObject;
private Accumulate accumulate;
private AlphaNodeFieldConstraint[] resultConstraints;
@@ -593,6 +593,10 @@
memory.behaviorContext = this.behavior.createBehaviorContext();
return memory;
}
+
+ public short getType() {
+ return NodeTypeEnums.AccumulateNode;
+ }
public static class AccumulateMemory
implements
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/AlphaNetworkCompiler.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/AlphaNetworkCompiler.java 2008-05-24 05:06:41 UTC (rev 20150)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/AlphaNetworkCompiler.java 2008-05-24 05:07:32 UTC (rev 20151)
@@ -14,7 +14,7 @@
public void compile(ObjectTypeNode objectTypeNode) {
builder = new StringBuilder();
- builder.append( "public class Compiled" + objectTypeNode.getObjectType() + "AlphaNetwork implements RightTupleSink { \n" );
+ builder.append( "public class Compiled" + objectTypeNode.getObjectType() + "AlphaNetwork implements ObjectSink { \n" );
createVars( objectTypeNode.getSinkPropagator().getSinks(), 4 );
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/BetaNode.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/BetaNode.java 2008-05-24 05:06:41 UTC (rev 20150)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/BetaNode.java 2008-05-24 05:07:32 UTC (rev 20151)
@@ -59,7 +59,7 @@
// ------------------------------------------------------------
// Instance members
- // ------------------------------------------------------------
+ // ------------------------------------------------------------
/** The left input <code>TupleSource</code>. */
protected LeftTupleSource leftInput;
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/CollectNode.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/CollectNode.java 2008-05-24 05:06:41 UTC (rev 20150)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/CollectNode.java 2008-05-24 05:07:32 UTC (rev 20151)
@@ -46,8 +46,7 @@
public class CollectNode extends BetaNode
implements
LeftTupleSink,
- ObjectSink {
-
+ ObjectSink {
private static final long serialVersionUID = 400L;
private Collect collect;
@@ -505,6 +504,10 @@
}
return memory;
}
+
+ public short getType() {
+ return NodeTypeEnums.CollectNode;
+ }
public static class CollectMemory
implements
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/EvalConditionNode.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/EvalConditionNode.java 2008-05-24 05:06:41 UTC (rev 20150)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/EvalConditionNode.java 2008-05-24 05:07:32 UTC (rev 20151)
@@ -54,11 +54,11 @@
// ------------------------------------------------------------
// Instance members
// ------------------------------------------------------------
-
+
/**
- *
- */
- private static final long serialVersionUID = 400L;
+ *
+ */
+ private static final long serialVersionUID = 400L;
/** The semantic <code>Test</code>. */
private EvalCondition condition;
@@ -323,6 +323,10 @@
public void setPreviousLeftTupleSinkNode(final LeftTupleSinkNode previous) {
this.previousTupleSinkNode = previous;
}
+
+ public short getType() {
+ return NodeTypeEnums.EvalConditionNode;
+ }
public static class EvalMemory
implements
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ExistsNode.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ExistsNode.java 2008-05-24 05:06:41 UTC (rev 20150)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ExistsNode.java 2008-05-24 05:07:32 UTC (rev 20151)
@@ -41,9 +41,9 @@
*
*/
public class ExistsNode extends BetaNode {
+
+ private static final long serialVersionUID = 400L;
- private static final long serialVersionUID = 400L;
-
static int notAssertObject = 0;
static int notAssertTuple = 0;
@@ -380,5 +380,9 @@
return "[ExistsNode - " + ((ObjectTypeNode) source).getObjectType() + "]";
}
+
+ public short getType() {
+ return NodeTypeEnums.ExistsNode;
+ }
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/FromNode.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/FromNode.java 2008-05-24 05:06:41 UTC (rev 20150)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/FromNode.java 2008-05-24 05:07:32 UTC (rev 20151)
@@ -28,6 +28,7 @@
*
*/
private static final long serialVersionUID = 400L;
+
private DataProvider dataProvider;
private LeftTupleSource tupleSource;
@@ -299,6 +300,10 @@
public void setPreviousLeftTupleSinkNode(final LeftTupleSinkNode previous) {
this.previousTupleSinkNode = previous;
}
+
+ public short getType() {
+ return NodeTypeEnums.FromNode;
+ }
public static class FromMemory
implements
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/JoinNode.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/JoinNode.java 2008-05-24 05:06:41 UTC (rev 20150)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/JoinNode.java 2008-05-24 05:07:32 UTC (rev 20151)
@@ -53,12 +53,12 @@
public class JoinNode extends BetaNode {
// ------------------------------------------------------------
// Instance methods
- // ------------------------------------------------------------
+ // ------------------------------------------------------------
/**
*
*/
- private static final long serialVersionUID = 400L;
+ private static final long serialVersionUID = 400L;
public JoinNode() {
@@ -158,15 +158,18 @@
this.constraints.updateFromFactHandle( memory.getContext(),
workingMemory,
factHandle );
+ int i = 0;
for ( LeftTuple leftTuple = memory.getLeftTupleMemory().getFirst( rightTuple ); leftTuple != null; leftTuple = (LeftTuple) leftTuple.getNext() ) {
if ( this.constraints.isAllowedCachedRight( memory.getContext(),
leftTuple ) ) {
+ // wm.marshaller.write( i, leftTuple )
this.sink.propagateAssertLeftTuple( leftTuple,
rightTuple,
context,
workingMemory,
this.tupleMemoryEnabled );
}
+ i++;
}
this.constraints.resetFactHandle( memory.getContext() );
}
@@ -248,6 +251,10 @@
this.constraints.resetTuple( memory.getContext() );
}
}
+
+ public short getType() {
+ return NodeTypeEnums.JoinNode;
+ }
public String toString() {
ObjectSource source = this.rightInput;
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/LeftTupleSink.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/LeftTupleSink.java 2008-05-24 05:06:41 UTC (rev 20150)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/LeftTupleSink.java 2008-05-24 05:07:32 UTC (rev 20151)
@@ -36,6 +36,8 @@
Externalizable,
Sink {
+ public short getType();
+
/**
* Assert a new <code>ReteTuple</code>.
*
Added: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/NodeTypeEnums.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/NodeTypeEnums.java (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/NodeTypeEnums.java 2008-05-24 05:07:32 UTC (rev 20151)
@@ -0,0 +1,14 @@
+package org.drools.reteoo;
+
+public class NodeTypeEnums {
+ public static final short JoinNode = 0;
+ public static final short NotNode = 1;
+ public static final short ExistsNode = 2;
+ public static final short EvalConditionNode = 3;
+ public static final short FromNode = 4;
+ public static final short CollectNode = 5;
+ public static final short AccumulateNode = 6;
+ public static final short RightInputAdaterNode = 7;
+ public static final short QueryTerminalNode = 8;
+ public static final short RuleTerminalNode = 9;
+}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/NotNode.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/NotNode.java 2008-05-24 05:06:41 UTC (rev 20150)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/NotNode.java 2008-05-24 05:07:32 UTC (rev 20151)
@@ -44,8 +44,8 @@
*
*/
public class NotNode extends BetaNode {
+ private static final long serialVersionUID = 400L;
- private static final long serialVersionUID = 400L;
static int notAssertObject = 0;
static int notAssertTuple = 0;
@@ -287,6 +287,10 @@
workingMemory );
}
}
+
+ public short getType() {
+ return NodeTypeEnums.NotNode;
+ }
public String toString() {
ObjectSource source = this.rightInput;
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/QueryTerminalNode.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/QueryTerminalNode.java 2008-05-24 05:06:41 UTC (rev 20150)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/QueryTerminalNode.java 2008-05-24 05:07:32 UTC (rev 20151)
@@ -51,6 +51,9 @@
*
*/
private static final long serialVersionUID = 400L;
+
+ public static final short type = 8;
+
/** The rule to invoke upon match. */
private Rule rule;
private GroupElement subrule;
@@ -259,5 +262,9 @@
public void setNextLeftTupleSinkNode(final LeftTupleSinkNode next) {
this.nextTupleSinkNode = next;
}
+
+ public short getType() {
+ return NodeTypeEnums.QueryTerminalNode;
+ }
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/RightInputAdapterNode.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/RightInputAdapterNode.java 2008-05-24 05:06:41 UTC (rev 20150)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/RightInputAdapterNode.java 2008-05-24 05:07:32 UTC (rev 20151)
@@ -48,7 +48,7 @@
LeftTupleSinkNode,
NodeMemory {
- private static final long serialVersionUID = 400L;
+ private static final long serialVersionUID = 400L;
private LeftTupleSource tupleSource;
@@ -282,6 +282,10 @@
public void setPreviousLeftTupleSinkNode(final LeftTupleSinkNode previous) {
this.previousTupleSinkNode = previous;
}
+
+ public short getType() {
+ return NodeTypeEnums.RightInputAdaterNode;
+ }
public int hashCode() {
return this.tupleSource.hashCode() * 17 + ((this.tupleMemoryEnabled) ? 1234 : 4321);
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/RuleTerminalNode.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/RuleTerminalNode.java 2008-05-24 05:06:41 UTC (rev 20150)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/RuleTerminalNode.java 2008-05-24 05:07:32 UTC (rev 20151)
@@ -72,6 +72,7 @@
*
*/
private static final long serialVersionUID = 400L;
+
/** The rule to invoke upon match. */
private Rule rule;
/**
@@ -576,6 +577,10 @@
final RuleTerminalNode other = (RuleTerminalNode) object;
return this.rule.equals( other.rule );
}
+
+ public short getType() {
+ return NodeTypeEnums.RuleTerminalNode;
+ }
public static class TerminalNodeMemory
implements
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/Sink.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/Sink.java 2008-05-24 05:06:41 UTC (rev 20150)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/Sink.java 2008-05-24 05:07:32 UTC (rev 20151)
@@ -5,6 +5,6 @@
*
* @author etirelli
*/
-public interface Sink {
+public interface Sink {
public int getId();
}
\ No newline at end of file
Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/CompositeObjectSinkAdapterTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/CompositeObjectSinkAdapterTest.java 2008-05-24 05:06:41 UTC (rev 20150)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/CompositeObjectSinkAdapterTest.java 2008-05-24 05:07:32 UTC (rev 20151)
@@ -588,5 +588,10 @@
// Auto-generated method stub
}
+
+ public short getType() {
+ // TODO Auto-generated method stub
+ return 0;
+ }
}
}
Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/MockLeftTupleSink.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/MockLeftTupleSink.java 2008-05-24 05:06:41 UTC (rev 20150)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/MockLeftTupleSink.java 2008-05-24 05:07:32 UTC (rev 20151)
@@ -165,4 +165,9 @@
}
+ public short getType() {
+ // TODO Auto-generated method stub
+ return 0;
+ }
+
}
\ No newline at end of file
More information about the jboss-svn-commits
mailing list