[jboss-svn-commits] JBL Code SVN: r26226 - in labs/jbossrules/trunk: drools-core/src/main/java/org/drools/reteoo and 2 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Thu Apr 23 14:40:48 EDT 2009
Author: tirelli
Date: 2009-04-23 14:40:47 -0400 (Thu, 23 Apr 2009)
New Revision: 26226
Modified:
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AbstractWorkingMemory.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/DefaultFactHandle.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/InternalFactHandle.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/PartitionTaskManager.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ReteooWorkingMemory.java
labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/main/java/org/drools/examples/broker/Broker.java
labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/main/rules/broker.drl
Log:
Fixing NPE when fact expiration is queue and expires before that
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AbstractWorkingMemory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AbstractWorkingMemory.java 2009-04-23 13:17:59 UTC (rev 26225)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AbstractWorkingMemory.java 2009-04-23 18:40:47 UTC (rev 26226)
@@ -1472,7 +1472,13 @@
WorkingMemoryAction action = null;
while ( (action = actionQueue.poll()) != null ) {
- action.execute( this );
+ try {
+ action.execute( this );
+ } catch ( Exception e ) {
+ System.err.println("************************************************");
+ System.err.println("Exception caught while executing action: "+action.toString());
+ e.printStackTrace();
+ }
}
evaluatingActionQueue = false;
}
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 2009-04-23 13:17:59 UTC (rev 26225)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/DefaultFactHandle.java 2009-04-23 18:40:47 UTC (rev 26226)
@@ -142,6 +142,10 @@
this.entryPoint = null;
}
+ public boolean isValid() {
+ return ( this.id != -1 );
+ }
+
public Object getObject() {
return this.object;
}
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 2009-04-23 13:17:59 UTC (rev 26225)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/InternalFactHandle.java 2009-04-23 18:40:47 UTC (rev 26226)
@@ -39,6 +39,8 @@
public void setRecency(long recency);
public void invalidate();
+
+ public boolean isValid();
public int getObjectHashCode();
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/PartitionTaskManager.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/PartitionTaskManager.java 2009-04-23 13:17:59 UTC (rev 26225)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/PartitionTaskManager.java 2009-04-23 18:40:47 UTC (rev 26226)
@@ -106,9 +106,16 @@
* @see Runnable
*/
public void run() {
- Action action = queue.poll();
- if( action != null ) {
- action.execute( workingMemory );
+ try {
+ Action action = queue.poll();
+ if( action != null ) {
+ action.execute( workingMemory );
+ }
+ } catch( Exception e ) {
+ System.err.println("*******************************************************************************************************");
+ System.err.println("Partition task manager caught an unexpected exception: "+e.getMessage());
+ System.err.println("Drools is capturing the exception to avoid thread death. Please report stack trace to development team.");
+ e.printStackTrace();
}
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ReteooWorkingMemory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ReteooWorkingMemory.java 2009-04-23 13:17:59 UTC (rev 26225)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ReteooWorkingMemory.java 2009-04-23 18:40:47 UTC (rev 26226)
@@ -332,20 +332,23 @@
}
public void execute(InternalWorkingMemory workingMemory) {
- final PropagationContext context = new PropagationContextImpl( workingMemory.getNextPropagationIdCounter(),
- PropagationContext.EXPIRATION,
- null,
- null,
- this.factHandle );
- ((EventFactHandle)factHandle).setExpired( true );
- this.node.retractObject( factHandle,
- context,
- workingMemory );
-
- // if no activations for this expired event
- if( ((EventFactHandle)factHandle).getActivationsCount() == 0 ) {
- // remove it from the object store and clean up resources
- ((EventFactHandle)factHandle).getEntryPoint().retract( factHandle );
+ if( this.factHandle.isValid() ) {
+ // if the fact is still in the working memory (since it may have been previously retracted already
+ final PropagationContext context = new PropagationContextImpl( workingMemory.getNextPropagationIdCounter(),
+ PropagationContext.EXPIRATION,
+ null,
+ null,
+ this.factHandle );
+ ((EventFactHandle)factHandle).setExpired( true );
+ this.node.retractObject( factHandle,
+ context,
+ workingMemory );
+
+ // if no activations for this expired event
+ if( ((EventFactHandle)factHandle).getActivationsCount() == 0 ) {
+ // remove it from the object store and clean up resources
+ ((EventFactHandle)factHandle).getEntryPoint().retract( factHandle );
+ }
}
}
}
Modified: labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/main/java/org/drools/examples/broker/Broker.java
===================================================================
--- labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/main/java/org/drools/examples/broker/Broker.java 2009-04-23 13:17:59 UTC (rev 26225)
+++ labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/main/java/org/drools/examples/broker/Broker.java 2009-04-23 18:40:47 UTC (rev 26226)
@@ -30,6 +30,8 @@
import org.drools.examples.broker.model.StockTick;
import org.drools.examples.broker.ui.BrokerWindow;
import org.drools.io.ResourceFactory;
+import org.drools.logger.KnowledgeRuntimeLogger;
+import org.drools.logger.KnowledgeRuntimeLoggerFactory;
import org.drools.runtime.StatefulKnowledgeSession;
import org.drools.runtime.rule.WorkingMemoryEntryPoint;
@@ -57,19 +59,25 @@
@SuppressWarnings("unchecked")
public void receive(Event<?> event) {
- StockTick tick = ((Event<StockTick>)event).getObject();
- Company company = this.companies.getCompany( tick.getSymbol() );
- this.tickStream.insert( tick );
- this.session.getAgenda().getAgendaGroup( "evaluation" ).setFocus();
- this.session.fireAllRules();
- window.updateCompany( company.getSymbol() );
- window.updateTick( tick );
+ try {
+ StockTick tick = ((Event<StockTick>) event).getObject();
+ Company company = this.companies.getCompany( tick.getSymbol() );
+ this.tickStream.insert( tick );
+ this.session.getAgenda().getAgendaGroup( "evaluation" ).setFocus();
+ this.session.fireAllRules();
+ window.updateCompany( company.getSymbol() );
+ window.updateTick( tick );
+ } catch ( Exception e ) {
+ System.err.println("=============================================================");
+ System.err.println("Unexpected exception caught: "+e.getMessage() );
+ e.printStackTrace();
+ }
}
private StatefulKnowledgeSession createSession() {
KnowledgeBase kbase = loadRuleBase();
StatefulKnowledgeSession session = kbase.newStatefulKnowledgeSession();
- //KnowledgeRuntimeLogger logger = KnowledgeRuntimeLoggerFactory.newConsoleLogger( session );
+ KnowledgeRuntimeLogger logger = KnowledgeRuntimeLoggerFactory.newConsoleLogger( session );
session.setGlobal( "services", this );
for( Company company : this.companies.getCompanies() ) {
session.insert( company );
Modified: labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/main/rules/broker.drl
===================================================================
--- labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/main/rules/broker.drl 2009-04-23 13:17:59 UTC (rev 26225)
+++ labs/jbossrules/trunk/drools-examples/drools-examples-fusion/src/main/rules/broker.drl 2009-04-23 18:40:47 UTC (rev 26226)
@@ -19,7 +19,7 @@
# policy will be 2 minutes
declare StockTick
@role( event )
- @expires( 2m )
+ @expires( 10s )
end
# One can even declare helper facts to make rules easier and
More information about the jboss-svn-commits
mailing list