spring和Drools规则引擎的使用

Easter79
• 阅读 747

Drools5.2.0.Final与Spring3集成测试

在drools5.2,有一个jar包:drools-spring-5.2.0.Final.jar,其中定义了在spring中应用的drools的扩展。通过这些扩展,可以直接在spring的配置文件中,配置knowledgebase、session等bean,从而在spring配置的程序中直接应用。

drools-spring-5.2.0.Final.jar在droolsjbpm-integration-distribution-5.2.0.Final\binaries文件夹下。

登录例子部分代码:

spring和Drools规则引擎的使用

beans.xml

Xml代码 spring和Drools规则引擎的使用   spring和Drools规则引擎的使用 spring和Drools规则引擎的使用

  1. <beans xmlns="http://www.springframework.org/schema/beans"
  2. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
  3. xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
  4. xmlns:p="http://www.springframework.org/schema/p"
  5. xsi:schemaLocation="http://www.springframework.org/schema/beans
  6. http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
  7. http://www.springframework.org/schema/context
  8. http://www.springframework.org/schema/context/spring-context-3.0.xsd
  9. http://www.springframework.org/schema/tx
  10. http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
  11. http://www.springframework.org/schema/aop
  12. http://www.springframework.org/schema/aop/spring-aop-3.0.xsd"\>
  13. <import resource="classpath:com/jsptpd/rjy/zyj/drools/beans-drools.xml"/>
  14. </beans>
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
    xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
    xmlns:p="http://www.springframework.org/schema/p"
    xsi:schemaLocation="http://www.springframework.org/schema/beans   
         http://www.springframework.org/schema/beans/spring-beans-3.0.xsd   
         http://www.springframework.org/schema/context   
         http://www.springframework.org/schema/context/spring-context-3.0.xsd   
         http://www.springframework.org/schema/tx   
         http://www.springframework.org/schema/tx/spring-tx-3.0.xsd   
         http://www.springframework.org/schema/aop    
         http://www.springframework.org/schema/aop/spring-aop-3.0.xsd"> 
     <import resource="classpath:com/jsptpd/rjy/zyj/drools/beans-drools.xml"/>
</beans>

 

beans-drools.xml

Xml代码 spring和Drools规则引擎的使用   spring和Drools规则引擎的使用 spring和Drools规则引擎的使用

  1. <beans xmlns="http://www.springframework.org/schema/beans"

  2. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

  3. xmlns:drools="http://drools.org/schema/drools-spring"

  4. xmlns:camel="http://camel.apache.org/schema/spring"

  5. xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd

  6. http://drools.org/schema/drools-spring http://anonsvn.jboss.org/repos/labs/labs/jbossrules/trunk/drools-container/drools-spring/src/main/resources/org/drools/container/spring/drools-spring-1.0.0.xsd

  7. http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd"\>

  8. <drools:kbase id="kbase1">

  9. drools:resources\

  10. <drools:resource type="DRL" source="classpath:Login.drl"/>

  11. </drools:resources>

  12. </drools:kbase>

  13. <drools:ksession id="ksession1" type="stateful" kbase="kbase1"/>

  14. <bean id="vip" class="com.jsptpd.rjy.zyj.pojo.Vip" />

  15. <bean id="loginService" class="com.jsptpd.rjy.zyj.service.LoginServiceImpl" >

  16. <property name="vip" ref="vip" />

  17. </bean>

  18. </beans>

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:drools="http://drools.org/schema/drools-spring" 
       xmlns:camel="http://camel.apache.org/schema/spring"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
                           http://drools.org/schema/drools-spring http://anonsvn.jboss.org/repos/labs/labs/jbossrules/trunk/drools-container/drools-spring/src/main/resources/org/drools/container/spring/drools-spring-1.0.0.xsd
                           http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd">

  <drools:kbase id="kbase1">
     <drools:resources>
          <!--不是<drools:resource type="DRL" source="classpath:com/jsptpd/rjy/zyj/service/Login.drl"/> -->
         <drools:resource type="DRL" source="classpath:Login.drl"/>
     </drools:resources>
  </drools:kbase>

  <drools:ksession id="ksession1" type="stateful" kbase="kbase1"/>

   <bean id="vip" class="com.jsptpd.rjy.zyj.pojo.Vip" />
   <bean id="loginService" class="com.jsptpd.rjy.zyj.service.LoginServiceImpl" >
        <property name="vip" ref="vip" />
   </bean>
</beans>

 

LoginTest.java

