文档章节

OSGI--Drools

l
 lvk618
发布于 2016/06/15 09:13
字数 642
阅读 8
收藏 0

通过jar的形式读取规则文件

KieServices ks = KieServices.Factory.get();
        KieRepository kr = ks.getRepository();
        String drlFilePath = "deploy";
        String path = System.getProperty("user.dir") + File.separatorChar + drlFilePath + File.separatorChar;
        KieModule kModule = kr.addKieModule(ks.getResources().newFileSystemResource(new File(path+"drools-example-1.0.0-SNAPSHOT.jar")));
        KieModule kModule = kr.addKieModule(ks.getResources().newFileSystemResource(new File(path+getDrlFileName())));
        KieContainer kContainer = ks.newKieContainer(kModule.getReleaseId());
        KieSession ksession = kContainer.newKieSession("OutwardsPay");

        /**
        *规则数据定义
        */
         GlobalDataBean.AllThrPayList = new ArrayList(){{add("a");add("b");add("c");}};
        //支持银行列表
        GlobalDataBean.BankPayMap.put("1000",new ArrayList(){{add("a");add("b");}});
        GlobalDataBean.BankPayMap.put("1111",new ArrayList(){{add("a");add("c");}});
        GlobalDataBean.SubjectPayMap.put("two",new ArrayList(){{add("a");add("c");}});

        GlobalDataBean.ClosingPay = new ArrayList<String>(){{add("lianlian");}};


        //设置具体数据
        PaymentBean paymentBean = new PaymentBean();
        paymentBean.setOrder_id("123456789");
        paymentBean.setTo_bank_code("1000");
        paymentBean.subject="two";
        ksession.insert(paymentBean);


        //规则执行
        int count =  ksession.fireAllRules();
        ksession.dispose();

        //打印结果
        System.out.println("主体"+paymentBean.getSubject()+"指定第三方支付渠道 :"+paymentBean.getSubjectPayList());
        System.out.println("支持银行["+paymentBean.to_bank_code+"] 第三方支付渠道列表:"+paymentBean.getBankPayList());

        System.out.println("停业的第三方支付渠道 :"+GlobalDataBean.ClosingPay);
        System.out.println("执行结果第三方支付渠道 :"+paymentBean.getThrPayList());


public class GlobalDataBean {


    public   static Map<String,List> SubjectPayMap = new HashMap();// 主体指定第三方支付渠道
    public static  Map<String,List> BankPayMap = new HashMap();// 第三方支付渠道支持的银行,key 银行编号,list 第三方支付渠道列表
    public  static List<String>  ClosingPay = new ArrayList<>();
    public static List<String> AllThrPayList = new ArrayList();//全部第三方支付列表

}

public class PaymentBean {

    public String order_id; // required
    public String to_bank_code; // required
    public double trans_amount; // required
    public String subject;
    public List<String> subjectPayList = new ArrayList(); //主体指定第三方支付渠道
    public List<String> bankPayList = new ArrayList();// 支持某个银行的第三方支付渠道

    private List<String> thrPayList = GlobalDataBean.AllThrPayList;

    public String getOrder_id() {
        return order_id;
    }

    public void setOrder_id(String order_id) {
        this.order_id = order_id;
    }

    public String getTo_bank_code() {
        return to_bank_code;
    }

    public void setTo_bank_code(String to_bank_code) {
        this.to_bank_code = to_bank_code;
    }

    public double getTrans_amount() {
        return trans_amount;
    }

    public void setTrans_amount(double trans_amount) {
        this.trans_amount = trans_amount;
    }

    public String getSubject() {
        return subject;
    }

    public void setSubject(String subject) {
        this.subject = subject;
    }

    public List<String> getSubjectPayList() {
        return subjectPayList;
    }

    public void setSubjectPayList(List<String> subjectPayList) {
        this.subjectPayList = subjectPayList;
        //
        setThrPayList(subjectPayList);
    }

    public List<String> getBankPayList() {
        return bankPayList;
    }

    public void setBankPayList(List<String> bankPayList) {
        this.bankPayList = bankPayList;
        List<String> temp = new ArrayList<>();
        //获取共同存在的支付渠道
        for(String pay : bankPayList)
        {
            if(thrPayList.contains(pay))
            {
                temp.add(pay);
            }
        }
        setThrPayList(temp);
    }

    public List<String> getThrPayList() {
        return thrPayList;
    }

    public void setThrPayList(List thrPayList) {
        this.thrPayList = thrPayList;
    }


}

2、创建规则文件drl

//==================================subject
rule "payment_subject"
   // ruleflow-group "payment_bank"
   no-loop
   lock-on-active
   salience 100
    when
      $p:PaymentBean()
      eval (GlobalDataBean.SubjectPayMap.containsKey($p.subject))
    then

       modify($p){setSubjectPayList((List)GlobalDataBean.SubjectPayMap.get($p.subject))}
