项目配置urule规则引擎教程详解(带视频资源)
教育政策规定教育目标、课程设置和资源配置 #生活知识# #社会生活# #公共政策#
Urule视频教程资源如下:
链接:https://pan.baidu.com/s/1xfQqcLVlzf1t9oYyFsG0qg
提取码:7we9
如需通过邮件发送,请联系 sph1573@163.com,鄙人看到会及时发送
1.把urule的jar包导入项目中lib下
资源中下载到的 urule-jar.zip
2.applicationContext.xm加入urule配置文件
在项目spring配置文件applicationContext.xml中,引入urule-console的spring配置文件
<!-- 2.导入urule-console的spring配置文件 --><import resource="classpath:urule-console-context.xml"/> 12
3.新建configure.properties
Configure.properties #用于指定当前知识库存放目录,必须存在 urule.repository.dir=D:/repo #制定管理员用户 urule.admin.username=susu 12345
然后在项目spring配置文件applicationContext.xml中,引入
<!-- 3.引入configure.properties --><context:property-placeholder ignore-unresolvable="true" order="1" location="classpath:configure.properties"/> 12
4.web.xml配置urule的servlet
<!-- urule的servlet配置 --><servlet><servlet-name>uruleServlet</servlet-name><servlet-class>com.bstek.urule.console.servlet.URuleServlet</servlet-class></servlet><servlet-mapping><servlet-name>uruleServlet</servlet-name><url-pattern>/urule/*</url-pattern></servlet-mapping> 123456789
5.在urule控制台创建动作库用到
在urule控制台创建动作库,需要引入bean_id,因此需要创建一个,并在applicationContext.xml为这个创建一个bean_id;
MethodTest.java public class MethodTest { @ExposeAction("打印Student") public void printUser(String stuName){ System.out.println("Hello "+stuName); } } 1234567
配置文件中,创建bean_id
<!-- 5.创建动作库时,需要引入bean_id --><bean id="methodTest" class="com.su.test.MethodTest"></bean> 12
6.具体创建变量库、常量库、参数库、动作库方式,可参照视频
7.以上配置完后,运行项目
运行项目,输入http://localhost:8081/ProjectName/urule/frame,即可进入urule控制台
8.操作
在“项目列表”右键,创建新项目,然后在“库”上创建变量库、常量库、参数库、动作库等,在“决策集”上创建向导式决策集、脚本式决策集等。
9.仿真测试
在以上步骤完后,即可在“知识包”中进行仿真测试
10.urule在代码中调用
创建一个InvokeTest.java
package com.su.test; import com.bstek.urule.Utils; import com.bstek.urule.runtime.KnowledgePackage; import com.bstek.urule.runtime.KnowledgeSession; import com.bstek.urule.runtime.KnowledgeSessionFactory; import com.bstek.urule.runtime.service.KnowledgeService; import com.su.domain.Student; /** * @author su1573 * @since 2018年8月29日 */ public class InvokeTest {public void doTest() throws Exception{//从Spring中获取KnowledgeService接口实例KnowledgeService service=(KnowledgeService)Utils.getApplicationContext().getBean(KnowledgeService.BEAN_ID);//通过KnowledgeService接口获取指定的资源包"projectName/知识包编码"KnowledgePackage knowledgePackage=service.getKnowledge("SSMDemo/xiangdemo");//通过取到的KnowledgePackage对象创建KnowledgeSession对象KnowledgeSession session=KnowledgeSessionFactory.newKnowledgeSession(knowledgePackage);Student stu = new Student();stu.setStuAge(30);stu.setStuName("su");//将业务数据对象Employee插入到KnowledgeSession中session.insert(stu);//执行所有满足条件的规则session.fireRules();} }
1234567891011121314151617181920212223242526272829303132333435再创建一个invoke.jsp,用于调用代码,进行规则测试
<%@page import="com.su.test.InvokeTest" %> <%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>Test</title> </head> <body> <%InvokeTest invoke = new InvokeTest();invoke.doTest(); %> </body> </html>
1234567891011121314151611.在代码中调用,并返回结果
public class InvokeTest {public Student doTest() throws Exception{//从Spring中获取KnowledgeService接口实例KnowledgeService service=(KnowledgeService)Utils.getApplicationContext().getBean(KnowledgeService.BEAN_ID);//通过KnowledgeService接口获取指定的资源包"projectName/知识包编码"KnowledgePackage knowledgePackage=service.getKnowledge("SSMDemo/xiangdemo");//通过取到的KnowledgePackage对象创建KnowledgeSession对象KnowledgeSession session=KnowledgeSessionFactory.newKnowledgeSession(knowledgePackage);Student stu = new Student();stu.setStuAge(50);//将业务数据对象Employee插入到KnowledgeSession中session.insert(stu);//执行所有满足条件的规则session.fireRules();Student ss = (Student)session.getParameter("stu");System.out.println(ss.getStuName());return ss;} }
12345678910111213141516171819202122上面代码:
Student ss = (Student)session.getParameter("stu");System.out.println(ss.getStuName());return ss; 123
就是数据经过规则验证后,从KnowledgeSession 中取到的参数,其中”stu”,需要在参数库中配置,如下:
12.把知识包存到数据库
需要在configure.properties配置文件中添加两个属性
#数据源bean的id urule.repository.datasourcename=dataSource #指定数据库类型 urule.repository.databasetype=oracle #上面两个配置连接数据库 #用于指定当前知识库存放目录 urule.repository.dir=D:/repo 12345678
一个是在spring配置文件中数据库bean的id,一个是数据库类型(mysql、oracle、sql server、Db2)
13.把数据库中用户加入到urule控制台
在URule当中,在外部没有提供EnvironmentProvider接口实现的时候,它采用其内部提供的一个默认EnvironmentProvider接口实现,其源码如下:
//EnvironmentProvider接口的默认实现类源码 package com.bstek.urule.console; import java.util.ArrayList; import java.util.List; import com.bstek.urule.console.servlet.RequestContext; /** * @author Jacky.gao * @since 2016年5月25日 */ public class DefaultEnvironmentProvider implements EnvironmentProvider { @Override public User getLoginUser(RequestContext context) { DefaultUser user=new DefaultUser(); user.setCompanyId("bstek"); user.setUsername("admin"); user.setAdmin(true); return user; } @Override public List<User> getUsers() { DefaultUser user1=new DefaultUser(); user1.setCompanyId("bstek"); user1.setUsername("user1"); DefaultUser user2=new DefaultUser(); user2.setCompanyId("bstek"); user2.setUsername("user2"); DefaultUser user3=new DefaultUser(); user3.setCompanyId("bstek"); user3.setUsername("user3"); List<User> users=new ArrayList<User>(); users.add(user1); users.add(user2); users.add(user3); return users; } }
123456789101112131415161718192021222324252627282930313233343536在默认的实现类中,getLoginUser返回的是固定的用户名为"admin"的用户,并且它的isAdmin属性为true,表示它是管理员,也就是说默认返回的登录用户是名为admin的管理员,同时他所在的公司ID为"bstek";在getUsers方法中固定返回user1、user2、user3三个用户,他们的公司ID皆为"bstek",与默认返回的登录用户admin的公司ID相同,所以在上面介绍的权限配置页面中我们看到的是user1、user2、user3三个用户。
关于User的公司ID
在URule当中,通过用户的companyId(也就是公司ID)实现在一个URule的存储库中隔离不同公司用户所建的规则项目。
某些时候,你可能只会搭建一个URule
Server,在这个Server中会有很多个用户来创建项目、配置规则,但这些用户有可能来自不同的公司,这个时候就需要有一种机制来隔离不同公司的人创建的项目,这里就是通过用户的companyId属性实现。companyId为A的用户创建的项目,companyId为B的人登录后是看不到的,反之亦然。EnvironmentProvider接口中返回的登录用户如果isAdmin为true,也就是管理员,那么它可以看到并操作其所在companyId下所有项目,而不需要做任何权限配置,相反,进行权限配置的工作也必须要由管理员来操作,否则会显示“无权限”的提示。
某个companyId下的管理员进行权限配置的时候,他能配置的用户也有与其companyId相同的普通用户,同时可配置的项目也只有在当前companyId下创建的项目。
如果我们需要将业务系统中的用户信息引入到URule当中,那么只需要实现一个新的EnvironmentProvider接口,并将其配置到spring的上下文中,让其成为一个标准的bean即可。这样系统启动时会自动检测到该接口实现的存在,从而用它来替换默认的EnvironmentProvider接口实现。
在项目中实现EnvironmentProvider接口
import java.util.ArrayList; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import com.bstek.urule.console.DefaultUser; import com.bstek.urule.console.EnvironmentProvider; import com.bstek.urule.console.User; import com.bstek.urule.console.servlet.RequestContext; import com.su.service.UserService; /** * @author su1573 * @since 2018年9月7日 */ public class TestEnvironmentProvider implements EnvironmentProvider {@Autowiredprivate UserService userService;@Overridepublic User getLoginUser(RequestContext rec) {DefaultUser user = new DefaultUser();user.setCompanyId("100");user.setUsername("su");user.setAdmin(true);return user;}@Overridepublic List<User> getUsers() {List<com.su.domain.User> list = userService.findAllUser();List<User> luser = new ArrayList<User>();for(com.su.domain.User user : list){DefaultUser du = new DefaultUser();du.setCompanyId("100");du.setUsername(user.getLoginName());luser.add(du);}return luser;} }
1234567891011121314151617181920212223242526272829303132333435363738394041在spring 配置文件中配置bean
<bean id="TestEn" class="com.su.test.TestEnvironmentProvider"></bean> 1
这样就覆盖了,默认的接口实现
当数据库用户出现后,可以对用户进行配置权限
author:su1573
鄙人记录生活点滴,学习并分享,请多指教!!!
网址:项目配置urule规则引擎教程详解(带视频资源) https://www.yuejiaxmz.com/news/view/553380
相关内容
.net元搜索引擎详解资源视频号橱窗【教育培训】类目管理规则
规则引擎原理与实战:规则引擎在物联网(IoT)中的应用
职业院校智慧校园平台的规则引擎
马琛《带你走进项目管理》视频教程在线学习资料免费下载
视频号橱窗【个人护理】类目管理规则
视频号橱窗【家用电器】类目管理规则
视频号橱窗【宠物生活】类目管理规则
工作流引擎是什么?一文带你深入了解自动化流程的核心工具
视频教程