[jboss-user] [JBoss jBPM] - Re: How to invoke rules(drools) from a jBPM

rinki do-not-reply at jboss.com
Tue Nov 4 08:18:48 EST 2008


Below are the files:

1. File for invoking jbpm process
package com.sample.test;

import org.jbpm.graph.def.ProcessDefinition;
import org.jbpm.graph.exe.ProcessInstance;

public class TestDroolsInvocation {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		
		ProcessDefinition definition = ProcessDefinition.parseXmlResource("JbpmDroolsExample/processdefinition.xml");
		
		ProcessInstance instance = new ProcessInstance(definition);
		
		instance.signal();
		
		//instance.signal();
		
		System.out.println("Ended!!!");
	}

}

2. File where rules are invoked(Actionhandler)

package com.sample.action;

import org.jbpm.graph.def.ActionHandler;
import org.jbpm.graph.exe.ExecutionContext;
import org.drools.RuleBase;
import org.drools.RuleBaseFactory;
import org.drools.WorkingMemory;
import org.drools.compiler.DrlParser;
import org.drools.compiler.PackageBuilder;
import org.drools.lang.descr.PackageDescr;
import org.drools.rule.Package;

import java.io.*;

public class FireRulesActionHandler implements ActionHandler {

	private static final long serialVersionUID = 1L;
	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 {
		try {
	        	
	        	//load up the rulebase
	            RuleBase ruleBase = readRule();
	            WorkingMemory workingMemory = ruleBase.newStatefulSession();
	            
	            //go !
	            Message message = new Message();
	            message.setMessage(  "Hello World" );
	            message.setStatus( Message.LikesCheese );
	            workingMemory.insert( message );
	            workingMemory.fireAllRules();   
	        	            
	        } catch (Throwable t) {
	            t.printStackTrace();
	        }
	}
	private static RuleBase readRule() throws Exception {
		//read in the source
		Reader source = new InputStreamReader( FireRulesActionHandler.class.getResourceAsStream("E:/jBPM/workspace/InvokingDrools/src/main/java/com/sample/rules/CheeseRules.drl"));
	    
	 	//Reader source = new InputStreamReader(FireRulesActionHandler.class.getResourceAsStream(ruleFile));
	 	DrlParser parser = new DrlParser();
	    PackageDescr packageDescr = parser.parse(source);

	    // pre build the package
	    PackageBuilder builder = new PackageBuilder();
	    builder.addPackage(packageDescr);
	    Package pkg = builder.getPackage();


		/*PackageBuilder builder = new PackageBuilder();

		builder.addPackageFromDrl( source );

		Package pkg = builder.getPackage();*/
		
		//add the package to a rulebase (deploy the rule package).
		RuleBase ruleBase = RuleBaseFactory.newRuleBase();
		ruleBase.addPackage( pkg );
		return ruleBase;
	}
 	
	public static class Message {
		public static final int LikesCheese = 0;
		public static final int GOODBYE = 1;
		
		private String message;
		
		private int status;
		
		public String getMessage() {
			return this.message;
		}
		
		public void setMessage(String message) {
			this.message = message;
		}
		
		public int getStatus() {
			return this.status;
		}
		
		public void setStatus( int status ) {
			this.status = status;
		}
	}
}
	
3. CheeseRules.drl
#created on: Nov 4, 2008
package src.main.rules

import com.sample.action.FireRulesActionHandler.Message;


rule "Bob Likes Cheese"
	
	when
		m : Message( status == Message.LikesCheese, message : message )
	then 
		System.out.println( message ); 
		m.setMessage( "Bob enjoys eating cheese" );
		m.setStatus( Message.GOODBYE );
		update( m );
end

rule "GoodBye"
	when
		Message( status == Message.GOODBYE, message : message )
	then
		System.out.println( message );
end

Everything is present in jbpm project.

Regards,
Ruchika



View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4186681#4186681

Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4186681



More information about the jboss-user mailing list