[jboss-svn-commits] JBL Code SVN: r19232 - labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Tue Mar 25 22:58:06 EDT 2008
Author: mark.proctor at jboss.com
Date: 2008-03-25 22:58:05 -0400 (Tue, 25 Mar 2008)
New Revision: 19232
Modified:
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ClassObjectTypeConf.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/CompositeLeftTupleSinkAdapter.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/LeftTupleSinkPropagator.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/LeftTupleSource.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/SingleLeftTupleSinkAdapter.java
Log:
JBRULES-1520 RightTuple merge for asynchronous Rete propagations
-Fixed FromNode
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ClassObjectTypeConf.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ClassObjectTypeConf.java 2008-03-26 02:02:21 UTC (rev 19231)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ClassObjectTypeConf.java 2008-03-26 02:58:05 UTC (rev 19232)
@@ -278,7 +278,6 @@
proxy.setShadowedObject( fact );
} catch ( final Exception e ) {
- System.out.println( "shadow: " + proxy.getClass() + ":" + fact.getClass() );
throw new RuntimeDroolsException( "Error creating shadow fact for object: " + fact,
e );
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/CompositeLeftTupleSinkAdapter.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/CompositeLeftTupleSinkAdapter.java 2008-03-26 02:02:21 UTC (rev 19231)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/CompositeLeftTupleSinkAdapter.java 2008-03-26 02:58:05 UTC (rev 19232)
@@ -66,6 +66,22 @@
}
leftTuple.setBetaChildren( null );
}
+
+ public void propagateRetractLeftTupleDestroyRightTuple(final LeftTuple leftTuple,
+ final PropagationContext context,
+ final InternalWorkingMemory workingMemory) {
+ LeftTuple child = leftTuple.getBetaChildren();
+ while ( child != null ) {
+ LeftTuple temp = child.getLeftParentNext();
+ child.getSink().retractLeftTuple( child,
+ context,
+ workingMemory );
+ workingMemory.getFactHandleFactory().destroyFactHandle( child.getRightParent().getFactHandle() );
+ child.unlinkFromRightParent();
+ child = temp;
+ }
+ leftTuple.setBetaChildren( null );
+ }
public void propagateRetractRightTuple(final RightTuple rightTuple,
final PropagationContext context,
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-03-26 02:02:21 UTC (rev 19231)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/FromNode.java 2008-03-26 02:58:05 UTC (rev 19232)
@@ -89,7 +89,8 @@
final FromMemory memory = (FromMemory) workingMemory.getNodeMemory( this );
memory.betaMemory.getLeftTupleMemory().add( leftTuple );
- final LinkedList list = new LinkedList();
+ //final LinkedList list = new LinkedList();
+
this.betaConstraints.updateFromTuple( memory.betaMemory.getContext(),
workingMemory,
leftTuple );
@@ -103,6 +104,8 @@
final InternalFactHandle handle = workingMemory.getFactHandleFactory().newFactHandle( object,
false,
workingMemory );
+
+ RightTuple rightTuple = new RightTuple( handle );
boolean isAllowed = true;
if ( this.alphaConstraints != null ) {
@@ -120,10 +123,10 @@
if ( isAllowed && this.betaConstraints.isAllowedCachedLeft( memory.betaMemory.getContext(),
handle ) ) {
- list.add( new LinkedListEntry( handle ) );
+ //list.add( new LinkedListEntry( handle ) );
this.sink.propagateAssertLeftTuple( leftTuple,
- handle,
+ rightTuple,
context,
workingMemory );
} else {
@@ -132,12 +135,6 @@
}
this.betaConstraints.resetTuple( memory.betaMemory.getContext() );
-
- if ( !list.isEmpty() ) {
- memory.betaMemory.getCreatedHandles().put( leftTuple,
- list );
- }
-
}
public void retractLeftTuple(final LeftTuple leftTuple,
@@ -145,24 +142,9 @@
final InternalWorkingMemory workingMemory) {
final FromMemory memory = (FromMemory) workingMemory.getNodeMemory( this );
- final LeftTuple tuple = memory.betaMemory.getLeftTupleMemory().remove( leftTuple );
-
- if ( tuple == null ) {
- return;
- }
-
- final LinkedList list = (LinkedList) memory.betaMemory.getCreatedHandles().remove( tuple );
- // if tuple was propagated
- if ( list != null ) {
- for ( LinkedListEntry entry = (LinkedListEntry) list.getFirst(); entry != null; entry = (LinkedListEntry) entry.getNext() ) {
- final InternalFactHandle handle = (InternalFactHandle) entry.getObject();
- this.sink.propagateRetractLeftTuple( leftTuple,
- handle,
- context,
- workingMemory );
- workingMemory.getFactHandleFactory().destroyFactHandle( handle );
- }
- }
+ memory.betaMemory.getLeftTupleMemory().remove( leftTuple );
+
+ this.sink.propagateRetractLeftTupleDestroyRightTuple( leftTuple, context, workingMemory );
}
public void attach() {
@@ -216,21 +198,22 @@
final InternalWorkingMemory workingMemory) {
final FromMemory memory = (FromMemory) workingMemory.getNodeMemory( this );
-
- final Iterator tupleIter = memory.betaMemory.getLeftTupleMemory().iterator();
- for ( LeftTuple tuple = (LeftTuple) tupleIter.next(); tuple != null; tuple = (LeftTuple) tupleIter.next() ) {
- final LinkedList list = (LinkedList) memory.betaMemory.getCreatedHandles().remove( tuple );
- if ( list == null ) {
- continue;
- }
- for ( LinkedListEntry entry = (LinkedListEntry) list.getFirst(); entry != null; entry = (LinkedListEntry) entry.getNext() ) {
- final InternalFactHandle handle = (InternalFactHandle) entry.getObject();
- this.sink.propagateAssertLeftTuple( tuple,
- handle,
- context,
- workingMemory );
- }
- }
+ // @TODO
+//
+// final Iterator tupleIter = memory.betaMemory.getLeftTupleMemory().iterator();
+// for ( LeftTuple tuple = (LeftTuple) tupleIter.next(); tuple != null; tuple = (LeftTuple) tupleIter.next() ) {
+// final LinkedList list = (LinkedList) memory.betaMemory.getCreatedHandles().remove( tuple );
+// if ( list == null ) {
+// continue;
+// }
+// for ( LinkedListEntry entry = (LinkedListEntry) list.getFirst(); entry != null; entry = (LinkedListEntry) entry.getNext() ) {
+// final InternalFactHandle handle = (InternalFactHandle) entry.getObject();
+// this.sink.propagateAssertLeftTuple( tuple,
+// handle,
+// context,
+// workingMemory );
+// }
+// }
}
public Object createMemory(final RuleBaseConfiguration config) {
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/LeftTupleSinkPropagator.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/LeftTupleSinkPropagator.java 2008-03-26 02:02:21 UTC (rev 19231)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/LeftTupleSinkPropagator.java 2008-03-26 02:58:05 UTC (rev 19232)
@@ -21,6 +21,10 @@
public void propagateRetractLeftTuple(LeftTuple tuple,
PropagationContext context,
InternalWorkingMemory workingMemory);
+
+ public void propagateRetractLeftTupleDestroyRightTuple(LeftTuple tuple,
+ PropagationContext context,
+ InternalWorkingMemory workingMemory);
public void propagateRetractRightTuple(RightTuple tuple,
PropagationContext context,
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/LeftTupleSource.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/LeftTupleSource.java 2008-03-26 02:02:21 UTC (rev 19231)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/LeftTupleSource.java 2008-03-26 02:58:05 UTC (rev 19232)
@@ -69,14 +69,15 @@
// ------------------------------------------------------------
// Instance methods
// ------------------------------------------------------------
- public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
- super.readExternal(in);
- sink = (LeftTupleSinkPropagator)in.readObject();
+ public void readExternal(ObjectInput in) throws IOException,
+ ClassNotFoundException {
+ super.readExternal( in );
+ sink = (LeftTupleSinkPropagator) in.readObject();
}
public void writeExternal(ObjectOutput out) throws IOException {
- super.writeExternal(out);
- out.writeObject(sink);
+ super.writeExternal( out );
+ out.writeObject( sink );
}
/**
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/SingleLeftTupleSinkAdapter.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/SingleLeftTupleSinkAdapter.java 2008-03-26 02:02:21 UTC (rev 19231)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/SingleLeftTupleSinkAdapter.java 2008-03-26 02:58:05 UTC (rev 19232)
@@ -74,6 +74,22 @@
}
leftTuple.setBetaChildren( null );
}
+
+ public void propagateRetractLeftTupleDestroyRightTuple(final LeftTuple leftTuple,
+ final PropagationContext context,
+ final InternalWorkingMemory workingMemory) {
+ LeftTuple child = leftTuple.getBetaChildren();
+ while ( child != null ) {
+ LeftTuple temp = child.getLeftParentNext();
+ child.getSink().retractLeftTuple( child,
+ context,
+ workingMemory );
+ workingMemory.getFactHandleFactory().destroyFactHandle( child.getRightParent().getFactHandle() );
+ child.unlinkFromRightParent();
+ child = temp;
+ }
+ leftTuple.setBetaChildren( null );
+ }
public void propagateRetractRightTuple(final RightTuple rightTuple,
final PropagationContext context,
More information about the jboss-svn-commits
mailing list