[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