[jboss-svn-commits] JBL Code SVN: r9686 - in labs/jbossrules/trunk: drools-core/src/main/java/org/drools/base and 2 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Wed Feb 21 17:57:32 EST 2007
Author: tirelli
Date: 2007-02-21 17:57:32 -0500 (Wed, 21 Feb 2007)
New Revision: 9686
Added:
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/ShadowProxyHelper.java
Modified:
labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_LogicalAssertions2.drl
labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_logicalAssertions3.drl
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/ShadowProxyFactory.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/ObjectTypeNode.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/AbstractHashTable.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/FactHandleIndexHashTable.java
Log:
JBRULES-696: I think now it is dead
Modified: labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_LogicalAssertions2.drl
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_LogicalAssertions2.drl 2007-02-21 21:08:53 UTC (rev 9685)
+++ labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_LogicalAssertions2.drl 2007-02-21 22:57:32 UTC (rev 9686)
@@ -10,7 +10,6 @@
when
not Alarm( )
then
- System.out.println("Everything is Normal");
events.add("Everything is Normal");
end
@@ -20,7 +19,6 @@
sensor : Sensor( temperature > 100 ) or Sensor( pressure > 150 )
then
events.add( "Problem detected: "+sensor.toString() );
- System.out.println( "Problem detected: " + sensor.toString() );
assertLogical( new Alarm( "Call emergency team" ) );
end
@@ -29,7 +27,6 @@
Alarm ( )
then
events.add( "Calling Emergency Team" );
- System.out.println( "Calling Emergency Team" );
assertLogical( new EmergencyTeam() );
end
@@ -40,7 +37,6 @@
sensor : Sensor( temperature > 100 )
then
events.add( "Solving temperature problem" );
- System.out.println( "Solving temperature problem" );
sensor.setTemperature(80);
modify(sensor);
end
@@ -52,7 +48,6 @@
sensor : Sensor( pressure > 150 )
then
events.add( "Solving pressure problem" );
- System.out.println( "Solving pressure problem" );
sensor.setPressure(80);
modify(sensor);
end
Modified: labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_logicalAssertions3.drl
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_logicalAssertions3.drl 2007-02-21 21:08:53 UTC (rev 9685)
+++ labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_logicalAssertions3.drl 2007-02-21 22:57:32 UTC (rev 9686)
@@ -7,7 +7,6 @@
$s : Sensor( temperature > 100 )
then
events.add( "It is hot: " + $s );
- System.out.println("It is hot: " + $s);
assertLogical(new Alarm("FIRE"));
end
@@ -16,5 +15,4 @@
Alarm( message == "FIRE" )
then
events.add( "Fire alarm is ON" );
- System.out.println("Fire alarm is ON");
end
\ No newline at end of file
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/ShadowProxyFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/ShadowProxyFactory.java 2007-02-21 21:08:53 UTC (rev 9685)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/ShadowProxyFactory.java 2007-02-21 22:57:32 UTC (rev 9686)
@@ -42,9 +42,9 @@
//private static final String FIELD_NAME_PREFIX = "__";
- private static final String FIELD_SET_FLAG = "IsSet";
+ public static final String FIELD_SET_FLAG = "IsSet";
- private static final String DELEGATE_FIELD_NAME = "delegate";
+ public static final String DELEGATE_FIELD_NAME = "delegate";
public static Class getProxy(final Class clazz) {
try {
Added: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/ShadowProxyHelper.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/ShadowProxyHelper.java (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/ShadowProxyHelper.java 2007-02-21 22:57:32 UTC (rev 9686)
@@ -0,0 +1,60 @@
+/*
+ * Copyright 2006 JBoss Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.drools.base;
+
+import java.lang.reflect.Field;
+
+import org.drools.RuntimeDroolsException;
+
+/**
+ * A helper class with utility methods
+ *
+ * @author etirelli
+ */
+public class ShadowProxyHelper {
+
+ public static void copyState(ShadowProxy from,
+ ShadowProxy to) {
+ Field[] fields = from.getClass().getDeclaredFields();
+ for ( int i = 0; i < fields.length; i++ ) {
+ if ( fields[i].getName().endsWith( ShadowProxyFactory.FIELD_SET_FLAG ) ) {
+ fields[i].setAccessible( true );
+ try {
+ if ( fields[i].getBoolean( from ) ) {
+ String fieldName = fields[i].getName().substring( 0,
+ fields[i].getName().length() - ShadowProxyFactory.FIELD_SET_FLAG.length() );
+ Field flag = to.getClass().getDeclaredField( fields[i].getName() );
+ Field fieldFrom = from.getClass().getDeclaredField( fieldName );
+ Field fieldTo = to.getClass().getDeclaredField( fieldName );
+ flag.setAccessible( true );
+ fieldFrom.setAccessible( true );
+ fieldTo.setAccessible( true );
+
+ // we know it is set
+ flag.setBoolean( to, true );
+ // copy the value from "from" shadow proxy
+ fieldTo.set( to, fieldFrom.get( from ) );
+ }
+ } catch ( Exception e ) {
+ throw new RuntimeDroolsException("Unable to copy state from one shadow proxy to another");
+ }
+
+ }
+ }
+ }
+
+}
Property changes on: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/ShadowProxyHelper.java
___________________________________________________________________
Name: svn:executable
+ *
Name: svn:keywords
+ id author date revision
Name: svn:eol-style
+ native
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 2007-02-21 21:08:53 UTC (rev 9685)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/JoinNode.java 2007-02-21 22:57:32 UTC (rev 9686)
@@ -143,6 +143,7 @@
final PropagationContext context,
final InternalWorkingMemory workingMemory) {
final BetaMemory memory = (BetaMemory) workingMemory.getNodeMemory( this );
+
memory.getFactHandleMemory().add( handle );
final Iterator it = memory.getTupleMemory().iterator(handle);
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ObjectTypeNode.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ObjectTypeNode.java 2007-02-21 21:08:53 UTC (rev 9685)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ObjectTypeNode.java 2007-02-21 22:57:32 UTC (rev 9686)
@@ -19,11 +19,9 @@
import java.io.Serializable;
import org.drools.RuleBaseConfiguration;
-import org.drools.base.ClassObjectType;
import org.drools.base.ShadowProxy;
+import org.drools.base.ShadowProxyHelper;
import org.drools.common.BaseNode;
-import org.drools.common.EmptyBetaConstraints;
-import org.drools.common.InternalAgenda;
import org.drools.common.InternalFactHandle;
import org.drools.common.InternalWorkingMemory;
import org.drools.common.NodeMemory;
@@ -156,8 +154,13 @@
((ShadowProxy) handle.getObject()).updateProxy();
} else {
// replaces the old shadow proxy for a more specialized version of it
- handle.setObject( this.objectType.getShadow( ((ShadowProxy)handle.getObject()).getShadowedObject() ) );
+ ShadowProxy old = (ShadowProxy)handle.getObject();
+ handle.setObject( this.objectType.getShadow( old.getShadowedObject() ) );
handle.setShadowFact( true );
+
+ // we MUST copy state from one proxy to the other as we are in a dynamic rules engine
+ // and new rules with different object types may be added at any moment
+ ShadowProxyHelper.copyState( old, (ShadowProxy)handle.getObject() );
}
}
}
@@ -189,6 +192,7 @@
public void retractObject(final InternalFactHandle handle,
final PropagationContext context,
final InternalWorkingMemory workingMemory) {
+
if (context.getType() == PropagationContext.MODIFICATION && this.skipOnModify && context.getDormantActivations() == 0 ) {
return;
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/AbstractHashTable.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/AbstractHashTable.java 2007-02-21 21:08:53 UTC (rev 9685)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/AbstractHashTable.java 2007-02-21 22:57:32 UTC (rev 9686)
@@ -368,6 +368,10 @@
public boolean equals(final Object object) {
return (object == this) || (this.handle == ((FactEntry) object).handle);
}
+
+ public String toString() {
+ return "FactEntry( handle="+this.handle+" hashcode="+this.hashCode+" next="+this.next+" )";
+ }
}
public static class FieldIndex {
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/FactHandleIndexHashTable.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/FactHandleIndexHashTable.java 2007-02-21 21:08:53 UTC (rev 9685)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/util/FactHandleIndexHashTable.java 2007-02-21 22:57:32 UTC (rev 9686)
@@ -131,7 +131,7 @@
final Object object = handle.getObject();
//this.index.setCachedValue( object );
final int hashCode = this.index.hashCodeOf( object );
-
+
final int index = indexOf( hashCode,
this.table.length );
@@ -336,5 +336,9 @@
final FieldIndexEntry other = (FieldIndexEntry) object;
return this.hashCode == other.hashCode && this.index == other.index;
}
+
+ public String toString() {
+ return "FieldIndexEntry( hashCode="+hashCode+" first="+this.first+" )";
+ }
}
}
\ No newline at end of file
More information about the jboss-svn-commits
mailing list