漫话规则引擎(4): Java规则引擎规范:JSR94

5 代码示例

下面是使用Drools作为规则引擎实例的一个例子,规则文件使用了Drools的drl格式:

JSR94Sample.java

package com.sample;

import java.io.FileReader;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

import javax.rules.ConfigurationException;
import javax.rules.RuleRuntime;
import javax.rules.RuleServiceProvider;
import javax.rules.RuleServiceProviderManager;
import javax.rules.StatelessRuleSession;
import javax.rules.admin.LocalRuleExecutionSetProvider;
import javax.rules.admin.RuleAdministrator;
import javax.rules.admin.RuleExecutionSet;

import org.drools.jsr94.rules.RuleServiceProviderImpl;

public class JSR94Sample {
    private static RuleServiceProvider ruleProvider;

    private static void initProvider(){
        String uri = RuleServiceProviderImpl.RULE_SERVICE_PROVIDER;
        Class providerClass = RuleServiceProviderImpl.class;

        try{
            //注册ruleProvider
            RuleServiceProviderManager.registerRuleServiceProvider(uri, providerClass);

            //从RuleServiceProviderManager获取ruleProvider
            ruleProvider = RuleServiceProviderManager.getRuleServiceProvider(uri);
        }catch(ConfigurationException e){
            e.printStackTrace();
        }
    }

    private static void adminSample(){

        try{
            //获取RuleAdministrator实例
            RuleAdministrator admin = ruleProvider.getRuleAdministrator();

            //获取RuleExectuionSetProvider
            HashMap properties = new HashMap();
            properties.put("name", "My Rules");
            properties.put("description", "A trivial rulebase");

            LocalRuleExecutionSetProvider ruleExecutionSetProvider = admin.getLocalRuleExecutionSetProvider(properties);

            //创建RuleExecutionSet
            FileReader reader = new FileReader("bin/sample.drl");
            RuleExecutionSet reSet = ruleExecutionSetProvider.createRuleExecutionSet(reader, properties);

            //注册RuleExecutionSet
            admin.registerRuleExecutionSet("mysample",reSet,properties);
        }catch(Exception e){
            e.printStackTrace();
        }

    }

    private static void runtimeSampe(){
        try{
            //获取RuleRuntime, 创建会话
            RuleRuntime runtime = ruleProvider.getRuleRuntime();
            StatelessRuleSession ruleSession = (StatelessRuleSession)runtime.createRuleSession("mysample",null,RuleRuntime.STATELESS_SESSION_TYPE);

            //初始化输入数据
            Message message1 = new Message();
            message1.setMessage("Hello World");
            message1.setStatus(Message.HELLO);

            Message message2 = new Message();
            message2.setMessage("Goodbye World");
            message2.setStatus(Message.GOODBYE);

            List inputs = new ArrayList();
            inputs.add(message1);
            inputs.add(message2);

            //执行规则
            List results = ruleSession.executeRules(inputs);
            for(int i=0;i){
                Message msg = results.get(i);
                System.out.println(msg.message);
            }

            //释放会话资源
            ruleSession.release();

        }catch(Exception e){
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        initProvider();
        adminSample();
        runtimeSampe();
    }

    public static class Message {

        public static final int HELLO = 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;
        }

    }

}

规则文件使用的就是在这里使用的例子。

Original: https://www.cnblogs.com/holbrook/archive/2012/12/07/2807026.html
Author: 心内求法
Title: 漫话规则引擎(4): Java规则引擎规范:JSR94

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/539306/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球