[jboss-svn-commits] JBL Code SVN: r33962 - in labs/jbossrules/trunk: drools-compiler/src/test/java/org/drools/integrationtests and 3 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Fri Jul 16 17:44:23 EDT 2010


Author: dward
Date: 2010-07-16 17:44:22 -0400 (Fri, 16 Jul 2010)
New Revision: 33962

Modified:
   labs/jbossrules/trunk/drools-api/src/main/java/org/drools/KnowledgeBase.java
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/MiscTest.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/agent/impl/KnowledgeAgentImpl.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/impl/KnowledgeBaseImpl.java
   labs/jbossrules/trunk/drools-grid/drools-grid-core/src/main/java/org/drools/grid/remote/KnowledgeBaseRemoteClient.java
Log:
Fix for JBRULES-2579 ( https://jira.jboss.org/browse/JBRULES-2579 ).


Modified: labs/jbossrules/trunk/drools-api/src/main/java/org/drools/KnowledgeBase.java
===================================================================
--- labs/jbossrules/trunk/drools-api/src/main/java/org/drools/KnowledgeBase.java	2010-07-16 21:32:40 UTC (rev 33961)
+++ labs/jbossrules/trunk/drools-api/src/main/java/org/drools/KnowledgeBase.java	2010-07-16 21:44:22 UTC (rev 33962)
@@ -145,6 +145,14 @@
      *     The StatefulKnowledgeSession.
      */
     StatefulKnowledgeSession newStatefulKnowledgeSession();
+    
+    /**
+     * Return a collection of the StatefulKnowledgeSessions that exist in this KnowledgeBase.
+     * Be careful as sessions are not thread-safe and could be in use elsewhere.
+     * 
+     * @return a Collection of StatefulKnowledgeSessions
+     */
+    Collection<StatefulKnowledgeSession> getStatefulKnowledgeSessions();
 
     /**
      * Create a new StatelessKnowledgeSession using the given session configuration.

Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/MiscTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/MiscTest.java	2010-07-16 21:32:40 UTC (rev 33961)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/MiscTest.java	2010-07-16 21:44:22 UTC (rev 33962)
@@ -20,9 +20,9 @@
 import static org.junit.Assert.assertThat;
 import static org.mockito.Matchers.any;
 import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.never;
 import static org.mockito.Mockito.times;
 import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.never;
 
 import java.io.IOException;
 import java.io.InputStreamReader;
@@ -94,7 +94,6 @@
 import org.drools.WorkingMemory;
 import org.drools.Cheesery.Maturity;
 import org.drools.Order.OrderStatus;
-import org.drools.audit.WorkingMemoryFileLogger;
 import org.drools.builder.KnowledgeBuilder;
 import org.drools.builder.KnowledgeBuilderConfiguration;
 import org.drools.builder.KnowledgeBuilderError;
@@ -304,6 +303,38 @@
         assertTrue( results.contains( "3" ) );
 
     }
+    
+    public void testGetStatefulKnowledgeSessions() throws Exception {
+        KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
+        kbuilder.add(ResourceFactory.newClassPathResource("empty.drl", getClass()), ResourceType.DRL);
+        assertFalse(kbuilder.hasErrors());
+        
+        KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
+        kbase.addKnowledgePackages(kbuilder.getKnowledgePackages());
+        StatefulKnowledgeSession ksession_1 = kbase.newStatefulKnowledgeSession();
+        String expected_1 = "expected_1";
+        String expected_2 = "expected_2";
+        org.drools.runtime.rule.FactHandle handle_1 = ksession_1.insert(expected_1);
+        org.drools.runtime.rule.FactHandle handle_2 = ksession_1.insert(expected_2);
+        ksession_1.fireAllRules();
+        Collection<StatefulKnowledgeSession> coll_1 = kbase.getStatefulKnowledgeSessions();
+        assertTrue(coll_1.size() == 1);
+        
+        StatefulKnowledgeSession ksession_2 = coll_1.iterator().next();
+        Object actual_1 = ksession_2.getObject(handle_1);
+        Object actual_2 = ksession_2.getObject(handle_2);
+        assertEquals(expected_1, actual_1);
+        assertEquals(expected_2, actual_2);
+        
+        ksession_1.dispose();
+        Collection<StatefulKnowledgeSession> coll_2 = kbase.getStatefulKnowledgeSessions();
+        assertTrue(coll_2.size() == 0);
+        
+        // here to make sure it's safe to call dispose() twice
+        ksession_1.dispose();
+        Collection<StatefulKnowledgeSession> coll_3 = kbase.getStatefulKnowledgeSessions();
+        assertTrue(coll_3.size() == 0);
+    }
 
     public void testPrimitiveArray() throws Exception {
         final PackageBuilder builder = new PackageBuilder();

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/agent/impl/KnowledgeAgentImpl.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/agent/impl/KnowledgeAgentImpl.java	2010-07-16 21:32:40 UTC (rev 33961)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/agent/impl/KnowledgeAgentImpl.java	2010-07-16 21:44:22 UTC (rev 33962)
@@ -4,6 +4,7 @@
 import java.io.IOException;
 import java.io.InputStream;
 import java.util.ArrayList;
+import java.util.Collection;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.LinkedHashMap;
@@ -16,12 +17,13 @@
 import org.drools.KnowledgeBase;
 import org.drools.KnowledgeBaseFactory;
 import org.drools.RuleBase;
-import org.drools.StatefulSession;
 import org.drools.SystemEventListener;
 import org.drools.SystemEventListenerFactory;
 import org.drools.agent.KnowledgeAgent;
 import org.drools.agent.KnowledgeAgentConfiguration;
+import org.drools.agent.ResourceDiffProducer;
 import org.drools.builder.KnowledgeBuilder;
+import org.drools.builder.KnowledgeBuilderConfiguration;
 import org.drools.builder.KnowledgeBuilderFactory;
 import org.drools.builder.ResourceType;
 import org.drools.common.AbstractRuleBase;
@@ -31,7 +33,9 @@
 import org.drools.definition.KnowledgePackage;
 import org.drools.definition.process.Process;
 import org.drools.definitions.impl.KnowledgePackageImp;
+import org.drools.event.KnowledgeAgentEventSupport;
 import org.drools.event.io.ResourceChangeListener;
+import org.drools.event.knowledgeagent.KnowledgeAgentEventListener;
 import org.drools.impl.KnowledgeBaseImpl;
 import org.drools.impl.StatelessKnowledgeSessionImpl;
 import org.drools.io.Resource;
@@ -39,16 +43,13 @@
 import org.drools.io.impl.ClassPathResource;
 import org.drools.io.impl.ResourceChangeNotifierImpl;
 import org.drools.io.internal.InternalResource;
-import org.drools.agent.ResourceDiffProducer;
-import org.drools.builder.KnowledgeBuilderConfiguration;
-import org.drools.event.knowledgeagent.KnowledgeAgentEventListener;
-import org.drools.event.KnowledgeAgentEventSupport;
 import org.drools.reteoo.ReteooRuleBase;
 import org.drools.rule.Function;
 import org.drools.rule.Package;
 import org.drools.rule.Rule;
 import org.drools.rule.TypeDeclaration;
 import org.drools.runtime.KnowledgeSessionConfiguration;
+import org.drools.runtime.StatefulKnowledgeSession;
 import org.drools.runtime.StatelessKnowledgeSession;
 import org.drools.xml.ChangeSetSemanticModule;
 import org.drools.xml.SemanticModules;
@@ -1190,9 +1191,9 @@
         synchronized (this.registeredResources) {
             //all kbase's ksessions must be disposed
             if (this.kbase != null) {
-                StatefulSession[] statefulSessions = ((AbstractRuleBase) (((KnowledgeBaseImpl) this.kbase).ruleBase)).getStatefulSessions();
-                if (statefulSessions != null && statefulSessions.length > 0){
-                    String message = "The kbase still contains "+statefulSessions.length+" stateful sessions. You must dispose them first.";
+                Collection<StatefulKnowledgeSession> statefulSessions = this.kbase.getStatefulKnowledgeSessions();
+                if (statefulSessions != null && statefulSessions.size() > 0){
+                    String message = "The kbase still contains "+statefulSessions.size()+" stateful sessions. You must dispose them first.";
                     this.listener.warning(message);
                     throw new IllegalStateException(message);
                 }

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/impl/KnowledgeBaseImpl.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/impl/KnowledgeBaseImpl.java	2010-07-16 21:32:40 UTC (rev 33961)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/impl/KnowledgeBaseImpl.java	2010-07-16 21:44:22 UTC (rev 33962)
@@ -12,9 +12,9 @@
 import java.util.Map;
 
 import org.drools.KnowledgeBase;
-import org.drools.KnowledgeBaseConfiguration;
 import org.drools.RuleBase;
 import org.drools.SessionConfiguration;
+import org.drools.StatefulSession;
 import org.drools.command.CommandService;
 import org.drools.command.impl.CommandBasedStatefulKnowledgeSession;
 import org.drools.common.InternalRuleBase;
@@ -156,8 +156,22 @@
     		                                                                                          environment );
     		return new StatefulKnowledgeSessionImpl( session, this );
     	}
-    }    
+    }  
     
+    public Collection<StatefulKnowledgeSession> getStatefulKnowledgeSessions()
+    {
+    	Collection<StatefulKnowledgeSession> c = new ArrayList<StatefulKnowledgeSession>();
+    	StatefulSession[] sss = this.ruleBase.getStatefulSessions();
+    	if (sss != null) {
+    		for (StatefulSession ss : sss) {
+    			if (ss instanceof ReteooStatefulSession) {
+	    			c.add(new StatefulKnowledgeSessionImpl((ReteooStatefulSession)ss, this));
+    			}
+    		}
+    	}
+    	return c;
+    }
+    
     public StatelessKnowledgeSession newStatelessKnowledgeSession() {
         return new StatelessKnowledgeSessionImpl( (InternalRuleBase) this.ruleBase, null, null );
     }

Modified: labs/jbossrules/trunk/drools-grid/drools-grid-core/src/main/java/org/drools/grid/remote/KnowledgeBaseRemoteClient.java
===================================================================
--- labs/jbossrules/trunk/drools-grid/drools-grid-core/src/main/java/org/drools/grid/remote/KnowledgeBaseRemoteClient.java	2010-07-16 21:32:40 UTC (rev 33961)
+++ labs/jbossrules/trunk/drools-grid/drools-grid-core/src/main/java/org/drools/grid/remote/KnowledgeBaseRemoteClient.java	2010-07-16 21:44:22 UTC (rev 33962)
@@ -129,6 +129,12 @@
         return new StatefulKnowledgeSessionRemoteClient( localId,
                                                          client, messageSession );
     }
+    
+    public Collection<StatefulKnowledgeSession> getStatefulKnowledgeSessions()
+    {
+        // TODO Auto-generated method stub
+        return null;
+    }
 
     public StatelessKnowledgeSession newStatelessKnowledgeSession(KnowledgeSessionConfiguration conf) {
         // TODO Auto-generated method stub



More information about the jboss-svn-commits mailing list