Java代码 spring和Drools规则引擎的使用   spring和Drools规则引擎的使用 spring和Drools规则引擎的使用

  1. package com.jsptpd.rjy.zyj.junit;

  2. import org.drools.runtime.StatefulKnowledgeSession;

  3. import org.junit.Test;

  4. import org.springframework.context.support.ClassPathXmlApplicationContext;

  5. import com.jsptpd.rjy.zyj.service.LoginServiceImpl;

  6. public class LoginTest {

  7. @Test

  8. public void testLogin(){

  9. ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext( "beans.xml" );

  10. LoginServiceImpl loginServiceImpl= (LoginServiceImpl) context.getBean( "loginService" );

  11. StatefulKnowledgeSession kstateless = (StatefulKnowledgeSession) context.getBean( "ksession1" );

  12. loginServiceImpl.checkLogin(kstateless);

  13. System.out.println("aa");

  14. }

  15. }

package com.jsptpd.rjy.zyj.junit;

import org.drools.runtime.StatefulKnowledgeSession;
import org.junit.Test;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.jsptpd.rjy.zyj.service.LoginServiceImpl;

public class LoginTest {
    @Test
    public void testLogin(){
           ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext( "beans.xml" );
        LoginServiceImpl loginServiceImpl= (LoginServiceImpl) context.getBean( "loginService" );
        StatefulKnowledgeSession kstateless = (StatefulKnowledgeSession) context.getBean( "ksession1" );
        loginServiceImpl.checkLogin(kstateless);
        System.out.println("aa");
    }
}

 

LoginServiceImpl.java

Java代码 spring和Drools规则引擎的使用   spring和Drools规则引擎的使用 spring和Drools规则引擎的使用

  1. package com.jsptpd.rjy.zyj.service;

  2. import org.drools.runtime.StatefulKnowledgeSession;

  3. import org.drools.runtime.StatelessKnowledgeSession;

  4. import org.springframework.context.support.ClassPathXmlApplicationContext;

  5. import com.jsptpd.rjy.zyj.pojo.Vip;

  6. public class LoginServiceImpl {

  7. private Vip vip;

  8. public Vip getVip() {

  9. return vip;

  10. }

  11. public void setVip(Vip vip) {

  12. this.vip = vip;

  13. }

  14. public void checkLogin(StatefulKnowledgeSession kstateless ){

  15. System.out.println("s");

  16. kstateless.insert(vip);

  17. kstateless.fireAllRules();

  18. kstateless.dispose();

  19. System.out.println("e");

  20. }

  21. public static boolean checkDB(String name,String password){

  22. //实际可以到数据库匹配

  23. return name.trim().equals("jack")&&password.trim().equals("123");

  24. }

  25. }

package com.jsptpd.rjy.zyj.service;

import org.drools.runtime.StatefulKnowledgeSession;
import org.drools.runtime.StatelessKnowledgeSession;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.jsptpd.rjy.zyj.pojo.Vip;

public class LoginServiceImpl {
        private Vip vip;

        public Vip getVip() {
            return vip;
        }

        public void setVip(Vip vip) {
            this.vip = vip;
        }
           
        public void checkLogin(StatefulKnowledgeSession kstateless ){
            System.out.println("s");
            kstateless.insert(vip);
            kstateless.fireAllRules();
            kstateless.dispose();
            System.out.println("e");
        }
         
        public static boolean checkDB(String name,String password){
            //实际可以到数据库匹配
            return name.trim().equals("jack")&&password.trim().equals("123");
        }
        
}

 

Login.drl

Java代码 spring和Drools规则引擎的使用   spring和Drools规则引擎的使用 spring和Drools规则引擎的使用

  1. #created on: 2011-10-24

  2. package com.jsptpd.rjy.zyj.service

  3. #list any import classes here.

  4. import com.jsptpd.rjy.zyj.pojo.Vip;

  5. import java.io.Console;

  6. import java.util.Scanner;

  7. import com.jsptpd.rjy.zyj.service.LoginServiceImpl

  8. #declare any global variables here

  9. rule "vip初次登录"

  10. salience 100

  11. when

  12. $vip:Vip((name==null||name=="")&&

  13. (password==null||password=="") )

  14. then

  15. String tempName;

  16. String tempPassword;

  17. Console console=System.console();

  18. Scanner scanner = new Scanner(System.in);

  19. System.out.print("请输入用户名: ");

  20. tempName=(console!=null?console.readLine():scanner.nextLine());

  21. System.out.print("请输入密码: ");

  22. tempPassword=(console!=null?new String(console.readPassword()):scanner.nextLine());

  23. $vip.setName(tempName.trim());

  24. $vip.setPassword(tempPassword.trim());

  25. update($vip);

  26. end

  27. rule "没有输入密码"

  28. salience 90

  29. when

  30. $vip:Vip((name!=null&&name!="")&&

  31. (password==null||password==""),$name:name)

  32. then

  33. String tempPassword="";

  34. Console console=System.console();

  35. Scanner scanner = new Scanner(System.in);

  36. System.out.print("请输入密码: ");

  37. tempPassword=(console!=null?new String(console.readPassword()):scanner.nextLine());

  38. $vip.setPassword(tempPassword.trim());

  39. update($vip);

  40. end

  41. rule "没有输入用户名"

  42. salience 90

  43. when

  44. $vip:Vip((name==null||name=="")&&

  45. (password!=null&&password!=""),$password:password )

  46. then

  47. String tempName="";

  48. Scanner scanner = new Scanner(System.in);

  49. System.out.print("请输入用户名: ");

  50. tempName=scanner.nextLine();

  51. $vip.setName(tempName.trim());

  52. update($vip);

  53. end

  54. rule "输入正确的用户名和密码"

  55. salience 80

  56. when

  57. $vip:Vip((name!=null&&name!=""),

  58. (password!=null&&password!=""),LoginServiceImpl.checkDB(name,password) )

  59. then

  60. System.out.print(" 欢迎 !!!"+$vip.getName());

  61. end

  62. rule "输入错误的用户名和密码"

  63. salience 80

  64. when

  65. $vip:Vip((name!=null&&name!=""),

  66. (password!=null&&password!=""),!LoginServiceImpl.checkDB(name,password) )

  67. then

  68. System.out.print(" 输入错误用户名或密码,请重新输入 !!!\n");

  69. $vip.setName("");

  70. $vip.setPassword("");

  71. update($vip);

  72. end

