[jboss-user] [jBPM] - Integration with Drools
Shobhit Tyagi
do-not-reply at jboss.com
Fri Dec 17 04:45:14 EST 2010
roxy1987 [http://community.jboss.org/people/roxy1987] created the discussion
"Integration with Drools"
To view the discussion, visit: http://community.jboss.org/message/576585#576585
--------------------------------------------------------------
Hi, I am trying to invoke the rules with jBPM. My class definition is following :
package com.jboss.dvd.seam;
import org.drools.PackageIntegrationException;
import org.drools.RuleBase;
import org.drools.RuleBaseFactory;
import org.drools.RuleIntegrationException;
import org.drools.WorkingMemory;
import org.drools.compiler.DrlParser;
import org.drools.compiler.DroolsParserException;
import org.drools.compiler.PackageBuilder;
import org.drools.lang.descr.PackageDescr;
import org.drools.reteoo.*;
import org.drools.rule.InvalidPatternException;
import org.drools.rule.Package;
import org.jbpm.context.exe.ContextInstance;
import org.jbpm.graph.def.ActionHandler;
import org.jbpm.graph.exe.ExecutionContext;
import java.io.*;
import java.util.Iterator;
import java.util.List;
public class FireRulesActionHandler implements ActionHandler {
private static final long serialVersionUID = 1L;
public List objectNames;
public static String ruleFile;
/**
* The FireRulesActionHandler gets variables from the Instance, and asserts
* them into the Rules Engine and invokes the rules.
*/
public void execute(ExecutionContext executionContext) throws Exception {
// load up the rulebase
RuleBase ruleBase = readRule();
WorkingMemory workingMemory = ruleBase.newWorkingMemory();
// load the data
Object object = null;
System.out.println(objectNames.toString());
Iterator iter = objectNames.iterator();
String objectName = "";
ContextInstance ci = executionContext.getContextInstance();
while (iter.hasNext()) {
objectName = (String) iter.next();
object = ci.getVariable(objectName);
System.out.println("object name is: " + objectName);
// assert the object into the rules engine
workingMemory.assertObject(object);
}
// assert the contextInstance so that it may be used to set results
workingMemory.assertObject(ci);
workingMemory.fireAllRules();
}
/**
* Please note that this is the "low level" rule assembly API.
*/
private static RuleBase readRule() throws IOException, DroolsParserException, RuleIntegrationException, PackageIntegrationException, InvalidPatternException {
// read in the source
Reader reader = new InputStreamReader(FireRulesActionHandler.class.getResourceAsStream(ruleFile));
DrlParser parser = new DrlParser();
PackageDescr packageDescr = parser.parse(reader);
// pre build the package
PackageBuilder builder = new PackageBuilder();
builder.addPackage(packageDescr);
Package pkg = builder.getPackage();
// add the package to a rulebase
RuleBase ruleBase = RuleBaseFactory.newRuleBase();
ruleBase.addPackage(pkg);
return ruleBase;
}
}
1. First thing is that, it is not able to recognize the function newWorkingMemory().
2. Secondly the function assertObject(Object) is also reported undefined.
Please Help.
Thanks
--------------------------------------------------------------
Reply to this message by going to Community
[http://community.jboss.org/message/576585#576585]
Start a new discussion in jBPM at Community
[http://community.jboss.org/choose-container!input.jspa?contentType=1&containerType=14&container=2034]
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/jboss-user/attachments/20101217/ab1f61e5/attachment-0001.html
More information about the jboss-user
mailing list