[jboss-svn-commits] JBL Code SVN: r33877 - labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/agent.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Wed Jul 14 11:24:53 EDT 2010
Author: eaa
Date: 2010-07-14 11:24:53 -0400 (Wed, 14 Jul 2010)
New Revision: 33877
Modified:
labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/agent/KnowledgeAgentTest.java
Log:
Fixed some race conditions in KnowledgeAgent's test.
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 2010-07-14 12:19:27 UTC (rev 33876)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/agent/KnowledgeAgentTest.java 2010-07-14 15:24:53 UTC (rev 33877)
@@ -24,6 +24,15 @@
import org.drools.core.util.DroolsStreamUtils;
import org.drools.core.util.FileManager;
import org.drools.definition.KnowledgePackage;
+import org.drools.event.knowledgeagent.AfterChangeSetAppliedEvent;
+import org.drools.event.knowledgeagent.AfterChangeSetProcessedEvent;
+import org.drools.event.knowledgeagent.AfterResourceProcessedEvent;
+import org.drools.event.knowledgeagent.BeforeChangeSetAppliedEvent;
+import org.drools.event.knowledgeagent.BeforeChangeSetProcessedEvent;
+import org.drools.event.knowledgeagent.BeforeResourceProcessedEvent;
+import org.drools.event.knowledgeagent.KnowledgeAgentEventListener;
+import org.drools.event.knowledgeagent.KnowledgeBaseUpdatedEvent;
+import org.drools.event.knowledgeagent.ResourceCompilationFailedEvent;
import org.drools.io.ResourceChangeScannerConfiguration;
import org.drools.io.ResourceFactory;
import org.drools.io.impl.ResourceChangeNotifierImpl;
@@ -39,1123 +48,900 @@
import org.mortbay.jetty.handler.ResourceHandler;
public class KnowledgeAgentTest extends TestCase {
- FileManager fileManager;
- private Server server;
+ FileManager fileManager;
+ private Server server;
+ private final Object lock = new Object();
+ private volatile boolean kbaseUpdated;
- protected void setUp() throws Exception {
- fileManager = new FileManager();
- fileManager.setUp();
- ((ResourceChangeScannerImpl) ResourceFactory
- .getResourceChangeScannerService()).reset();
- ResourceFactory.getResourceChangeNotifierService().start();
- ResourceFactory.getResourceChangeScannerService().start();
+ @Override
+ protected void setUp() throws Exception {
+ fileManager = new FileManager();
+ fileManager.setUp();
+ ((ResourceChangeScannerImpl) ResourceFactory.getResourceChangeScannerService()).reset();
- this.server = new Server(0);
-
- ResourceHandler resourceHandler = new ResourceHandler();
- resourceHandler.setResourceBase(fileManager.getRootDirectory()
- .getPath());
- System.out
- .println("root : " + fileManager.getRootDirectory().getPath());
+ ResourceFactory.getResourceChangeNotifierService().start();
+ ResourceFactory.getResourceChangeScannerService().start();
- server.setHandler(resourceHandler);
+ this.server = new Server(0);
+ ResourceHandler resourceHandler = new ResourceHandler();
+ resourceHandler.setResourceBase(fileManager.getRootDirectory().getPath());
- server.start();
- System.out.println("Server running on port "+this.getPort());
- }
+ server.setHandler(resourceHandler);
- private int getPort(){
- return this.server.getConnectors()[0].getLocalPort();
- }
+ server.start();
- protected void tearDown() throws Exception {
- fileManager.tearDown();
- ResourceFactory.getResourceChangeNotifierService().stop();
- ResourceFactory.getResourceChangeScannerService().stop();
- ((ResourceChangeNotifierImpl) ResourceFactory
- .getResourceChangeNotifierService()).reset();
- ((ResourceChangeScannerImpl) ResourceFactory
- .getResourceChangeScannerService()).reset();
+ this.kbaseUpdated = false;
+ }
- server.stop();
- }
+ private int getPort() {
+ return this.server.getConnectors()[0].getLocalPort();
+ }
- public void testModifyFileUrl() 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();
+ @Override
+ protected void tearDown() throws Exception {
+ fileManager.tearDown();
+ ResourceFactory.getResourceChangeNotifierService().stop();
+ ResourceFactory.getResourceChangeScannerService().stop();
+ ((ResourceChangeNotifierImpl) ResourceFactory.getResourceChangeNotifierService()).reset();
+ ((ResourceChangeScannerImpl) ResourceFactory.getResourceChangeScannerService()).reset();
- 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();
+ server.stop();
+ }
- 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:"+this.getPort()+"/rule1.drl' type='DRL' />";
- xml += " <resource source='http://localhost:"+this.getPort()+"/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();
+ public void testModifyFileUrl() throws Exception {
+ String rule1 = this.createDefaultRule("rule1");
+ File f1 = fileManager.newFile("rule1.drl");
+ Writer output = new BufferedWriter(new FileWriter(f1));
+ output.write(rule1);
+ output.close();
- KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
+ String rule2 = this.createDefaultRule("rule2");
- ResourceChangeScannerConfiguration sconf = ResourceFactory
- .getResourceChangeScannerService()
- .newResourceChangeScannerConfiguration();
- sconf.setProperty("drools.resource.scanner.interval", "2");
- ResourceFactory.getResourceChangeScannerService().configure(sconf);
+ File f2 = fileManager.newFile("rule2.drl");
+ output = new BufferedWriter(new FileWriter(f2));
+ output.write(rule2);
+ output.close();
- 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);
+ 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:" + this.getPort() + "/rule1.drl' type='DRL' />";
+ xml += " <resource source='http://localhost:" + this.getPort() + "/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();
- assertEquals("test agent", kagent.getName());
+ KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
- kagent.applyChangeSet(ResourceFactory.newUrlResource(fxml.toURI()
- .toURL()));
+ ResourceChangeScannerConfiguration sconf = ResourceFactory.getResourceChangeScannerService().newResourceChangeScannerConfiguration();
+ sconf.setProperty("drools.resource.scanner.interval", "2");
+ ResourceFactory.getResourceChangeScannerService().configure(sconf);
- StatefulKnowledgeSession ksession = kagent.getKnowledgeBase()
- .newStatefulKnowledgeSession();
- List<String> list = new ArrayList<String>();
- ksession.setGlobal("list", list);
- ksession.fireAllRules();
- ksession.dispose();
+ 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);
- assertEquals(2, list.size());
- assertTrue(list.contains("rule1"));
- assertTrue(list.contains("rule2"));
+ assertEquals("test agent", kagent.getName());
- list.clear();
+ kagent.applyChangeSet(ResourceFactory.newUrlResource(fxml.toURI().toURL()));
+ kbaseUpdated = false;
- // 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);
+ StatefulKnowledgeSession ksession = kagent.getKnowledgeBase().newStatefulKnowledgeSession();
+ List<String> list = new ArrayList<String>();
+ ksession.setGlobal("list", list);
+ ksession.fireAllRules();
+ ksession.dispose();
- 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);
+ assertEquals(2, list.size());
+ assertTrue(list.contains("rule1"));
+ assertTrue(list.contains("rule2"));
- ksession = kagent.getKnowledgeBase().newStatefulKnowledgeSession();
- list = new ArrayList<String>();
- ksession.setGlobal("list", list);
- ksession.fireAllRules();
- ksession.dispose();
+ list.clear();
- assertEquals(2, list.size());
+ // 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);
- assertTrue(list.contains("rule3"));
- assertTrue(list.contains("rule2"));
- kagent.monitorResourceChangeEvents(false);
- }
+ rule1 = this.createDefaultRule("rule3");
- /**
- * Tests that if we change a ChangeSet that is referenced by another change
- * set or added by another ChangeSet, that the changes are picked up.
- *
- * @throws Exception
- * If an unexpected exception occurs.
- */
- public void testChangeSetInChangeSet() 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();
+ output = new BufferedWriter(new FileWriter(f1));
+ output.write(rule1);
+ output.close();
+ Thread.sleep(3000);
- 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();
+ ksession = kagent.getKnowledgeBase().newStatefulKnowledgeSession();
+ list = new ArrayList<String>();
+ ksession.setGlobal("list", list);
+ ksession.fireAllRules();
+ ksession.dispose();
- String xml1 = "";
- xml1 += "<change-set xmlns='http://drools.org/drools-5.0/change-set'";
- xml1 += " xmlns:xs='http://www.w3.org/2001/XMLSchema-instance'";
- xml1 += " xs:schemaLocation='http://drools.org/drools-5.0/change-set drools-change-set-5.0.xsd' >";
- xml1 += " <add> ";
- xml1 += " <resource source='http://localhost:"+this.getPort()+"/rule1.drl' type='DRL' />";
- xml1 += " <resource source='http://localhost:"+this.getPort()+"/rule2.drl' type='DRL' />";
- xml1 += " </add> ";
- xml1 += "</change-set>";
- File fxml1 = fileManager.newFile("changeset2.xml");
- output = new BufferedWriter(new FileWriter(fxml1));
- output.write(xml1);
- output.close();
+ assertEquals(2, list.size());
- String xml2 = "";
- xml2 += "<change-set xmlns='http://drools.org/drools-5.0/change-set'";
- xml2 += " xmlns:xs='http://www.w3.org/2001/XMLSchema-instance'";
- xml2 += " xs:schemaLocation='http://drools.org/drools-5.0/change-set drools-change-set-5.0.xsd' >";
- xml2 += " <add> ";
- xml2 += " <resource source='http://localhost:"+this.getPort()+"/changeset2.xml' type='CHANGE_SET' />";
- xml2 += " </add> ";
- xml2 += "</change-set>";
- File fxml2 = fileManager.newFile("changeset.xml");
- output = new BufferedWriter(new FileWriter(fxml2));
- output.write(xml2);
- output.close();
+ assertTrue(list.contains("rule3"));
+ assertTrue(list.contains("rule2"));
+ kagent.monitorResourceChangeEvents(false);
+ }
- KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
+ /**
+ * Tests that if we change a ChangeSet that is referenced by another change
+ * set or added by another ChangeSet, that the changes are picked up.
+ *
+ * @throws Exception
+ * If an unexpected exception occurs.
+ */
+ public void testChangeSetInChangeSet() throws Exception {
+ String rule1 = this.createDefaultRule("rule1");
+ File f1 = fileManager.newFile("rule1.drl");
+ Writer output = new BufferedWriter(new FileWriter(f1));
+ output.write(rule1);
+ output.close();
- ResourceChangeScannerConfiguration sconf = ResourceFactory
- .getResourceChangeScannerService()
- .newResourceChangeScannerConfiguration();
- sconf.setProperty("drools.resource.scanner.interval", "2");
- ResourceFactory.getResourceChangeScannerService().configure(sconf);
+ String rule2 = this.createDefaultRule("rule2");
+ File f2 = fileManager.newFile("rule2.drl");
+ output = new BufferedWriter(new FileWriter(f2));
+ output.write(rule2);
+ output.close();
- 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);
+ String xml1 = "";
+ xml1 += "<change-set xmlns='http://drools.org/drools-5.0/change-set'";
+ xml1 += " xmlns:xs='http://www.w3.org/2001/XMLSchema-instance'";
+ xml1 += " xs:schemaLocation='http://drools.org/drools-5.0/change-set drools-change-set-5.0.xsd' >";
+ xml1 += " <add> ";
+ xml1 += " <resource source='http://localhost:" + this.getPort() + "/rule1.drl' type='DRL' />";
+ xml1 += " <resource source='http://localhost:" + this.getPort() + "/rule2.drl' type='DRL' />";
+ xml1 += " </add> ";
+ xml1 += "</change-set>";
+ File fxml1 = fileManager.newFile("changeset2.xml");
+ output = new BufferedWriter(new FileWriter(fxml1));
+ output.write(xml1);
+ output.close();
- assertEquals("test agent", kagent.getName());
+ String xml2 = "";
+ xml2 += "<change-set xmlns='http://drools.org/drools-5.0/change-set'";
+ xml2 += " xmlns:xs='http://www.w3.org/2001/XMLSchema-instance'";
+ xml2 += " xs:schemaLocation='http://drools.org/drools-5.0/change-set drools-change-set-5.0.xsd' >";
+ xml2 += " <add> ";
+ xml2 += " <resource source='http://localhost:" + this.getPort() + "/changeset2.xml' type='CHANGE_SET' />";
+ xml2 += " </add> ";
+ xml2 += "</change-set>";
+ File fxml2 = fileManager.newFile("changeset.xml");
+ output = new BufferedWriter(new FileWriter(fxml2));
+ output.write(xml2);
+ output.close();
- kagent.applyChangeSet(ResourceFactory.newUrlResource(fxml2.toURI()
- .toURL()));
+ KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
- StatefulKnowledgeSession ksession = kagent.getKnowledgeBase()
- .newStatefulKnowledgeSession();
- List<String> list = new ArrayList<String>();
- ksession.setGlobal("list", list);
- ksession.fireAllRules();
- ksession.dispose();
+ KnowledgeAgent kagent = this.createKAgent(kbase);
- assertEquals(2, list.size());
- assertTrue(list.contains("rule1"));
- assertTrue(list.contains("rule2"));
+ kagent.applyChangeSet(ResourceFactory.newUrlResource(fxml2.toURI().toURL()));
+ kbaseUpdated = false;
- list.clear();
+ StatefulKnowledgeSession ksession = kagent.getKnowledgeBase().newStatefulKnowledgeSession();
+ List<String> list = new ArrayList<String>();
+ ksession.setGlobal("list", list);
+ ksession.fireAllRules();
+ ksession.dispose();
- // 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);
+ assertEquals(2, list.size());
+ assertTrue(list.contains("rule1"));
+ assertTrue(list.contains("rule2"));
- 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);
+ list.clear();
- ksession = kagent.getKnowledgeBase().newStatefulKnowledgeSession();
- list = new ArrayList<String>();
- ksession.setGlobal("list", list);
- ksession.fireAllRules();
- ksession.dispose();
+ // 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);
- assertEquals(2, list.size());
+ rule1 = this.createDefaultRule("rule3");
+ output = new BufferedWriter(new FileWriter(f1));
+ output.write(rule1);
+ output.close();
- assertTrue(list.contains("rule3"));
- assertTrue(list.contains("rule2"));
- kagent.monitorResourceChangeEvents(false);
- }
+ this.waitUntilKBaseUpdate();
- 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();
+ ksession = kagent.getKnowledgeBase().newStatefulKnowledgeSession();
+ list = new ArrayList<String>();
+ ksession.setGlobal("list", list);
+ ksession.fireAllRules();
+ ksession.dispose();
- 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();
+ assertEquals(2, list.size());
- 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:"+this.getPort()+"/rule1.drl' type='DRL' />";
- xml += " <resource source='http://localhost:"+this.getPort()+"/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();
+ assertTrue(list.contains("rule3"));
+ assertTrue(list.contains("rule2"));
- KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
+ kagent.monitorResourceChangeEvents(false);
+ }
- ResourceChangeScannerConfiguration sconf = ResourceFactory
- .getResourceChangeScannerService()
- .newResourceChangeScannerConfiguration();
- sconf.setProperty("drools.resource.scanner.interval", "2");
- ResourceFactory.getResourceChangeScannerService().configure(sconf);
+ public void testModifyFileUrlWithStateless() throws Exception {
+ String rule1 = this.createDefaultRule("rule1");
+ File f1 = fileManager.newFile("rule1.drl");
+ Writer output = new BufferedWriter(new FileWriter(f1));
+ output.write(rule1);
+ output.close();
- 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);
+ String rule2 = this.createDefaultRule("rule2");
+ File f2 = fileManager.newFile("rule2.drl");
+ output = new BufferedWriter(new FileWriter(f2));
+ output.write(rule2);
+ output.close();
- kagent.applyChangeSet(ResourceFactory.newUrlResource(fxml.toURI()
- .toURL()));
+ 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:" + this.getPort() + "/rule1.drl' type='DRL' />";
+ xml += " <resource source='http://localhost:" + this.getPort() + "/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();
- StatelessKnowledgeSession ksession = kagent
- .newStatelessKnowledgeSession();
- List<String> list = new ArrayList<String>();
- ksession.setGlobal("list", list);
- ksession.execute("hello");
+ KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
- assertEquals(2, list.size());
- assertTrue(list.contains("rule1"));
- assertTrue(list.contains("rule2"));
+ KnowledgeAgent kagent = this.createKAgent(kbase);
- list.clear();
+ kagent.applyChangeSet(ResourceFactory.newUrlResource(fxml.toURI().toURL()));
+ kbaseUpdated = false;
- // 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);
+ StatelessKnowledgeSession ksession = kagent.newStatelessKnowledgeSession();
+ List<String> list = new ArrayList<String>();
+ ksession.setGlobal("list", list);
+ ksession.execute("hello");
- 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";
- System.out.println("root : " + f1.getPath());
- output = new BufferedWriter(new FileWriter(f1));
- output.write(rule1);
- output.close();
- Thread.sleep(3000);
+ assertEquals(2, list.size());
+ assertTrue(list.contains("rule1"));
+ assertTrue(list.contains("rule2"));
- ksession.execute("hello");
+ list.clear();
- assertEquals(2, list.size());
+ // 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);
- assertTrue(list.contains("rule3"));
- assertTrue(list.contains("rule2"));
- kagent.monitorResourceChangeEvents(false);
- }
+ rule1 = this.createDefaultRule("rule3");
+ System.out.println("root : " + f1.getPath());
+ output = new BufferedWriter(new FileWriter(f1));
+ output.write(rule1);
+ output.close();
- public void testModifyPackageUrl() 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";
+ this.waitUntilKBaseUpdate();
- 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";
+ ksession.execute("hello");
- KnowledgeBuilder kbuilder = KnowledgeBuilderFactory
- .newKnowledgeBuilder();
- kbuilder.add(ResourceFactory.newByteArrayResource(rule1.getBytes()),
- ResourceType.DRL);
- kbuilder.add(ResourceFactory.newByteArrayResource(rule2.getBytes()),
- ResourceType.DRL);
- if (kbuilder.hasErrors()) {
- fail(kbuilder.getErrors().toString());
- }
- KnowledgePackage pkg = (KnowledgePackage) kbuilder
- .getKnowledgePackages().iterator().next();
- writePackage(pkg, fileManager.newFile("pkg1.pkg"));
+ assertEquals(2, list.size());
- 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:"+this.getPort()+"/pkg1.pkg' type='PKG' />";
- xml += " </add> ";
- xml += "</change-set>";
- File fxml = fileManager.newFile("changeset.xml");
- Writer output = new BufferedWriter(new FileWriter(fxml));
- output.write(xml);
- output.close();
+ assertTrue(list.contains("rule3"));
+ assertTrue(list.contains("rule2"));
+ kagent.monitorResourceChangeEvents(false);
+ }
- KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
+ public void testModifyPackageUrl() throws Exception {
+ String rule1 = this.createDefaultRule("rule1");
- ResourceChangeScannerConfiguration sconf = ResourceFactory
- .getResourceChangeScannerService()
- .newResourceChangeScannerConfiguration();
- sconf.setProperty("drools.resource.scanner.interval", "2");
- ResourceFactory.getResourceChangeScannerService().configure(sconf);
+ String rule2 = this.createDefaultRule("rule2");
- 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);
+ KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
+ kbuilder.add(ResourceFactory.newByteArrayResource(rule1.getBytes()),
+ ResourceType.DRL);
+ kbuilder.add(ResourceFactory.newByteArrayResource(rule2.getBytes()),
+ ResourceType.DRL);
+ if (kbuilder.hasErrors()) {
+ fail(kbuilder.getErrors().toString());
+ }
+ KnowledgePackage pkg = (KnowledgePackage) kbuilder.getKnowledgePackages().iterator().next();
+ writePackage(pkg, fileManager.newFile("pkg1.pkg"));
- kagent.applyChangeSet(ResourceFactory.newUrlResource(fxml.toURI()
- .toURL()));
+ 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:" + this.getPort() + "/pkg1.pkg' type='PKG' />";
+ xml += " </add> ";
+ xml += "</change-set>";
+ File fxml = fileManager.newFile("changeset.xml");
+ Writer output = new BufferedWriter(new FileWriter(fxml));
+ output.write(xml);
+ output.close();
- StatefulKnowledgeSession ksession = kagent.getKnowledgeBase()
- .newStatefulKnowledgeSession();
- List<String> list = new ArrayList<String>();
- ksession.setGlobal("list", list);
- ksession.fireAllRules();
- ksession.dispose();
+ KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
- assertEquals(2, list.size());
- assertTrue(list.contains("rule1"));
- assertTrue(list.contains("rule2"));
+ KnowledgeAgent kagent = this.createKAgent(kbase);
- list.clear();
+ kagent.applyChangeSet(ResourceFactory.newUrlResource(fxml.toURI().toURL()));
+ kbaseUpdated = false;
- // 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);
+ StatefulKnowledgeSession ksession = kagent.getKnowledgeBase().newStatefulKnowledgeSession();
+ List<String> list = new ArrayList<String>();
+ ksession.setGlobal("list", list);
+ ksession.fireAllRules();
+ ksession.dispose();
- 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";
+ assertEquals(2, list.size());
+ assertTrue(list.contains("rule1"));
+ assertTrue(list.contains("rule2"));
- kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
- kbuilder.add(ResourceFactory.newByteArrayResource(rule1.getBytes()),
- ResourceType.DRL);
- kbuilder.add(ResourceFactory.newByteArrayResource(rule2.getBytes()),
- ResourceType.DRL);
- if (kbuilder.hasErrors()) {
- fail(kbuilder.getErrors().toString());
- }
- pkg = (KnowledgePackage) kbuilder.getKnowledgePackages().iterator()
- .next();
- writePackage(pkg, fileManager.newFile("pkg1.pkg"));
+ list.clear();
- // KnowledgePackage pkg2 = ( KnowledgePackage )
- // DroolsStreamUtils.streamIn( new FileInputStream( fileManager.newFile(
- // "pkg1.pkg" ) ) );
+ // 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);
- Thread.sleep(3000);
+ rule1 = this.createDefaultRule("rule3");
- ksession = kagent.getKnowledgeBase().newStatefulKnowledgeSession();
- list = new ArrayList<String>();
- ksession.setGlobal("list", list);
- ksession.fireAllRules();
- ksession.dispose();
+ kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
+ kbuilder.add(ResourceFactory.newByteArrayResource(rule1.getBytes()),
+ ResourceType.DRL);
+ kbuilder.add(ResourceFactory.newByteArrayResource(rule2.getBytes()),
+ ResourceType.DRL);
+ if (kbuilder.hasErrors()) {
+ fail(kbuilder.getErrors().toString());
+ }
+ pkg = (KnowledgePackage) kbuilder.getKnowledgePackages().iterator().next();
+ writePackage(pkg, fileManager.newFile("pkg1.pkg"));
- assertEquals(2, list.size());
+ this.waitUntilKBaseUpdate();
- assertTrue(list.contains("rule3"));
- assertTrue(list.contains("rule2"));
- kagent.monitorResourceChangeEvents(false);
- }
+ ksession = kagent.getKnowledgeBase().newStatefulKnowledgeSession();
+ list = new ArrayList<String>();
+ ksession.setGlobal("list", list);
+ ksession.fireAllRules();
+ ksession.dispose();
- public void testDeletePackageUrl() throws Exception {
- String rule1 = "";
- rule1 += "package org.drools.test1\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";
+ assertEquals(2, list.size());
- String rule2 = "";
- rule2 += "package org.drools.test2\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";
+ assertTrue(list.contains("rule3"));
+ assertTrue(list.contains("rule2"));
+ kagent.monitorResourceChangeEvents(false);
+ }
- KnowledgeBuilder kbuilder = KnowledgeBuilderFactory
- .newKnowledgeBuilder();
- kbuilder.add(ResourceFactory.newByteArrayResource(rule1.getBytes()),
- ResourceType.DRL);
- kbuilder.add(ResourceFactory.newByteArrayResource(rule2.getBytes()),
- ResourceType.DRL);
- if (kbuilder.hasErrors()) {
- fail(kbuilder.getErrors().toString());
- }
+ public void testDeletePackageUrl() throws Exception {
+ String rule1 = this.createDefaultRule("rule1","org.drools.test1");
- Map<String, KnowledgePackage> map = new HashMap<String, KnowledgePackage>();
- for (KnowledgePackage pkg : kbuilder.getKnowledgePackages()) {
- map.put(pkg.getName(), pkg);
- }
- writePackage((KnowledgePackage) map.get("org.drools.test1"),
- fileManager.newFile("pkg1.pkg"));
- writePackage((KnowledgePackage) map.get("org.drools.test2"),
- fileManager.newFile("pkg2.pkg"));
+ String rule2 = this.createDefaultRule("rule2","org.drools.test2");
- 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:"+this.getPort()+"/pkg1.pkg' type='PKG' />";
- xml += " <resource source='http://localhost:"+this.getPort()+"/pkg2.pkg' type='PKG' />";
- xml += " </add> ";
- xml += "</change-set>";
+ KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
+ kbuilder.add(ResourceFactory.newByteArrayResource(rule1.getBytes()),
+ ResourceType.DRL);
+ kbuilder.add(ResourceFactory.newByteArrayResource(rule2.getBytes()),
+ ResourceType.DRL);
+ if (kbuilder.hasErrors()) {
+ fail(kbuilder.getErrors().toString());
+ }
- KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
+ Map<String, KnowledgePackage> map = new HashMap<String, KnowledgePackage>();
+ for (KnowledgePackage pkg : kbuilder.getKnowledgePackages()) {
+ map.put(pkg.getName(), pkg);
+ }
+ writePackage((KnowledgePackage) map.get("org.drools.test1"),
+ fileManager.newFile("pkg1.pkg"));
+ writePackage((KnowledgePackage) map.get("org.drools.test2"),
+ fileManager.newFile("pkg2.pkg"));
- ResourceChangeScannerConfiguration sconf = ResourceFactory
- .getResourceChangeScannerService()
- .newResourceChangeScannerConfiguration();
- sconf.setProperty("drools.resource.scanner.interval", "2");
- ResourceFactory.getResourceChangeScannerService().configure(sconf);
+ 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:" + this.getPort() + "/pkg1.pkg' type='PKG' />";
+ xml += " <resource source='http://localhost:" + this.getPort() + "/pkg2.pkg' type='PKG' />";
+ xml += " </add> ";
+ xml += "</change-set>";
- 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);
+ KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
- kagent.applyChangeSet(ResourceFactory.newByteArrayResource(xml
- .getBytes()));
+ KnowledgeAgent kagent = this.createKAgent(kbase);
- StatefulKnowledgeSession ksession = kagent.getKnowledgeBase()
- .newStatefulKnowledgeSession();
- List<String> list = new ArrayList<String>();
- ksession.setGlobal("list", list);
- ksession.fireAllRules();
- ksession.dispose();
+ kagent.applyChangeSet(ResourceFactory.newByteArrayResource(xml.getBytes()));
+ kbaseUpdated = false;
- assertEquals(2, list.size());
- assertTrue(list.contains("rule1"));
- assertTrue(list.contains("rule2"));
+ StatefulKnowledgeSession ksession = kagent.getKnowledgeBase().newStatefulKnowledgeSession();
+ List<String> list = new ArrayList<String>();
+ ksession.setGlobal("list", list);
+ ksession.fireAllRules();
+ ksession.dispose();
- list.clear();
+ assertEquals(2, list.size());
+ assertTrue(list.contains("rule1"));
+ assertTrue(list.contains("rule2"));
- // 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);
+ list.clear();
- 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 += " <remove> ";
- xml += " <resource source='http://localhost:"+this.getPort()+"/pkg2.pkg' type='PKG' />";
- xml += " </remove> ";
- xml += "</change-set>";
+ 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 += " <remove> ";
+ xml += " <resource source='http://localhost:" + this.getPort() + "/pkg2.pkg' type='PKG' />";
+ xml += " </remove> ";
+ xml += "</change-set>";
- kagent.applyChangeSet(ResourceFactory.newByteArrayResource(xml
- .getBytes()));
+ kagent.applyChangeSet(ResourceFactory.newByteArrayResource(xml.getBytes()));
+ kbaseUpdated = false;
- Thread.sleep(3000);
+ ksession = kagent.getKnowledgeBase().newStatefulKnowledgeSession();
+ list = new ArrayList<String>();
+ ksession.setGlobal("list", list);
+ ksession.fireAllRules();
+ ksession.dispose();
- ksession = kagent.getKnowledgeBase().newStatefulKnowledgeSession();
- list = new ArrayList<String>();
- ksession.setGlobal("list", list);
- ksession.fireAllRules();
- ksession.dispose();
+ assertEquals(1, list.size());
- assertEquals(1, list.size());
+ assertTrue(list.contains("rule1"));
+ kagent.monitorResourceChangeEvents(false);
+ }
- assertTrue(list.contains("rule1"));
- kagent.monitorResourceChangeEvents(false);
- }
+ public void testOldSchoolPackageUrl() throws Exception {
+ String rule1 = this.createDefaultRule("rule1");
- public void testOldSchoolPackageUrl() 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";
+ String rule2 = this.createDefaultRule("rule2");
- 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";
+ KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
+ kbuilder.add(ResourceFactory.newByteArrayResource(rule1.getBytes()),
+ ResourceType.DRL);
+ kbuilder.add(ResourceFactory.newByteArrayResource(rule2.getBytes()),
+ ResourceType.DRL);
+ if (kbuilder.hasErrors()) {
+ fail(kbuilder.getErrors().toString());
+ }
- KnowledgeBuilder kbuilder = KnowledgeBuilderFactory
- .newKnowledgeBuilder();
- kbuilder.add(ResourceFactory.newByteArrayResource(rule1.getBytes()),
- ResourceType.DRL);
- kbuilder.add(ResourceFactory.newByteArrayResource(rule2.getBytes()),
- ResourceType.DRL);
- if (kbuilder.hasErrors()) {
- fail(kbuilder.getErrors().toString());
- }
+ KnowledgeBuilderImpl kbi = (KnowledgeBuilderImpl) kbuilder;
- KnowledgeBuilderImpl kbi = (KnowledgeBuilderImpl) kbuilder;
+ // KnowledgePackage pkg = ( KnowledgePackage )
+ // kbuilder.getKnowledgePackages().iterator().next();
+ writePackage(kbi.getPackageBuilder().getPackage(), fileManager.newFile("pkgold.pkg"));
- // KnowledgePackage pkg = ( KnowledgePackage )
- // kbuilder.getKnowledgePackages().iterator().next();
- writePackage(kbi.getPackageBuilder().getPackage(), fileManager
- .newFile("pkgold.pkg"));
+ 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:" + this.getPort() + "/pkgold.pkg' type='PKG' />";
+ xml += " </add> ";
+ xml += "</change-set>";
+ File fxml = fileManager.newFile("changeset.xml");
+ Writer output = new BufferedWriter(new FileWriter(fxml));
+ output.write(xml);
+ 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:"+this.getPort()+"/pkgold.pkg' type='PKG' />";
- xml += " </add> ";
- xml += "</change-set>";
- File fxml = fileManager.newFile("changeset.xml");
- Writer output = new BufferedWriter(new FileWriter(fxml));
- output.write(xml);
- output.close();
+ KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
- KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
+ KnowledgeAgent kagent = this.createKAgent(kbase);
- ResourceChangeScannerConfiguration sconf = ResourceFactory
- .getResourceChangeScannerService()
- .newResourceChangeScannerConfiguration();
- sconf.setProperty("drools.resource.scanner.interval", "2");
- ResourceFactory.getResourceChangeScannerService().configure(sconf);
+ kagent.applyChangeSet(ResourceFactory.newUrlResource(fxml.toURI().toURL()));
+ kbaseUpdated = false;
- 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()));
+ StatefulKnowledgeSession ksession = kagent.getKnowledgeBase().newStatefulKnowledgeSession();
+ List<String> list = new ArrayList<String>();
+ ksession.setGlobal("list", list);
+ ksession.fireAllRules();
+ ksession.dispose();
- StatefulKnowledgeSession ksession = kagent.getKnowledgeBase()
- .newStatefulKnowledgeSession();
- List<String> list = new ArrayList<String>();
- ksession.setGlobal("list", list);
- ksession.fireAllRules();
- ksession.dispose();
+ assertEquals(2, list.size());
+ assertTrue(list.contains("rule1"));
+ assertTrue(list.contains("rule2"));
- assertEquals(2, list.size());
- assertTrue(list.contains("rule1"));
- assertTrue(list.contains("rule2"));
+ }
- }
+ public void testModifyFile() throws IOException, InterruptedException {
+ String rule1 = this.createDefaultRule("rule1");
+ File f1 = fileManager.newFile("rule1.drl");
+ Writer output = new BufferedWriter(new FileWriter(f1));
+ output.write(rule1);
+ output.close();
- public void testModifyFile() throws IOException, InterruptedException {
- 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 = this.createDefaultRule("rule2");
+ File f2 = fileManager.newFile("rule2.drl");
+ output = new BufferedWriter(new FileWriter(f2));
+ output.write(rule2);
+ 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='" + f1.toURI().toURL()
+ + "' type='DRL' />";
+ xml += " <resource source='" + f2.toURI().toURL()
+ + "' type='DRL' />";
+ xml += " </add> ";
+ xml += "</change-set>";
+ File fxml = fileManager.newFile("changeset.xml");
+ output = new BufferedWriter(new FileWriter(fxml));
+ output.write(xml);
+ 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='" + f1.toURI().toURL()
- + "' type='DRL' />";
- xml += " <resource source='" + f2.toURI().toURL()
- + "' 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();
- KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
+ KnowledgeAgent kagent = this.createKAgent(kbase);
- ResourceChangeScannerConfiguration sconf = ResourceFactory
- .getResourceChangeScannerService()
- .newResourceChangeScannerConfiguration();
- sconf.setProperty("drools.resource.scanner.interval", "2");
- ResourceFactory.getResourceChangeScannerService().configure(sconf);
+ kagent.applyChangeSet(ResourceFactory.newUrlResource(fxml.toURI().toURL()));
+ kbaseUpdated = false;
- 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()));
+ StatefulKnowledgeSession ksession = kagent.getKnowledgeBase().newStatefulKnowledgeSession();
+ List<String> list = new ArrayList<String>();
+ ksession.setGlobal("list", list);
+ ksession.fireAllRules();
+ ksession.dispose();
- StatefulKnowledgeSession ksession = kagent.getKnowledgeBase()
- .newStatefulKnowledgeSession();
- List<String> list = new ArrayList<String>();
- ksession.setGlobal("list", list);
- ksession.fireAllRules();
- ksession.dispose();
+ assertEquals(2, list.size());
+ assertTrue(list.contains("rule1"));
+ assertTrue(list.contains("rule2"));
- assertEquals(2, list.size());
- assertTrue(list.contains("rule1"));
- assertTrue(list.contains("rule2"));
+ list.clear();
- 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);
- // 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 = this.createDefaultRule("rule3");
+ output = new BufferedWriter(new FileWriter(f1));
+ output.write(rule1);
+ output.close();
- 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);
+ this.waitUntilKBaseUpdate();
- ksession = kagent.getKnowledgeBase().newStatefulKnowledgeSession();
- list = new ArrayList<String>();
- ksession.setGlobal("list", list);
- ksession.fireAllRules();
- ksession.dispose();
+ ksession = kagent.getKnowledgeBase().newStatefulKnowledgeSession();
+ list = new ArrayList<String>();
+ ksession.setGlobal("list", list);
+ ksession.fireAllRules();
+ ksession.dispose();
- assertEquals(2, list.size());
+ assertEquals(2, list.size());
- assertTrue(list.contains("rule3"));
- assertTrue(list.contains("rule2"));
- kagent.monitorResourceChangeEvents(false);
- }
+ assertTrue(list.contains("rule3"));
+ assertTrue(list.contains("rule2"));
+ kagent.monitorResourceChangeEvents(false);
+ }
- public void testModifyDirectory() throws IOException, InterruptedException {
- // adds 2 files to a dir and executes then adds one and removes one and
- // detects changes
- 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");
+ public void testModifyDirectory() throws IOException, InterruptedException {
+ // adds 2 files to a dir and executes then adds one and removes one and
+ // detects changes
+ String rule1 = this.createDefaultRule("rule1");
+ File f1 = fileManager.newFile("rule1.drl");
- Writer output = new BufferedWriter(new FileWriter(f1));
- output.write(rule1);
- output.close();
+ 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 rule2 = this.createDefaultRule("rule2");
+ 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='"
- + f1.getParentFile().toURI().toURL() + "' type='DRL' />";
- xml += " </add> ";
- xml += "</change-set>";
- File newDir = fileManager.newFile("changeset");
- newDir.mkdir();
- File fxml = fileManager.newFile(newDir, "changeset.xml");
- output = new BufferedWriter(new FileWriter(fxml));
- output.write(xml);
- 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='"
+ + f1.getParentFile().toURI().toURL() + "' type='DRL' />";
+ xml += " </add> ";
+ xml += "</change-set>";
+ File newDir = fileManager.newFile("changeset");
+ newDir.mkdir();
+ File fxml = fileManager.newFile(newDir, "changeset.xml");
+ output = new BufferedWriter(new FileWriter(fxml));
+ output.write(xml);
+ output.close();
- // KnowledgeBuilder kbuilder =
- // KnowledgeBuilderFactory.newKnowledgeBuilder();
- // kbuilder.add( ResourceFactory.newUrlResource( fxml.toURI().toURL() ),
- // ResourceType.ChangeSet );
- // assertFalse( kbuilder.hasErrors() );
+ // KnowledgeBuilder kbuilder =
+ // KnowledgeBuilderFactory.newKnowledgeBuilder();
+ // kbuilder.add( ResourceFactory.newUrlResource( fxml.toURI().toURL() ),
+ // ResourceType.ChangeSet );
+ // assertFalse( kbuilder.hasErrors() );
- KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
- // kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );
+ KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
+ // kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );
- ResourceChangeScannerConfiguration sconf = ResourceFactory
- .getResourceChangeScannerService()
- .newResourceChangeScannerConfiguration();
- sconf.setProperty("drools.resource.scanner.interval", "2");
- ResourceFactory.getResourceChangeScannerService().configure(sconf);
+ KnowledgeAgent kagent = this.createKAgent(kbase);
- KnowledgeAgentConfiguration aconf = KnowledgeAgentFactory
- .newKnowledgeAgentConfiguration();
- aconf.setProperty("drools.agent.scanDirectories", "true");
- aconf.setProperty("drools.agent.newInstance", "true");
+ kagent.applyChangeSet(ResourceFactory.newUrlResource(fxml.toURI().toURL()));
+ kbaseUpdated = false;
- KnowledgeAgent kagent = KnowledgeAgentFactory.newKnowledgeAgent(
- "test agent", kbase, aconf);
- kagent.applyChangeSet(ResourceFactory.newUrlResource(fxml.toURI()
- .toURL()));
+ StatefulKnowledgeSession ksession = kagent.getKnowledgeBase().newStatefulKnowledgeSession();
+ List<String> list = new ArrayList<String>();
+ ksession.setGlobal("list", list);
+ ksession.fireAllRules();
+ ksession.dispose();
- Thread.sleep(3000); // give it 2 seconds to detect and build the changes
- StatefulKnowledgeSession ksession = kagent.getKnowledgeBase()
- .newStatefulKnowledgeSession();
- List<String> list = new ArrayList<String>();
- ksession.setGlobal("list", list);
- ksession.fireAllRules();
- ksession.dispose();
+ assertEquals(2, list.size());
+ assertTrue(list.contains("rule1"));
+ assertTrue(list.contains("rule2"));
- assertEquals(2, list.size());
- assertTrue(list.contains("rule1"));
- assertTrue(list.contains("rule2"));
+ list.clear();
- list.clear();
- String rule3 = "";
- rule3 += "package org.drools.test\n";
- rule3 += "global java.util.List list\n";
- rule3 += "rule rule3\n";
- rule3 += "when\n";
- rule3 += "then\n";
- rule3 += "list.add( drools.getRule().getName() );\n";
- rule3 += "end\n";
- File f3 = fileManager.newFile("rule3.drl");
- output = new BufferedWriter(new FileWriter(f3));
- output.write(rule3);
- output.close();
+ Thread.sleep(2000); // give it 2 seconds to detect and build the changes
+ String rule3 = this.createDefaultRule("rule3");
+ File f3 = fileManager.newFile("rule3.drl");
+ output = new BufferedWriter(new FileWriter(f3));
+ output.write(rule3);
+ output.close();
- assertTrue(f1.delete());
+ assertTrue(f1.delete());
- Thread.sleep(3000);
+ this.waitUntilKBaseUpdate();
- ksession = kagent.getKnowledgeBase().newStatefulKnowledgeSession();
- list = new ArrayList<String>();
- ksession.setGlobal("list", list);
- ksession.fireAllRules();
- ksession.dispose();
+ ksession = kagent.getKnowledgeBase().newStatefulKnowledgeSession();
+ list = new ArrayList<String>();
+ ksession.setGlobal("list", list);
+ ksession.fireAllRules();
+ ksession.dispose();
- assertEquals(2, list.size());
- assertTrue(list.contains("rule2"));
- assertTrue(list.contains("rule3"));
+ assertEquals(2, list.size());
+ assertTrue(list.contains("rule2"));
+ assertTrue(list.contains("rule3"));
- kagent.monitorResourceChangeEvents(false);
- }
+ kagent.monitorResourceChangeEvents(false);
+ }
- public void testModifyFileInDirectory() throws Exception {
- // Create the test directory
- File testDirectory = fileManager.newFile("test");
- testDirectory.mkdir();
+ public void testModifyFileInDirectory() throws Exception {
+ // Create the test directory
+ File testDirectory = fileManager.newFile("test");
+ testDirectory.mkdir();
- 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(testDirectory, "rule1.drl");
- Writer output = new BufferedWriter(new FileWriter(f1));
- output.write(rule1);
- output.close();
+ String rule1 = this.createDefaultRule("rule1");
+ File f1 = fileManager.newFile(testDirectory, "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(testDirectory, "rule2.drl");
- output = new BufferedWriter(new FileWriter(f2));
- output.write(rule2);
- output.close();
+ String rule2 = this.createDefaultRule("rule2");
+ File f2 = fileManager.newFile(testDirectory, "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='file:"
- + fileManager.getRootDirectory().getAbsolutePath()
- + "/test' type='DRL' />";
- xml += " </add> ";
- xml += "</change-set>";
- File fxml = fileManager.newFile("changeset.xml");
- output = new BufferedWriter(new FileWriter(fxml));
- output.write(xml);
- 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='file:"
+ + fileManager.getRootDirectory().getAbsolutePath()
+ + "/test' 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();
+ KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
- ResourceChangeScannerConfiguration sconf = ResourceFactory
- .getResourceChangeScannerService()
- .newResourceChangeScannerConfiguration();
- sconf.setProperty("drools.resource.scanner.interval", "2");
- ResourceFactory.getResourceChangeScannerService().configure(sconf);
+ KnowledgeAgent kagent = this.createKAgent(kbase);
- 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()));
+ kbaseUpdated = false;
- assertEquals("test agent", kagent.getName());
- kagent.applyChangeSet(ResourceFactory.newUrlResource(fxml.toURI()
- .toURL()));
+ StatefulKnowledgeSession ksession = kagent.getKnowledgeBase().newStatefulKnowledgeSession();
+ List<String> list = new ArrayList<String>();
+ ksession.setGlobal("list", list);
+ ksession.fireAllRules();
+ ksession.dispose();
- StatefulKnowledgeSession ksession = kagent.getKnowledgeBase()
- .newStatefulKnowledgeSession();
- List<String> list = new ArrayList<String>();
- ksession.setGlobal("list", list);
- ksession.fireAllRules();
- ksession.dispose();
+ assertEquals(2, list.size());
+ assertTrue(list.contains("rule1"));
+ assertTrue(list.contains("rule2"));
- assertEquals(2, list.size());
- assertTrue(list.contains("rule1"));
- assertTrue(list.contains("rule2"));
+ list.clear();
- 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);
- // 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 = this.createDefaultRule("rule3");
+ output = new BufferedWriter(new FileWriter(f1));
+ output.write(rule1);
+ output.close();
- 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);
+ this.waitUntilKBaseUpdate();
- ksession = kagent.getKnowledgeBase().newStatefulKnowledgeSession();
- list = new ArrayList<String>();
- ksession.setGlobal("list", list);
- ksession.fireAllRules();
- ksession.dispose();
+ ksession = kagent.getKnowledgeBase().newStatefulKnowledgeSession();
+ list = new ArrayList<String>();
+ ksession.setGlobal("list", list);
+ ksession.fireAllRules();
+ ksession.dispose();
- assertEquals(2, list.size());
+ assertEquals(2, list.size());
- assertTrue(list.contains("rule3"));
- assertTrue(list.contains("rule2"));
- kagent.monitorResourceChangeEvents(false);
- }
+ assertTrue(list.contains("rule3"));
+ assertTrue(list.contains("rule2"));
+ kagent.monitorResourceChangeEvents(false);
+ }
- public void testStatelessWithPipeline() 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");
+ public void testStatelessWithPipeline() throws Exception {
+ String rule1 = this.createDefaultRule("rule1");
+ File f1 = fileManager.newFile("rule1.drl");
- Writer output = new BufferedWriter(new FileWriter(f1));
- output.write(rule1);
- output.close();
+ 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 rule2 = this.createDefaultRule("rule2");
+ 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='"
- + f1.getParentFile().toURI().toURL() + "' type='DRL' />";
- xml += " </add> ";
- xml += "</change-set>";
- File newDir = fileManager.newFile("changeset");
- newDir.mkdir();
- File fxml = fileManager.newFile(newDir, "changeset.xml");
- output = new BufferedWriter(new FileWriter(fxml));
- output.write(xml);
- 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='"
+ + f1.getParentFile().toURI().toURL() + "' type='DRL' />";
+ xml += " </add> ";
+ xml += "</change-set>";
+ File newDir = fileManager.newFile("changeset");
+ newDir.mkdir();
+ File fxml = fileManager.newFile(newDir, "changeset.xml");
+ output = new BufferedWriter(new FileWriter(fxml));
+ output.write(xml);
+ output.close();
- KnowledgeAgentConfiguration aconf = KnowledgeAgentFactory
- .newKnowledgeAgentConfiguration();
- aconf.setProperty("drools.agent.scanDirectories", "true");
- aconf.setProperty("drools.agent.newInstance", "true");
+ KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
- KnowledgeAgent kagent = KnowledgeAgentFactory.newKnowledgeAgent(
- "test agent", aconf);
- kagent.applyChangeSet(ResourceFactory.newUrlResource(fxml.toURI()
- .toURL()));
+ KnowledgeAgent kagent = this.createKAgent(kbase);
- Thread.sleep(3000); // give it 2 seconds to detect and build the changes
- StatelessKnowledgeSession ksession = kagent
- .newStatelessKnowledgeSession();
+ kagent.applyChangeSet(ResourceFactory.newUrlResource(fxml.toURI().toURL()));
+ kbaseUpdated = false;
- List<String> list = new ArrayList<String>();
- ksession.setGlobal("list", list);
- Action executeResultHandler = PipelineFactory.newExecuteResultHandler();
+ StatelessKnowledgeSession ksession = kagent.newStatelessKnowledgeSession();
- Action assignResult = PipelineFactory.newAssignObjectAsResult();
- assignResult.setReceiver(executeResultHandler);
+ List<String> list = new ArrayList<String>();
+ ksession.setGlobal("list", list);
- KnowledgeRuntimeCommand batchExecution = PipelineFactory
- .newCommandExecutor();
- batchExecution.setReceiver(assignResult);
+ Action executeResultHandler = PipelineFactory.newExecuteResultHandler();
- KnowledgeRuntimeCommand insertStage = PipelineFactory
- .newInsertObjectCommand();
- insertStage.setReceiver(batchExecution);
+ Action assignResult = PipelineFactory.newAssignObjectAsResult();
+ assignResult.setReceiver(executeResultHandler);
- Pipeline pipeline = PipelineFactory
- .newStatelessKnowledgeSessionPipeline(ksession);
- pipeline.setReceiver(insertStage);
+ KnowledgeRuntimeCommand batchExecution = PipelineFactory.newCommandExecutor();
+ batchExecution.setReceiver(assignResult);
- ResultHandlerImpl resultHandler = new ResultHandlerImpl();
- pipeline.insert("hello", resultHandler);
+ KnowledgeRuntimeCommand insertStage = PipelineFactory.newInsertObjectCommand();
+ insertStage.setReceiver(batchExecution);
- assertEquals(2, list.size());
- assertTrue(list.contains("rule1"));
- assertTrue(list.contains("rule2"));
- }
+ Pipeline pipeline = PipelineFactory.newStatelessKnowledgeSessionPipeline(ksession);
+ pipeline.setReceiver(insertStage);
- private static void writePackage(Object pkg, File p1file)
- throws IOException, FileNotFoundException {
- FileOutputStream out = new FileOutputStream(p1file);
- try {
- DroolsStreamUtils.streamOut(out, pkg);
- } finally {
- out.close();
- }
- }
+ ResultHandlerImpl resultHandler = new ResultHandlerImpl();
+ pipeline.insert("hello", resultHandler);
- public static class ResultHandlerImpl implements ResultHandler {
- Object object;
+ assertEquals(2, list.size());
+ assertTrue(list.contains("rule1"));
+ assertTrue(list.contains("rule2"));
+ }
- public void handleResult(Object object) {
- this.object = object;
- }
+ private static void writePackage(Object pkg, File p1file)
+ throws IOException, FileNotFoundException {
+ FileOutputStream out = new FileOutputStream(p1file);
+ try {
+ DroolsStreamUtils.streamOut(out, pkg);
+ } finally {
+ out.close();
+ }
+ }
- public Object getObject() {
- return this.object;
- }
- }
-}
\ No newline at end of file
+ public static class ResultHandlerImpl implements ResultHandler {
+
+ Object object;
+
+ public void handleResult(Object object) {
+ this.object = object;
+ }
+
+ public Object getObject() {
+ return this.object;
+ }
+ }
+
+ private KnowledgeAgent createKAgent(KnowledgeBase kbase) {
+ 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");
+ // Testing incremental build here
+ aconf.setProperty("drools.agent.newInstance", "true");
+
+ KnowledgeAgent kagent = KnowledgeAgentFactory.newKnowledgeAgent(
+ "test agent", kbase, aconf);
+
+ kagent.addEventListener(new KnowledgeAgentEventListener() {
+
+ public void beforeChangeSetApplied(BeforeChangeSetAppliedEvent event) {
+ }
+
+ public void afterChangeSetApplied(AfterChangeSetAppliedEvent event) {
+ }
+
+ public void beforeChangeSetProcessed(BeforeChangeSetProcessedEvent event) {
+ }
+
+ public void afterChangeSetProcessed(AfterChangeSetProcessedEvent event) {
+ }
+
+ public void beforeResourceProcessed(BeforeResourceProcessedEvent event) {
+ }
+
+ public void afterResourceProcessed(AfterResourceProcessedEvent event) {
+ }
+
+ public void knowledgeBaseUpdated(KnowledgeBaseUpdatedEvent event) {
+ System.out.println("KBase was updated");
+ synchronized (lock) {
+ kbaseUpdated = true;
+ lock.notifyAll();
+ }
+ }
+
+ public void resourceCompilationFailed(ResourceCompilationFailedEvent event) {
+ }
+ });
+
+ assertEquals("test agent", kagent.getName());
+
+ return kagent;
+ }
+
+ private String createDefaultRule(String name){
+ return this.createDefaultRule(name, null);
+ }
+
+ private String createDefaultRule(String name, String packageName){
+ StringBuilder rule = new StringBuilder();
+ if (packageName == null){
+ rule.append("package org.drools.test\n");
+ }else{
+ rule.append("package ");
+ rule.append(packageName);
+ rule.append("\n");
+ }
+ rule.append("global java.util.List list\n");
+ rule.append("rule ");
+ rule.append(name);
+ rule.append("\n");
+ rule.append("when\n");
+ rule.append("then\n");
+ rule.append("list.add( drools.getRule().getName() );\n");
+ rule.append("end\n");
+
+ return rule.toString();
+ }
+
+ private void waitUntilKBaseUpdate() {
+ synchronized (lock) {
+ while (!kbaseUpdated) {
+ try {
+ lock.wait();
+ } catch (InterruptedException e) {
+ }
+ System.out.println("Waking up!");
+ }
+ kbaseUpdated = false;
+ }
+ }
+}
More information about the jboss-svn-commits
mailing list