[jboss-svn-commits] JBL Code SVN: r26032 - in labs/jbossrules/trunk: drools-compiler/src/test/java/org/drools/agent and 2 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Wed Apr 15 00:01:20 EDT 2009
Author: mark.proctor at jboss.com
Date: 2009-04-15 00:01:20 -0400 (Wed, 15 Apr 2009)
New Revision: 26032
Modified:
labs/jbossrules/trunk/drools-api/src/main/java/org/drools/agent/KnowledgeAgent.java
labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/agent/KnowledgeAgentTest.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-core/src/main/java/org/drools/impl/StatelessKnowledgeSessionImpl.java
Log:
JBRULES-2059 StatelessKnowledgeSessions should have special behaviour for KnowledgeAgents
Modified: labs/jbossrules/trunk/drools-api/src/main/java/org/drools/agent/KnowledgeAgent.java
===================================================================
--- labs/jbossrules/trunk/drools-api/src/main/java/org/drools/agent/KnowledgeAgent.java 2009-04-14 22:43:00 UTC (rev 26031)
+++ labs/jbossrules/trunk/drools-api/src/main/java/org/drools/agent/KnowledgeAgent.java 2009-04-15 04:01:20 UTC (rev 26032)
@@ -3,6 +3,8 @@
import org.drools.KnowledgeBase;
import org.drools.SystemEventListener;
import org.drools.io.Resource;
+import org.drools.runtime.KnowledgeSessionConfiguration;
+import org.drools.runtime.StatelessKnowledgeSession;
/**
* The KnolwedgeAgentFactory provides detailed information on how to create and use the KnowledgeAgent.
@@ -25,6 +27,19 @@
* The KnowledgeBase
*/
KnowledgeBase getKnowledgeBase();
+
+
+ /**
+ * StatelessKnowledgeSession created from here will always have the execute() method called against the latest built KnowledgeBase
+ * @return
+ */
+ StatelessKnowledgeSession newStatelessKnowledgeSession();
+
+ /**
+ * StatelessKnowledgeSession created from here will always have the execute() method called against the latest built KnowledgeBase
+ * @return
+ */
+ StatelessKnowledgeSession newStatelessKnowledgeSession(KnowledgeSessionConfiguration conf);
void monitorResourceChangeEvents(boolean monitor);
Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/agent/KnowledgeAgentTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/agent/KnowledgeAgentTest.java 2009-04-14 22:43:00 UTC (rev 26031)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/agent/KnowledgeAgentTest.java 2009-04-15 04:01:20 UTC (rev 26032)
@@ -29,6 +29,7 @@
import org.drools.io.ResourceFactory;
import org.drools.io.impl.ResourceChangeScannerImpl;
import org.drools.runtime.StatefulKnowledgeSession;
+import org.drools.runtime.StatelessKnowledgeSession;
import org.drools.util.DroolsStreamUtils;
import org.drools.util.FileManager;
import org.mortbay.jetty.Server;
@@ -171,7 +172,108 @@
assertTrue( list.contains( "rule2" ) );
kagent.monitorResourceChangeEvents( false );
}
+
+ public void testModifyFileUrlWithStateless() throws Exception {
+ String rule1 = "";
+ rule1 += "package org.drools.test\n";
+ rule1 += "global java.util.List list\n";
+ rule1 += "rule rule1\n";
+ rule1 += "when\n";
+ rule1 += "then\n";
+ rule1 += "list.add( drools.getRule().getName() );\n";
+ rule1 += "end\n";
+ File f1 = fileManager.newFile( "rule1.drl" );
+ Writer output = new BufferedWriter( new FileWriter( f1 ) );
+ output.write( rule1 );
+ output.close();
+ String rule2 = "";
+ rule2 += "package org.drools.test\n";
+ rule2 += "global java.util.List list\n";
+ rule2 += "rule rule2\n";
+ rule2 += "when\n";
+ rule2 += "then\n";
+ rule2 += "list.add( drools.getRule().getName() );\n";
+ rule2 += "end\n";
+ File f2 = fileManager.newFile( "rule2.drl" );
+ output = new BufferedWriter( new FileWriter( f2 ) );
+ output.write( rule2 );
+ output.close();
+
+ String xml = "";
+ xml += "<change-set xmlns='http://drools.org/drools-5.0/change-set'";
+ xml += " xmlns:xs='http://www.w3.org/2001/XMLSchema-instance'";
+ xml += " xs:schemaLocation='http://drools.org/drools-5.0/change-set drools-change-set-5.0.xsd' >";
+ xml += " <add> ";
+ xml += " <resource source='http://localhost:9000/rule1.drl' type='DRL' />";
+ xml += " <resource source='http://localhost:9000/rule2.drl' type='DRL' />";
+ xml += " </add> ";
+ xml += "</change-set>";
+ File fxml = fileManager.newFile( "changeset.xml" );
+ output = new BufferedWriter( new FileWriter( fxml ) );
+ output.write( xml );
+ output.close();
+
+ KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
+
+ ResourceChangeScannerConfiguration sconf = ResourceFactory.getResourceChangeScannerService().newResourceChangeScannerConfiguration();
+ sconf.setProperty( "drools.resource.scanner.interval",
+ "2" );
+ ResourceFactory.getResourceChangeScannerService().configure( sconf );
+
+ KnowledgeAgentConfiguration aconf = KnowledgeAgentFactory.newKnowledgeAgentConfiguration();
+ aconf.setProperty( "drools.agent.scanDirectories",
+ "true" );
+ aconf.setProperty( "drools.agent.scanResources",
+ "true" );
+ aconf.setProperty( "drools.agent.newInstance",
+ "true" );
+ KnowledgeAgent kagent = KnowledgeAgentFactory.newKnowledgeAgent( "test agent",
+ kbase,
+ aconf );
+
+ kagent.applyChangeSet( ResourceFactory.newUrlResource( fxml.toURI().toURL() ) );
+
+ StatelessKnowledgeSession ksession = kagent.newStatelessKnowledgeSession();
+ List list = new ArrayList();
+ ksession.setGlobal( "list",
+ list );
+ ksession.execute( "hello" );
+
+ assertEquals( 2,
+ list.size() );
+ assertTrue( list.contains( "rule1" ) );
+ assertTrue( list.contains( "rule2" ) );
+
+ list.clear();
+
+ // have to sleep here as linux lastModified does not do milliseconds http://saloon.javaranch.com/cgi-bin/ubb/ultimatebb.cgi?ubb=get_topic&f=1&t=019789
+ Thread.sleep( 2000 );
+
+ rule1 = "";
+ rule1 += "package org.drools.test\n";
+ rule1 += "global java.util.List list\n";
+ rule1 += "rule rule3\n";
+ rule1 += "when\n";
+ rule1 += "then\n";
+ rule1 += "list.add( drools.getRule().getName() );\n";
+ rule1 += "end\n";
+ output = new BufferedWriter( new FileWriter( f1 ) );
+ output.write( rule1 );
+ output.close();
+ Thread.sleep( 3000 );
+
+
+ ksession.execute( "hello" );
+
+ assertEquals( 2,
+ list.size() );
+
+ assertTrue( list.contains( "rule3" ) );
+ assertTrue( list.contains( "rule2" ) );
+ kagent.monitorResourceChangeEvents( false );
+ }
+
public void testModifyPackageUrl() throws Exception {
String rule1 = "";
rule1 += "package org.drools.test\n";
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 2009-04-14 22:43:00 UTC (rev 26031)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/agent/impl/KnowledgeAgentImpl.java 2009-04-15 04:01:20 UTC (rev 26032)
@@ -29,6 +29,7 @@
import org.drools.definitions.impl.KnowledgePackageImp;
import org.drools.event.io.ResourceChangeListener;
import org.drools.impl.KnowledgeBaseImpl;
+import org.drools.impl.StatelessKnowledgeSessionImpl;
import org.drools.io.InternalResource;
import org.drools.io.Resource;
import org.drools.io.ResourceFactory;
@@ -38,6 +39,8 @@
import org.drools.rule.Package;
import org.drools.rule.Rule;
import org.drools.rule.TypeDeclaration;
+import org.drools.runtime.KnowledgeSessionConfiguration;
+import org.drools.runtime.StatelessKnowledgeSession;
import org.drools.util.DroolsStreamUtils;
import org.drools.xml.ChangeSetSemanticModule;
import org.drools.xml.SemanticModules;
@@ -316,6 +319,14 @@
}
}
+ public StatelessKnowledgeSession newStatelessKnowledgeSession() {
+ return new StatelessKnowledgeSessionImpl( null, this, null );
+ }
+
+ public StatelessKnowledgeSession newStatelessKnowledgeSession(KnowledgeSessionConfiguration conf) {
+ return new StatelessKnowledgeSessionImpl( null, this, conf );
+ }
+
// public void resourceModified(ResourceModifiedEvent event) {
// ResourceMapping mapping = this.resources.get( event.getResource() );
// System.out.println( "modified : " + event.getResource() );
@@ -411,6 +422,13 @@
}
}
}
+
+ InternalRuleBase ruleBase = ( InternalRuleBase ) ((KnowledgeBaseImpl)this.kbase).ruleBase;
+ synchronized ( ruleBase.getPackagesMap() ) {
+ if ( ruleBase.getConfiguration().isSequential() ) {
+ ruleBase.getReteooBuilder().order();
+ }
+ }
// for ( Resource child : changeSetState.pkgs ) {
// try {
@@ -554,4 +572,6 @@
this.changeSetNotificationDetector.monitor = false;
}
}
+
+
}
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 2009-04-14 22:43:00 UTC (rev 26031)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/impl/KnowledgeBaseImpl.java 2009-04-15 04:01:20 UTC (rev 26032)
@@ -155,11 +155,11 @@
}
public StatelessKnowledgeSession newStatelessKnowledgeSession() {
- return new StatelessKnowledgeSessionImpl( (InternalRuleBase) this.ruleBase, null );
+ return new StatelessKnowledgeSessionImpl( (InternalRuleBase) this.ruleBase, null, null );
}
public StatelessKnowledgeSession newStatelessKnowledgeSession(KnowledgeSessionConfiguration conf) {
- return new StatelessKnowledgeSessionImpl( (InternalRuleBase) this.ruleBase, conf );
+ return new StatelessKnowledgeSessionImpl( (InternalRuleBase) this.ruleBase, null, conf );
}
public void removeKnowledgePackage(String packageName) {
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/impl/StatelessKnowledgeSessionImpl.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/impl/StatelessKnowledgeSessionImpl.java 2009-04-14 22:43:00 UTC (rev 26031)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/impl/StatelessKnowledgeSessionImpl.java 2009-04-15 04:01:20 UTC (rev 26032)
@@ -10,6 +10,7 @@
import org.drools.RuleBaseConfiguration;
import org.drools.SessionConfiguration;
+import org.drools.agent.KnowledgeAgent;
import org.drools.base.MapGlobalResolver;
import org.drools.command.Command;
import org.drools.common.InternalRuleBase;
@@ -43,6 +44,7 @@
StatelessKnowledgeSession {
private InternalRuleBase ruleBase;
+ private KnowledgeAgent kagent;
private AgendaFilter agendaFilter;
private MapGlobalResolver sessionGlobals = new MapGlobalResolver();
@@ -63,16 +65,20 @@
}
public StatelessKnowledgeSessionImpl(final InternalRuleBase ruleBase,
+ final KnowledgeAgent kagent,
final KnowledgeSessionConfiguration conf) {
this.ruleBase = ruleBase;
+ this.kagent = kagent;
this.conf = (conf != null) ? conf : new SessionConfiguration();
this.environment = EnvironmentFactory.newEnvironment();
- synchronized ( this.ruleBase.getPackagesMap() ) {
- if ( ruleBase.getConfiguration().isSequential() ) {
- this.ruleBase.getReteooBuilder().order();
- }
- }
+ if ( this.ruleBase != null ) {
+ synchronized ( this.ruleBase.getPackagesMap() ) {
+ if ( ruleBase.getConfiguration().isSequential() ) {
+ this.ruleBase.getReteooBuilder().order();
+ }
+ }
+ }
}
public InternalRuleBase getRuleBase() {
@@ -80,6 +86,10 @@
}
public InternalWorkingMemory newWorkingMemory() {
+ if ( this.kagent != null ) {
+ // if we have an agent always get the rulebase from there
+ this.ruleBase = ( InternalRuleBase ) ((KnowledgeBaseImpl)this.kagent.getKnowledgeBase()).ruleBase;
+ }
synchronized ( this.ruleBase.getPackagesMap() ) {
ReteooWorkingMemory wm = new ReteooWorkingMemory( this.ruleBase.nextWorkingMemoryCounter(),
this.ruleBase,
More information about the jboss-svn-commits
mailing list