[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