项目配置urule规则引擎教程详解(带视频资源)

Urule视频教程资源如下:
链接:https://pan.baidu.com/s/1xfQqcLVlzf1t9oYyFsG0qg
提取码:7we9

如需通过邮件发送,请联系 sph1573@163.com,鄙人看到会及时发送


1.把urule的jar包导入项目中lib下

资源中下载到的 urule-jar.zip
链接:[https://pan.baidu.com/s/1glxl4GA41TAFMwWAXA8OJA](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9wYW4uYmFpZHUuY29tL3MvMWdseGw0R0E0MVRBRk13V0FYQThPSkE?x-oss-process=image/format,png)提取码:3j54


2.applicationContext.xm加入urule配置文件
在项目spring配置文件applicationContext.xml中,引入urule-console的spring配置文件

	<!-- 2.导入urule-console的spring配置文件 -->
	<import resource="classpath:urule-console-context.xml"/>

3.新建configure.properties

Configure.properties
#用于指定当前知识库存放目录,必须存在
urule.repository.dir=D:/repo
#制定管理员用户
urule.admin.username=susu

然后在项目spring配置文件applicationContext.xml中,引入

<!-- 3.引入configure.properties -->
	<context:property-placeholder ignore-unresolvable="true" order="1" location="classpath:configure.properties"/>

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>

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);
	    }
}

配置文件中,创建bean_id

<!-- 5.创建动作库时,需要引入bean_id -->
	<bean id="methodTest" class="com.su.test.MethodTest"></bean>

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();
	}
	
}

再创建一个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>

11.在代码中调用,并返回结果

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;	
	}
}

上面代码:

	    Student ss = (Student)session.getParameter("stu");
		System.out.println(ss.getStuName());
		return ss;

就是数据经过规则验证后,从KnowledgeSession 中取到的参数,其中”stu”,需要在参数库中配置,如下:
这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述


12.把知识包存到数据库
需要在configure.properties配置文件中添加两个属性

#数据源bean的id
urule.repository.datasourcename=dataSource
#指定数据库类型
urule.repository.databasetype=oracle
#上面两个配置连接数据库

#用于指定当前知识库存放目录
urule.repository.dir=D:/repo

一个是在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;
    }
}

在默认的实现类中,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 {
	@Autowired
	private UserService userService;
	
	@Override
	public User getLoginUser(RequestContext rec) {
		DefaultUser user = new DefaultUser();
		user.setCompanyId("100");
		user.setUsername("su");
		user.setAdmin(true);
		
		return user;
	}

	@Override
	public 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;
	}
}

在spring 配置文件中配置bean

<bean id="TestEn" class="com.su.test.TestEnvironmentProvider"></bean>

这样就覆盖了,默认的接口实现

当数据库用户出现后,可以对用户进行配置权限
这里写图片描述


author:su1573

鄙人记录生活点滴,学习并分享,请多指教!!!

  • 7
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 20
    评论
提供规则集、决策表、决策树、评分卡,规则流等各种规则表现工具及基于网页的可视化设计器,可快速开发出各种复杂业务规则。 开发工具在软件开发生命周期中扮演着至关重要的角色,它们旨在简化和加速从概念设计到产品部署的各个环节。以下是开发工具的主要作用: 代码编写与编辑: 提供集成开发环境(IDE),如Visual Studio、Eclipse、Android Studio和Sublime Text等,这些工具集成了文本编辑器,支持语法高亮、自动补全、代码片段管理和版本控制等功能,有助于开发者高效编写和维护代码。 项目管理: 支持项目创建、组织、构建自动化以及依赖管理,确保不同模块和组件之间的协调一致。 编译与构建: 包括编译器、构建工具(如Make、Gradle、Maven)等,用于将源代码转换为可执行文件或库,并进行资源打包、优化等处理。 调试与测试: 集成调试器允许开发者逐行执行代码,设置断点、查看变量值、跟踪调用堆栈等,帮助定位并修复代码中的错误。 测试框架和工具则协助开发者编写和运行单元测试、集成测试及性能测试,确保软件质量。 版本控制与协作: 通过集成Git、SVN等版本控制系统,支持团队成员间的代码共享、分支管理、合并请求和冲突解决。 可视化设计与原型制作: 对于UI/UX设计,有界面设计工具,如Sketch、Adobe XD,可以帮助设计师快速构建应用程序界面模型,并生成规范的设计稿供开发人员参考实现。 跨平台支持: 跨平台开发工具如Xamarin、React Native和Flutter,让开发者使用一种语言或框架编写可以在多个操作系统上运行的应用程序。 文档编写与API管理: 文档生成工具可以自动生成代码注释文档,便于团队内外理解和使用项目代码。 API管理工具则方便开发者创建、测试、发布和维护API接口。 持续集成与持续部署(CI/CD): Jenkins、Travis CI、GitHub Actions等工具负责自动化构建、测试和部署流程,提高交付效率和可靠性。 数据库管理与ORM工具: 数据库客户端工具用于连接、查询、更新数据库,ORM(对象关系映射)工具简化了数据操作和持久化层的开发工作。 总之,开发工具极大地提升了软件工程师的工作效率,保证了开发过程中的准确性与一致性,同时也促进了团队合作,使得软件开发更系统化、规范化和工业化。
规则引擎Java项目中的使用可以提高系统的可维护性、可扩展性、可重用性和可测试性。以下是Java规则引擎的使用详解: 1. 规则引擎的基本原理: 规则引擎将业务规则形式化、集中管理,将业务规则与应用程序分离。它通过规则的条件和动作来实现业务逻辑的处理。当满足规则的条件时,规则引擎会执行相应的动作。 2. 规则引擎的优势: - 可维护性:规则引擎将业务规则集中管理,使得修改和维护规则变得更加方便。 - 可扩展性:通过添加新的规则,可以快速响应业务变化,而无需修改应用程序的代码。 - 可重用性:规则引擎将业务规则与应用程序分离,可以在不同的应用程序中重用规则。 - 可测试性:规则引擎可以通过单元测试来验证规则的正确性。 3. Java项目中的规则引擎实现方式: 在Java项目中,可以选择多种规则引擎的实现方式,例如: - Drools:Drools是一个开源的规则引擎,它提供了强大的规则管理和执行功能。 - Easy Rules:Easy Rules是一个轻量级的规则引擎,它提供了简单易用的规则定义和执行接口。 - JRules:JRules是IBM提供的一种规则引擎,它具有高性能和可扩展性。 - RuleBook:RuleBook是一个简单的规则引擎,它提供了基本的规则定义和执行功能。 以上是Java规则引擎的使用详解。通过使用规则引擎,可以将业务规则形式化、集中管理,提高系统的可维护性、可扩展性、可重用性和可测试性。
评论 20
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ssy03092919

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值