#created on: 2011-10-24
package com.jsptpd.rjy.zyj.service

#list any import classes here.
import com.jsptpd.rjy.zyj.pojo.Vip;
import java.io.Console;
import java.util.Scanner;
import com.jsptpd.rjy.zyj.service.LoginServiceImpl

#declare any global variables here




rule "vip初次登录"
    salience 100
    when
        $vip:Vip((name==null||name=="")&&
                 (password==null||password=="") )
    then
        String tempName;
        String tempPassword;
        Console console=System.console();
        Scanner scanner = new Scanner(System.in);
        System.out.print("请输入用户名: ");    
        tempName=(console!=null?console.readLine():scanner.nextLine());
        System.out.print("请输入密码: ");
        tempPassword=(console!=null?new String(console.readPassword()):scanner.nextLine());
        $vip.setName(tempName.trim());
        $vip.setPassword(tempPassword.trim());
        update($vip);
end

rule "没有输入密码"
    salience  90
    when
       $vip:Vip((name!=null&&name!="")&&
                 (password==null||password==""),$name:name)
    then
        String tempPassword="";
        Console console=System.console();
        Scanner scanner = new Scanner(System.in);
        System.out.print("请输入密码: ");
        tempPassword=(console!=null?new String(console.readPassword()):scanner.nextLine());
        $vip.setPassword(tempPassword.trim());
        update($vip);

end


rule "没有输入用户名"
    salience  90
    when
       $vip:Vip((name==null||name=="")&&
                 (password!=null&&password!=""),$password:password )
    then
        String tempName="";
        Scanner scanner = new Scanner(System.in);
        System.out.print("请输入用户名: ");    
        tempName=scanner.nextLine();
        $vip.setName(tempName.trim());
        update($vip);

end


rule "输入正确的用户名和密码"
    salience  80
    when
       $vip:Vip((name!=null&&name!=""),
                 (password!=null&&password!=""),LoginServiceImpl.checkDB(name,password) )
    then
        System.out.print(" 欢迎 !!!"+$vip.getName());    

end

rule "输入错误的用户名和密码"
    salience  80
    when
       $vip:Vip((name!=null&&name!=""),
                 (password!=null&&password!=""),!LoginServiceImpl.checkDB(name,password) )
    then
        System.out.print(" 输入错误用户名或密码,请重新输入 !!!\n");    
        $vip.setName("");
        $vip.setPassword("");
        update($vip);
end
点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Easter79 Easter79
2年前
swap空间的增减方法
(1)增大swap空间去激活swap交换区:swapoff v /dev/vg00/lvswap扩展交换lv:lvextend L 10G /dev/vg00/lvswap重新生成swap交换区:mkswap /dev/vg00/lvswap激活新生成的交换区:swapon v /dev/vg00/lvswap
Jacquelyn38 Jacquelyn38
2年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Stella981 Stella981
2年前
Opencv中Mat矩阵相乘——点乘、dot、mul运算详解
Opencv中Mat矩阵相乘——点乘、dot、mul运算详解2016年09月02日00:00:36 \牧野(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Fme.csdn.net%2Fdcrmg) 阅读数:59593
Wesley13 Wesley13
2年前
Java获得今日零时零分零秒的时间(Date型)
publicDatezeroTime()throwsParseException{    DatetimenewDate();    SimpleDateFormatsimpnewSimpleDateFormat("yyyyMMdd00:00:00");    SimpleDateFormatsimp2newS
Wesley13 Wesley13
2年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
2年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Wesley13 Wesley13
2年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
3个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这
Easter79
Easter79
Lv1
今生可爱与温柔,每一样都不能少。
文章
2.8k
粉丝
5
获赞
1.2k