在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文件夹下。
登录例子部分代码:
beans.xml
1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans xmlns="http://www.springframework.org/schema/beans" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" 4 xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" 5 xmlns:p="http://www.springframework.org/schema/p" 6 xsi:schemaLocation="http://www.springframework.org/schema/beans 7 http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 8 http://www.springframework.org/schema/context 9 http://www.springframework.org/schema/context/spring-context-3.0.xsd 10 http://www.springframework.org/schema/tx 11 http://www.springframework.org/schema/tx/spring-tx-3.0.xsd 12 http://www.springframework.org/schema/aop 13 http://www.springframework.org/schema/aop/spring-aop-3.0.xsd"> 14 <import resource="classpath:com/jsptpd/rjy/zyj/drools/beans-drools.xml"/> 15 </beans>
beans-drools.xml
1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans xmlns="http://www.springframework.org/schema/beans" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 4 xmlns:drools="http://drools.org/schema/drools-spring" 5 xmlns:camel="http://camel.apache.org/schema/spring" 6 xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd 7 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 8 http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd"> 9 10 <drools:kbase id="kbase1"> 11 <drools:resources> 12 <!--不是<drools:resource type="DRL" source="classpath:com/jsptpd/rjy/zyj/service/Login.drl"/> --> 13 <drools:resource type="DRL" source="classpath:Login.drl"/> 14 </drools:resources> 15 </drools:kbase> 16 17 <drools:ksession id="ksession1" type="stateful" kbase="kbase1"/> 18 19 <bean id="vip" class="com.jsptpd.rjy.zyj.pojo.Vip" /> 20 <bean id="loginService" class="com.jsptpd.rjy.zyj.service.LoginServiceImpl" > 21 <property name="vip" ref="vip" /> 22 </bean> 23 </beans>
LoginTest.java
1 package com.jsptpd.rjy.zyj.junit; 2 3 import org.drools.runtime.StatefulKnowledgeSession; 4 import org.junit.Test; 5 import org.springframework.context.support.ClassPathXmlApplicationContext; 6 7 import com.jsptpd.rjy.zyj.service.LoginServiceImpl; 8 9 public class LoginTest { 10 @Test 11 public void testLogin(){ 12 ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext( "beans.xml" ); 13 LoginServiceImpl loginServiceImpl= (LoginServiceImpl) context.getBean( "loginService" ); 14 StatefulKnowledgeSession kstateless = (StatefulKnowledgeSession) context.getBean( "ksession1" ); 15 loginServiceImpl.checkLogin(kstateless); 16 System.out.println("aa"); 17 } 18 }
LoginServiceImpl.java
1 package com.jsptpd.rjy.zyj.service; 2 3 import org.drools.runtime.StatefulKnowledgeSession; 4 import org.drools.runtime.StatelessKnowledgeSession; 5 import org.springframework.context.support.ClassPathXmlApplicationContext; 6 7 import com.jsptpd.rjy.zyj.pojo.Vip; 8 9 public class LoginServiceImpl { 10 private Vip vip; 11 12 public Vip getVip() { 13 return vip; 14 } 15 16 public void setVip(Vip vip) { 17 this.vip = vip; 18 } 19 20 public void checkLogin(StatefulKnowledgeSession kstateless ){ 21 System.out.println("s"); 22 kstateless.insert(vip); 23 kstateless.fireAllRules(); 24 kstateless.dispose(); 25 System.out.println("e"); 26 } 27 28 public static boolean checkDB(String name,String password){ 29 //实际可以到数据库匹配 30 return name.trim().equals("jack")&&password.trim().equals("123"); 31 } 32 33 }
Login.drl
1 #created on: 2011-10-24 2 package com.jsptpd.rjy.zyj.service 3 4 #list any import classes here. 5 import com.jsptpd.rjy.zyj.pojo.Vip; 6 import java.io.Console; 7 import java.util.Scanner; 8 import com.jsptpd.rjy.zyj.service.LoginServiceImpl 9 10 #declare any global variables here 11 12 13 14 15 rule "vip初次登录" 16 salience 100 17 when 18 $vip:Vip((name==null||name=="")&& 19 (password==null||password=="") ) 20 then 21 String tempName; 22 String tempPassword; 23 Console console=System.console(); 24 Scanner scanner = new Scanner(System.in); 25 System.out.print("请输入用户名: "); 26 tempName=(console!=null?console.readLine():scanner.nextLine()); 27 System.out.print("请输入密码: "); 28 tempPassword=(console!=null?new String(console.readPassword()):scanner.nextLine()); 29 $vip.setName(tempName.trim()); 30 $vip.setPassword(tempPassword.trim()); 31 update($vip); 32 end 33 34 rule "没有输入密码" 35 salience 90 36 when 37 $vip:Vip((name!=null&&name!="")&& 38 (password==null||password==""),$name:name) 39 then 40 String tempPassword=""; 41 Console console=System.console(); 42 Scanner scanner = new Scanner(System.in); 43 System.out.print("请输入密码: "); 44 tempPassword=(console!=null?new String(console.readPassword()):scanner.nextLine()); 45 $vip.setPassword(tempPassword.trim()); 46 update($vip); 47 48 end 49 50 51 rule "没有输入用户名" 52 salience 90 53 when 54 $vip:Vip((name==null||name=="")&& 55 (password!=null&&password!=""),$password:password ) 56 then 57 String tempName=""; 58 Scanner scanner = new Scanner(System.in); 59 System.out.print("请输入用户名: "); 60 tempName=scanner.nextLine(); 61 $vip.setName(tempName.trim()); 62 update($vip); 63 64 end 65 66 67 rule "输入正确的用户名和密码" 68 salience 80 69 when 70 $vip:Vip((name!=null&&name!=""), 71 (password!=null&&password!=""),LoginServiceImpl.checkDB(name,password) ) 72 then 73 System.out.print(" 欢迎 !!!"+$vip.getName()); 74 75 end 76 77 rule "输入错误的用户名和密码" 78 salience 80 79 when 80 $vip:Vip((name!=null&&name!=""), 81 (password!=null&&password!=""),!LoginServiceImpl.checkDB(name,password) ) 82 then 83 System.out.print(" 输入错误用户名或密码,请重新输入 !!!\n"); 84 $vip.setName(""); 85 $vip.setPassword(""); 86 update($vip); 87 end