最近在研究规则引擎的东东。网上找了下,单说drools的文章不少,单独讲JSR94的文章并不多见。现把drools的JSR写法整理发上来,供自己记录,供大家参考。
?
调用入口:JSR94Sample.java
?
package info.syang.stu1;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.Reader;
import java.rmi.RemoteException;
import java.util.Arrays;
import java.util.HashMap;
import javax.rules.ConfigurationException;
import javax.rules.InvalidRuleSessionException;
import javax.rules.RuleExecutionSetNotFoundException;
import javax.rules.RuleRuntime;
import javax.rules.RuleServiceProvider;
import javax.rules.RuleServiceProviderManager;
import javax.rules.RuleSessionCreateException;
import javax.rules.RuleSessionTypeUnsupportedException;
import javax.rules.StatelessRuleSession;
import javax.rules.admin.LocalRuleExecutionSetProvider;
import javax.rules.admin.RuleAdministrator;
import javax.rules.admin.RuleExecutionSet;
import javax.rules.admin.RuleExecutionSetCreateException;
import javax.rules.admin.RuleExecutionSetRegisterException;
import org.drools.jsr94.rules.RuleServiceProviderImpl;
/**
* Drools的JSR94实现形式
* @author yangsong
*
*/
public class JSR94Sample {
private RuleServiceProvider ruleProvider;
public void run(){
String uri = RuleServiceProviderImpl.RULE_SERVICE_PROVIDER;
try{
//1.注册ruleProvider,并且从RuleServiceProviderManager获取ruleProvider
RuleServiceProviderManager.registerRuleServiceProvider(uri, RuleServiceProviderImpl.class);
ruleProvider = RuleServiceProviderManager.getRuleServiceProvider(uri);
HashMap<String,String> properties = new HashMap<String,String>();
//2.获取RuleAdministrator实例,获取RuleExectuionSetProvider
RuleAdministrator admin = ruleProvider.getRuleAdministrator();
LocalRuleExecutionSetProvider ruleExecutionSetProvider = admin.getLocalRuleExecutionSetProvider(properties);
//3.创建RuleExecutionSet
Reader reader = new InputStreamReader(getClass().getClassLoader().getResourceAsStream("info/syang/stu1/addpoint.drl"));
RuleExecutionSet reSet = ruleExecutionSetProvider.createRuleExecutionSet(reader, properties);
//4.注册RuleExecutionSet
admin.registerRuleExecutionSet("mysample",reSet,properties);
//5.获取RuleRuntime, 创建会话
RuleRuntime runtime = ruleProvider.getRuleRuntime();
StatelessRuleSession ruleSession = (StatelessRuleSession)runtime.createRuleSession("mysample",null,RuleRuntime.STATELESS_SESSION_TYPE);
//6.运行实例
PointDomain pointDomain = new PointDomain();
fillPointDomain(pointDomain);
ruleSession.executeRules(Arrays.asList(pointDomain));
// @SuppressWarnings("unchecked")
// List<PointDomain> results = (List<PointDomain>)ruleSession.executeRules(Arrays.asList(pointDomain));
System.out.println("执行完毕BillThisMonth:"+ pointDomain.getBillThisMonth());
System.out.println("执行完毕BuyMoney:" + pointDomain.getBuyMoney());
System.out.println("执行完毕BuyNums:" + pointDomain.getBuyNums());
System.out.println("执行完毕规则引擎决定发送积分:" + pointDomain.getPoint());
}catch(ConfigurationException e){
e.printStackTrace();
} catch (RemoteException e) {
e.printStackTrace();
} catch (RuleExecutionSetCreateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (RuleExecutionSetRegisterException e) {
e.printStackTrace();
} catch (RuleSessionTypeUnsupportedException e) {
e.printStackTrace();
} catch (RuleSessionCreateException e) {
e.printStackTrace();
} catch (RuleExecutionSetNotFoundException e) {