Hi John,
Knowledge Agent is indeed the replacement of RuleAgent. It maintains a kbase and update it using change sets. A change set is an xml that list all the resources that the agent should take care of. In conjunction with ResouceChangeNotifier and ResourceChangeScanner you can use a knowledge agent to use packages exposed using guvnor.
Basically, the scanner will scan periodically a resource and find modifications. Whenever the resource changed, the scanner creates a change set and uses the Notifier to let the kagent know about the change.
The thing is that you need to setup an initial change set, so the agent can start working. Here is one way to do that:

                //Scanner and notifier work as services. They must be started though
                ResourceFactory.getResourceChangeNotifierService().start();
                ResourceFactory.getResourceChangeScannerService().start();

                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);

assertEquals("test agent", kagent.getName());

kagent.applyChangeSet(ResourceFactory.newUrlResource(fxml.toURI()
.toURL()));

StatefulKnowledgeSession ksession = kagent.getKnowledgeBase()
.newStatefulKnowledgeSession();


I took this code from kagent's test cases.
You can also create a new ChangeSetImpl by hand instead of use an xml file.

I hope you find this helpful.
If you have any other question, or you have doubts about this, feel free to ask!

Best,

2010/5/11 John Peterson <john.peterson.gv3k@statefarm.com>

Hi all,

Im trying to get the sample code in the Drools 5.0.1 User Manual to work locally for a Knowledge Agent, but Im missing some info (from my perspective) to get it to run.

Question #1:

From the User Manual (3.2.6):

KnowledgeAgent kagent =

          KnowledgeAgentFactory.newKnowledgeAgent( "MyAgent" );

kagent.applyChangeSet( ResourceFactory.newUrlResource( url ) );

KnowledgeBase kbase = kagent.getKnowledgeBase();

In the third line, what is url and how is it defined in the java code?  I dont know what to set up here to make it work.  Ive found this same code on multiple sites, but no answer to the question.

Question #2:

How do I set up a Change Set XML file?  I see the XML, but I dont know where to put the file and how to link it into the code.

Question #3:

Does KnowledgeAgent replace RuleAgent for invoking Guvnor-deployed packages in 5.0.1?  If so, how do you specify the url of the deployed package from Guvnor?

Sorry if my questions are ignorant.  Ive been trying to find these answers for several days and hit the point where I needed to get some help.

Thanks,

John


_______________________________________________
rules-users mailing list
rules-users@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users




--
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Esteban Aliverti