end
//==================================支持银行列表
rule "payment_bank"
   // ruleflow-group "payment_bank"
   no-loop
   lock-on-active
   salience 90
    when
       $p:PaymentBean()
       if (GlobalDataBean.BankPayMap.containsKey($p.to_bank_code)) break [addList]
    then
       $p.bankPayList = []; //全部第三方支付渠道都不支持的银行
    then[addList]
       modify($p){setBankPayList((List)GlobalDataBean.BankPayMap.get($p.to_bank_code))};
end

//=====================================支持时间段(渠道)
rule "payment_time"
   // ruleflow-group "payment_time"
   no-loop
   lock-on-active
  salience 80
    when
      $p:PaymentBean()
      $closingPay:String()  from GlobalDataBean.ClosingPay //循环处理停业第三方支付渠道
    then
       modify($p){getThrPayList().remove($closingPay)};
end

3、指向规则文件配置kmodule.xml

<?xml version="1.0" encoding="UTF-8"?>
<kmodule xmlns="http://jboss.org/kie/6.0.0/kmodule">
	<kbase name="OutwardsPay" packages="com..payment">
		<ksession name="OutwardsPay" />
	</kbase>
</kmodule>

4、这样子后,将bundle打包后放在deploy文件夹中,运行就可以执行,并得到根据规则的结果。

本文转载自:http://blog.csdn.net/lk10207160511/article/details/51166838

l
粉丝 3
博文 80
码字总数 792
作品 0
广州
私信 提问
利用 R-OSGi 实现分布式 OSGi 应用

OSGi(Open Service Gateway Initiative)是业界中最知名的 Java 模块化技术规范,其核心设计思想是面向服务的组件模型(Service-Oriented Component Model)。OSGi 发展至今已经得到了众多企...

IBMdW
2012/06/27
1K
2
探索 Eclipse 的 OSGi 控制台

从 V3.0 开始,Eclipse 通过选择开放服务网关协议(Open Services Gateway Initiative,OSGi)来替换先前版本中不稳定的 Eclipse 插件技术,从而实现了一次巨大飞跃。这次转变对于用户来说几...

银月光海
2014/04/11
128
1
OSGi 4.2 规范正式发布

OSGi 联盟 前天 发布了 OSGi 4.2 规范。虽然早期草稿已经早己可用,但这是最终规范发布版本。 一些 OSGi 实现,例如 Equinox 3.5 与 Felix 2.0 早已针对 OSGi 4.2 规范做了一些兼容实现,但当...

红薯
2009/09/26
2.3K
0
分享一个查看java源代码的网站grepcode

http://grepcode.com/faq#search-q What can I search for on GrepCode ? GrepCode can be used to find: Java projects Java classes, interfaces, enums, annotations (Java Types) Java m......

asdfsx
2011/03/18
3.4K
0
android利用apkplug框架实现主应用与插件通讯(传递任意对象)实现UI替换

时光匆匆,乍一看已半年过去了,经过这半年的埋头苦干今天终于有满血复活了。 利用apkplug框架实现动态替换宿主Activity中的UI元素,以达到不用更新应用就可以更换UI样式的目的。 先看效果图:...

梁大帅
2014/04/29
679
1

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周一乱弹 —— 人生,还真是到处是意外

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @这次装个文艺青年吧 :#今日歌曲推荐# 分享lil peep的单曲《High School》 《High School》- lil peep 手机党少年们想听歌,请使劲儿戳(这里...

小小编辑
46分钟前
19
2
Spring使用ThreadPoolTaskExecutor自定义线程池及实现异步调用

多线程一直是工作或面试过程中的高频知识点,今天给大家分享一下使用 ThreadPoolTaskExecutor 来自定义线程池和实现异步调用多线程。 一、ThreadPoolTaskExecutor 本文采用 Executors 的工厂...

CREATE_17
今天
6
0
CSS盒子模型

CSS盒子模型 组成: content --> padding --> border --> margin 像现实生活中的快递: 物品 --> 填充物 --> 包装盒 --> 盒子与盒子之间的间距 content :width、height组成的 内容区域 padd......

studywin
今天
7
0
修复Win10下开始菜单、设置等系统软件无法打开的问题

因为各种各样的原因导致系统文件丢失、损坏、被修改,而造成win10的开始菜单、设置等系统软件无法打开的情况,可以尝试如下方法解决 此方法只在部分情况下有效,但值得一试 用Windows键+R打开...

locbytes
昨天
10
0
jquery 添加和删除节点

本文转载于:专业的前端网站➺jquery 添加和删除节点 // 增加一个三和一节点function addPanel() { // var newPanel = $('.my-panel').clone(true) var newPanel = $(".triple-panel-con......

前端老手
昨天
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部