[jboss-svn-commits] JBL Code SVN: r32289 - in labs/jbossrules/trunk: drools-compiler/src/test/resources/org/drools/integrationtests and 5 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Mon Mar 29 19:46:35 EDT 2010
Author: tirelli
Date: 2010-03-29 19:46:34 -0400 (Mon, 29 Mar 2010)
New Revision: 32289
Added:
labs/jbossrules/trunk/drools-core/src/main/resources/org/drools/core/util/debug/dump_tuples.mvel
labs/jbossrules/trunk/drools-core/src/main/resources/org/drools/core/util/debug/simpletopten.mvel
Modified:
labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/OutOfMemoryTest.java
labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_MemoryLeak.drl
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AgendaItem.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/DefaultFactHandle.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/DisconnectedFactHandle.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/InternalFactHandle.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/core/util/LeftTupleIndexHashTable.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/core/util/debug/SessionInspector.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/LeftTuple.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/RuleTerminalNode.java
labs/jbossrules/trunk/drools-core/src/main/resources/org/drools/core/util/debug/reports.mvel
Log:
JBRULES-2340: JBRULES-2339: working on fixing memory leak in true modify
Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/OutOfMemoryTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/OutOfMemoryTest.java 2010-03-29 23:44:59 UTC (rev 32288)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/OutOfMemoryTest.java 2010-03-29 23:46:34 UTC (rev 32289)
@@ -16,8 +16,10 @@
* limitations under the License.
*/
+import java.io.FileWriter;
import java.io.InputStreamReader;
import java.util.Collection;
+import java.util.HashMap;
import junit.framework.TestCase;
@@ -36,6 +38,8 @@
import org.drools.builder.KnowledgeBuilderFactory;
import org.drools.builder.ResourceType;
import org.drools.compiler.PackageBuilder;
+import org.drools.core.util.debug.SessionInspector;
+import org.drools.core.util.debug.SessionReporter;
import org.drools.io.ResourceFactory;
import org.drools.rule.Package;
import org.drools.runtime.ObjectFilter;
@@ -105,43 +109,71 @@
public void testMemoryLeak() {
final KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
- kbuilder.add( ResourceFactory.newClassPathResource( "test_memoryLeak.drl", OutOfMemoryTest.class ),
+ kbuilder.add( ResourceFactory.newClassPathResource( "test_memoryLeak.drl",
+ OutOfMemoryTest.class ),
ResourceType.DRL );
- assertFalse( kbuilder.getErrors().toString(), kbuilder.hasErrors() );
-
+ assertFalse( kbuilder.getErrors().toString(),
+ kbuilder.hasErrors() );
+
final KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );
-
+
final StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
-
+
final int pcount = 2;
Person[] persons = new Person[pcount];
FactHandle[] pHandles = new FactHandle[pcount];
- for( int i = 0; i < persons.length; i++ ) {
- persons[i] = new Person( "person"+i );
+ for ( int i = 0; i < persons.length; i++ ) {
+ persons[i] = new Person( "person-0-" + i );
pHandles[i] = ksession.insert( persons[i] );
}
-
- ksession.fireAllRules() ;
- Collection< ? > logicals = getLogicallyInserted( ksession );
- assertEquals( pcount, logicals.size() );
-
- for(int i = 0; i < pcount; i++ ) {
- persons[i].setName( "personA"+i );
- ksession.update( pHandles[i], persons[i] );
+
+ Cheese[] cheeses = new Cheese[pcount];
+ FactHandle[] cHandles = new FactHandle[pcount];
+ for ( int i = 0; i < cheeses.length; i++ ) {
+ cheeses[i] = new Cheese( "cheese-0-" + i );
+ cHandles[i] = ksession.insert( cheeses[i] );
}
-
- ksession.fireAllRules() ;
- logicals = getLogicallyInserted( ksession );
- assertEquals( pcount, logicals.size() );
+
+ ksession.fireAllRules();
+
+ for ( int j = 1; j <= 1; j++ ) {
+ for ( int i = 0; i < pcount; i++ ) {
+ cheeses[i].setType( "cheese-" + j + "-" + i );
+ ksession.update( cHandles[i],
+ cheeses[i] );
+ persons[i].setName( "person-" + j + "-" + i );
+ ksession.update( pHandles[i],
+ persons[i] );
+ }
+ ksession.fireAllRules();
+ System.out.println( "DONE" );
+ }
+
+ SessionInspector inspector = new SessionInspector( ksession );
+ SessionReporter.addNamedTemplate( "dump_tuples",
+ getClass().getResourceAsStream( "/org/drools/core/util/debug/dump_tuples.mvel" ) );
+ String report = SessionReporter.generateReport( "dump_tuples",
+ inspector.getSessionInfo(),
+ new HashMap<String, Object>() );
+ try {
+ FileWriter out = new FileWriter( "tupleDump.txt" );
+ out.write( report );
+ out.close();
+ System.out.println( report );
+ } catch ( Exception e ) {
+ e.printStackTrace();
+ }
+ // logicals = getLogicallyInserted( ksession );
+ // assertEquals( pcount, logicals.size() );
}
private Collection< ? > getLogicallyInserted(final StatefulKnowledgeSession ksession) {
- Collection<?> logicals = ksession.getObjects( new ObjectFilter() {
+ Collection< ? > logicals = ksession.getObjects( new ObjectFilter() {
public boolean accept(Object object) {
return object.getClass().getSimpleName().equals( "PersonName" );
}
- });
+ } );
return logicals;
}
}
\ No newline at end of file
Modified: labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_MemoryLeak.drl
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_MemoryLeak.drl 2010-03-29 23:44:59 UTC (rev 32288)
+++ labs/jbossrules/trunk/drools-compiler/src/test/resources/org/drools/integrationtests/test_MemoryLeak.drl 2010-03-29 23:46:34 UTC (rev 32289)
@@ -4,11 +4,11 @@
name : String @key
end
+
rule "Rule 1"
- when
- $p: Person()
- then
- PersonName pn = new PersonName();
- pn.setName( $p.getName() );
- insertLogical( pn );
+ when
+ // forcing a join
+ $p: Person( )
+ $c: Cheese( )
+ then
end
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AgendaItem.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AgendaItem.java 2010-03-29 23:44:59 UTC (rev 32288)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AgendaItem.java 2010-03-29 23:46:34 UTC (rev 32289)
@@ -321,4 +321,8 @@
}
return Collections.unmodifiableCollection( list );
}
+
+ public String toExternalForm() {
+ return "[ "+this.getRule().getName()+" active="+this.activated+ " ]";
+ }
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/DefaultFactHandle.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/DefaultFactHandle.java 2010-03-29 23:44:59 UTC (rev 32288)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/DefaultFactHandle.java 2010-03-29 23:46:34 UTC (rev 32289)
@@ -16,6 +16,8 @@
* limitations under the License.
*/
+import java.util.Arrays;
+
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAttribute;
@@ -262,4 +264,22 @@
clone.objectHashCode = this.objectHashCode;
return clone;
}
+
+ public String toTupleTree(int indent) {
+ StringBuilder buf = new StringBuilder();
+ char[] spaces = new char[indent];
+ Arrays.fill( spaces, ' ' );
+ String istr = new String( spaces );
+ buf.append( istr );
+ buf.append( this.toExternalString() );
+ buf.append( "\n" );
+ for( LeftTuple leftTuple = this.firstLeftTuple; leftTuple != null; leftTuple = leftTuple.getLeftParentNext() ) {
+ buf.append( leftTuple.toTupleTree( indent+4 ) );
+ }
+ return buf.toString();
+ }
+
+ private Object toExternalString() {
+ return "[F:"+this.getId()+" first="+System.identityHashCode( firstLeftTuple )+" last="+System.identityHashCode( lastLeftTuple )+" ]";
+ }
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/DisconnectedFactHandle.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/DisconnectedFactHandle.java 2010-03-29 23:44:59 UTC (rev 32288)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/DisconnectedFactHandle.java 2010-03-29 23:46:34 UTC (rev 32289)
@@ -170,4 +170,8 @@
throw new UnsupportedOperationException( "DisonnectedFactHandle does not support this method" );
}
+ public String toTupleTree(int indent) {
+ return null;
+ }
+
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/InternalFactHandle.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/InternalFactHandle.java 2010-03-29 23:44:59 UTC (rev 32288)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/InternalFactHandle.java 2010-03-29 23:46:34 UTC (rev 32289)
@@ -79,4 +79,6 @@
public String toExternalForm();
+ public String toTupleTree( int indent );
+
}
\ No newline at end of file
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/core/util/LeftTupleIndexHashTable.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/core/util/LeftTupleIndexHashTable.java 2010-03-29 23:44:59 UTC (rev 32288)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/core/util/LeftTupleIndexHashTable.java 2010-03-29 23:46:34 UTC (rev 32289)
@@ -6,6 +6,7 @@
import java.io.IOException;
import java.io.ObjectInput;
import java.io.ObjectOutput;
+import java.util.Arrays;
import org.drools.reteoo.LeftTuple;
import org.drools.reteoo.LeftTupleMemory;
@@ -359,4 +360,5 @@
return builder.toString();
}
+
}
\ No newline at end of file
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/core/util/debug/SessionInspector.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/core/util/debug/SessionInspector.java 2010-03-29 23:44:59 UTC (rev 32288)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/core/util/debug/SessionInspector.java 2010-03-29 23:46:34 UTC (rev 32289)
@@ -21,6 +21,7 @@
import java.util.Set;
import java.util.Stack;
+import org.drools.WorkingMemory;
import org.drools.common.NetworkNode;
import org.drools.impl.StatefulKnowledgeSessionImpl;
import org.drools.reteoo.AccumulateNode;
@@ -54,23 +55,23 @@
*/
public class SessionInspector {
- private StatefulKnowledgeSession session;
+ private ReteooWorkingMemory session;
private Map<Class< ? extends NetworkNode>, NetworkNodeVisitor> visitors;
- public SessionInspector(StatefulKnowledgeSession session) {
- this.session = session;
+ // default initializer
+ {
this.visitors = new HashMap<Class< ? extends NetworkNode>, NetworkNodeVisitor>();
-
+
// terminal nodes
this.visitors.put( RuleTerminalNode.class,
RuleTerminalNodeVisitor.INSTANCE );
this.visitors.put( QueryTerminalNode.class,
QueryTerminalNodeVisitor.INSTANCE );
-
+
// root node
this.visitors.put( Rete.class,
DefaultNetworkNodeVisitor.INSTANCE );
-
+
// object source nodes
this.visitors.put( EntryPointNode.class,
DefaultNetworkNodeVisitor.INSTANCE );
@@ -82,7 +83,7 @@
RightInputAdapterNodeVisitor.INSTANCE );
this.visitors.put( PropagationQueuingNode.class,
PropagationQueueingNodeVisitor.INSTANCE );
-
+
// left tuple source nodes
this.visitors.put( JoinNode.class,
BetaNodeVisitor.INSTANCE );
@@ -100,15 +101,21 @@
FromNodeVisitor.INSTANCE );
this.visitors.put( LeftInputAdapterNode.class,
LeftInputAdapterNodeVisitor.INSTANCE );
-
}
+
+ public SessionInspector(StatefulKnowledgeSession session) {
+ this.session = ((StatefulKnowledgeSessionImpl) session).session;
+ }
+ public SessionInspector(WorkingMemory session) {
+ this.session = (ReteooWorkingMemory) session;
+ }
+
public StatefulKnowledgeSessionInfo getSessionInfo() {
StatefulKnowledgeSessionInfo info = new StatefulKnowledgeSessionInfo();
- ReteooWorkingMemory wm = ((StatefulKnowledgeSessionImpl) this.session).session;
- ReteooRuleBase rulebase = (ReteooRuleBase) wm.getRuleBase();
+ ReteooRuleBase rulebase = (ReteooRuleBase) session.getRuleBase();
- info.setSession( wm );
+ info.setSession( session );
Stack<NetworkNode> nodeStack = new Stack<NetworkNode>();
gatherNodeInfo( rulebase.getRete(),
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 2010-03-29 23:44:59 UTC (rev 32288)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/AccumulateNode.java 2010-03-29 23:46:34 UTC (rev 32289)
@@ -820,7 +820,7 @@
accctx,
false );
for ( LeftTuple match = matchings[0]; match != null; match = match.getLeftParentNext() ) {
- // no need to unlink from the left parent as the left parent is being wiped out
+ match.unlinkFromLeftParent();
match.unlinkFromRightParent();
}
// since there are no more matches, the following call will just re-initialize the accumulation
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/LeftTuple.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/LeftTuple.java 2010-03-29 23:44:59 UTC (rev 32288)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/LeftTuple.java 2010-03-29 23:46:34 UTC (rev 32289)
@@ -1,5 +1,8 @@
package org.drools.reteoo;
+import java.util.Arrays;
+
+import org.drools.common.AgendaItem;
import org.drools.common.InternalFactHandle;
import org.drools.core.util.Entry;
import org.drools.core.util.LeftTupleList;
@@ -531,4 +534,37 @@
public LeftTuple getParent() {
return parent;
}
+
+ public String toTupleTree(int indent) {
+ StringBuilder buf = new StringBuilder();
+ char[] spaces = new char[indent];
+ Arrays.fill( spaces, ' ' );
+ String istr = new String( spaces );
+ buf.append( istr );
+ buf.append( this.toExternalString() );
+ buf.append( "\n" );
+ for( LeftTuple leftTuple = this.firstChild; leftTuple != null; leftTuple = leftTuple.getLeftParentNext() ) {
+ buf.append( leftTuple.toTupleTree( indent+4 ) );
+ }
+ return buf.toString();
+ }
+
+ private String toExternalString() {
+ StringBuilder builder = new StringBuilder();
+ builder.append( String.format( "%08X", System.identityHashCode( this ) ) ).append( ":" );
+ int[] ids = new int[this.index+1];
+ LeftTuple entry = this;
+ while( entry != null ) {
+ ids[entry.index] = entry.getLastHandle().getId();
+ entry = entry.parent;
+ }
+ builder.append( Arrays.toString( ids ) )
+ .append( " activation=" )
+ .append( this.activation != null ? ((AgendaItem)this.activation).toExternalForm() : "null" )
+ .append( " sink=" )
+ .append( this.sink.getClass().getSimpleName() )
+ .append( "(" ).append( sink.getId() ).append( ")" );
+ return builder.toString();
+ }
+
}
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 2010-03-29 23:44:59 UTC (rev 32288)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/RuleTerminalNode.java 2010-03-29 23:46:34 UTC (rev 32289)
@@ -317,9 +317,9 @@
agenda.scheduleItem( (ScheduledAgendaItem) item,
workingMemory );
item.setActivated( true );
- workingMemory.removeLogicalDependencies( item,
- context,
- this.rule );
+// workingMemory.removeLogicalDependencies( item,
+// context,
+// this.rule );
((EventSupport) workingMemory).getAgendaEventSupport().fireActivationCreated( item,
workingMemory );
@@ -343,9 +343,9 @@
item.setActivated( added );
if ( added ) {
- workingMemory.removeLogicalDependencies( item,
- context,
- this.rule );
+// workingMemory.removeLogicalDependencies( item,
+// context,
+// this.rule );
((EventSupport) workingMemory).getAgendaEventSupport().fireActivationCreated( item,
workingMemory );
}
Added: labs/jbossrules/trunk/drools-core/src/main/resources/org/drools/core/util/debug/dump_tuples.mvel
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/resources/org/drools/core/util/debug/dump_tuples.mvel (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/main/resources/org/drools/core/util/debug/dump_tuples.mvel 2010-03-29 23:46:34 UTC (rev 32289)
@@ -0,0 +1,43 @@
+ at declare{"dump_tuples"}
+********************************************************************************************
+ Report for Knowledge Session
+********************************************************************************************
+Next node id : @{session.nodeCount}
+User facts count : @{session.externalFactCount}
+
+============== Deployed Packages ===========
+ at foreach{ pkg : session.packages }Package: @{pkg.name} rules: @{pkg.rules.length}
+ at end{}
+
+============== Nodes Info ==================
+ @foreach{node : session.nodeInfos}Node: @{node.node}
+ @if{node.memoryEnabled == "true"}Memory: @if{node.factMemorySize!="-1"}facts: @{node.factMemorySize} @end{}@if{node.tupleMemorySize!="-1"}tuples: @{node.tupleMemorySize} @end{}@if{node.createdFactHandles!="-1"}created handles: @{node.createdFactHandles}@end{}@if{node.actionQueueSize!="-1"}action queue: @{node.actionQueueSize}@end{}@else{}Node memory disabled at end{}
+ at if{node.sinkList.empty == "false"} Connects to nodes:
+ @foreach{child : node.sinkList}@{child}
+ @end{}
+ at end{} Rules:
+ @foreach{ rule : node.rules }rule : @{rule.name}
+ @end{}
+ @end{}
+
+============== Execution Log ==================
+ @foreach{msg : session.log}@{msg}
+ @end{}
+
+============== Memory Data Info ==================
+ at code{
+ java.util.Iterator it = session.session.objectStore.iterateFactHandles();
+ buffer = new StringBuilder();
+ for( int i = 0; i < 150 && it.hasNext(); i++ ) {
+ ifh = it.next();
+ buffer.append( i );
+ buffer.append( ". " );
+ buffer.append( ifh.toTupleTree(4) );
+ buffer.append( "\n" );
+ }
+}
+@{buffer.toString()}
+
+============== End ==================
+ at end{}
+
\ No newline at end of file
Property changes on: labs/jbossrules/trunk/drools-core/src/main/resources/org/drools/core/util/debug/dump_tuples.mvel
___________________________________________________________________
Name: svn:executable
+ *
Modified: labs/jbossrules/trunk/drools-core/src/main/resources/org/drools/core/util/debug/reports.mvel
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/resources/org/drools/core/util/debug/reports.mvel 2010-03-29 23:44:59 UTC (rev 32288)
+++ labs/jbossrules/trunk/drools-core/src/main/resources/org/drools/core/util/debug/reports.mvel 2010-03-29 23:46:34 UTC (rev 32289)
@@ -24,4 +24,3 @@
@foreach{msg : session.log}@{msg}
@end{}
@end{}
-
\ No newline at end of file
Added: labs/jbossrules/trunk/drools-core/src/main/resources/org/drools/core/util/debug/simpletopten.mvel
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/resources/org/drools/core/util/debug/simpletopten.mvel (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/main/resources/org/drools/core/util/debug/simpletopten.mvel 2010-03-29 23:46:34 UTC (rev 32289)
@@ -0,0 +1,63 @@
+ at declare{"simple_topten"}
+********************************************************************************************
+ Report for Knowledge Session
+********************************************************************************************
+Next node id : @{session.nodeCount}
+User facts count : @{session.externalFactCount}
+
+============== Deployed Packages ===========
+ at foreach{ pkg : session.packages }Package: @{pkg.name} rules: @{pkg.rules.length}
+ at end{}
+
+============== Top Ten Left Memory Sizes ======
+ at code{
+topTuples = new java.util.TreeSet(new org.drools.core.util.debug.LeftMemorySizeComparator());
+topTuples.addAll( session.nodeInfos );
+buffer = new StringBuilder();
+it = topTuples.iterator();
+for( int i = 0; i < 10 && it.hasNext() ; i++ ) {
+ ni = (org.drools.core.util.debug.NodeInfo) it.next();
+ buffer.append( (i+1) + ". " + ni.node );
+ buffer.append( "\n\t\tLeftTuples = ");
+ buffer.append( ni.getTupleMemorySize());
+ buffer.append( "\n");
+}
+}
+@{buffer.toString()}
+
+============== Top Ten Right Memory Sizes ======
+ at code{
+topFacts = new java.util.TreeSet(new org.drools.core.util.debug.RightMemorySizeComparator());
+topFacts.addAll( session.nodeInfos );
+buffer = new StringBuilder();
+it = topFacts.iterator();
+for( int j = 0; j < 10 && it.hasNext() ; j++ ) {
+ ni = (org.drools.core.util.debug.NodeInfo) it.next();
+ buffer.append( (j+1) + ". " + ni.node );
+ buffer.append( "\n\t\tFacts = ");
+ buffer.append( ni.getFactMemorySize());
+ buffer.append( "\n");
+}
+}
+@{buffer.toString()}
+
+============== Nodes Info ==================
+ @foreach{node : session.nodeInfos}Node: @{node.node}
+ @if{node.memoryEnabled == "true"}Memory: @if{node.factMemorySize!="-1"}facts: @{node.factMemorySize} @end{}@if{node.tupleMemorySize!="-1"}tuples: @{node.tupleMemorySize} @end{}@if{node.createdFactHandles!="-1"}created handles: @{node.createdFactHandles}@end{}@if{node.actionQueueSize!="-1"}action queue: @{node.actionQueueSize}@end{}@else{}Node memory disabled at end{}
+ at if{node.sinkList.empty == "false"} Connects to nodes:
+ @foreach{child : node.sinkList}@{child}
+ @end{}
+ at end{} Rules:
+ @foreach{ rule : node.rules }rule : @{rule.name}
+ @end{}
+ @end{}
+
+============== Execution Log ==================
+ @foreach{msg : session.log}@{msg}
+ @end{}
+ at end{}
+
+
+
+
+
\ No newline at end of file
Property changes on: labs/jbossrules/trunk/drools-core/src/main/resources/org/drools/core/util/debug/simpletopten.mvel
___________________________________________________________________
Name: svn:executable
+ *
More information about the jboss-svn-commits
mailing list