规则引擎Visual Rules Solution开发基础教程【连载15】--VisualRules接口调用(四)
程序员文章站
2022-06-03 17:10:02
...
VisualRules接口调用(四)
一、Java类调用服务接口本地调用
在Eclipse中制作一个Test2类,main中接收参数输入姓名,通过接口RuleService调用执行本地规则编译文件,返回结果。
1.添加java测试类
在java工程中添加一个java类,名为Test1.java,其内容编辑如下:
package com.flagleader;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import com.flagleader.engine.RuleEngine;
import com.flagleader.engine.RuleEngineException;
import com.flagleader.engine.RuleEngineFactory;
import com.flagleader.engine.RuleEngineManager;
import com.flagleader.engine.RuleService;
import com.flagleader.engine.RuleServiceException;
import com.flagleader.engine.impl.LocalRuleServiceFactory;
/**
* 调用指定目录下默认文件下的编译文件
* 使用的接口是RuleService ,该接口可以用在本地调用,以及服务调用
* @author Administrator
*/
public class Test2 {
public static void main(String[] args) {
try {
// 编译文件指定目录,默认版本目录是指定目录下的default
RuleEngineManager.getInstance().init(new File("e:\\rscfile"));
// 工厂模式,该接口可以用在本地调用,以及服务调用
RuleService engine = new LocalRuleServiceFactory().getRuleService();
// 以dto形式为规则传参
Student student = new Student(1, "李丽", 12, '男', "六年级", "无");
// 执行规则,其中"student.add"为规则全名,student为传入参数
engine.executeBeans("student.add", student);
//判断engine.get("studentList")是不是集合类型
if (engine.get("studentList").getClass().isAssignableFrom(java.util.ArrayList.class)){
// 执行完规则后,获取数据,"studentList"必须和规则中取内存表数据的变量名一致
List list = (List) engine.get("studentList");
// 由于规则中采用的是list<list>类型,需要做两次转换
List list1 = (List) list.get(0);
// 循环次数为对象中字段个数
for (int i = 0; i < 6; i++) {
System.out.print(list1.get(i) + "\t");
}
}
} catch (RuleServiceException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
2.执行java测试类
点击执行后,可以看到如下结果:
说明已经调用了student.add规则包,并且根据传入的参数,返回处理结果以list<list>形式展示。
同理,任何的其他java类,只需加入上述的代码,即可完成调用规则包的工作。
二、Java类通过不同服务调用-传输数据格式类型
参数streamtype默认为1,可以不进行配置,可以根据需求配置传输数据格式类型,0表示原始字符串格式。1表示加密压缩字符串。2表示压缩字符串。3表示压缩字节。4表示GZIP压缩流。客户端传输时通过Property.getInstance().setServerSendtype(...)设置传输数据格式类型,默认为1,即
Property.getInstance().setServerSendtype(Property.ENCRYZIPSTRINGSEND),其中Property.RAWSEND的值为0,Property.ZIPSTRINGSEND的值为2, Property.ZIPBYTESEND的值为3,Property.GZIPSEND的值为4,其中客户端传输数据格式类型为1时,参数streamtype的参数值可以是0或1。
传输数据格式类型
传输数据格式类型有四种,0代表原始格式,在代码中Property. RAWSEND,1代表加密并压缩,在代码中Property. ENCRYZIPSTRINGSEND,2代表压缩字符串,在代码中Property. ZIPSTRINGSEND,3代表压缩二进制,在代码中Property. ZIPBYTESEND,4代表GZIP流,在代码中Property. GZIPSEND。
Servlet调用:传输数据格式类型五种都可用,需要java代码中的传输数据格式类型和web.xml配置设置传输数据格式类型一致。
Java代码:Property.getInstance().setServerSendtype(...);
web.xml配置DBRuleServerServlet的streamtype参数:
<servlet>
<servlet-name>DBRuleServerServlet</servlet-name>
<servlet-class>com.flagleader.webserver.DBRuleServerServlet
</servlet-class>
<init-param>
<param-name>xmltype</param-name>
<param-value>json</param-value>
</init-param>
<init-param>
<param-name>streamtype</param-name>
<param-value>0</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>
Socket调用:传输数据格式类型五种中只能使用0、1、3,需要java代码中的传输数据格式类型和web.xml配置设置传输数据格式类型一致,其中0、1调用的代码,不能在3中使用,需要更改代码。
Java代码:支持传输数据格式类型0、1
Property.getInstance().setServerSendtype(Property. RAWSEND);
RuleServerPoolFactory.registerServer("localhost", 1508) ;
RuleService engine=RuleServerPoolFactory.getFactory().getRuleService();
web.xml配置DBRuleServerServlet的streamtype参数
<servlet>
<servlet-name>WebRuleServerServlet</servlet-name>
<servlet-class>com.flagleader.webserver.WebRuleServerServlet
</servlet-class>
<init-param>
<param-name>servertype</param-name>
<param-value>socket</param-value>
</init-param>
<init-param>
<param-name>ruleServerPort</param-name>
<param-value>1508</param-value>
</init-param>
<init-param>
<param-name>definepath</param-name>
<param-value></param-value>
</init-param>
<init-param>
<param-name>streamtype</param-name>
<param-value>0</param-value>
</init-param>
<load-on-startup>2-startup>
</servlet>
Java代码:支持传输数据格式类型3
Property.getInstance().setServerSendtype(Property.ZIPBYTESEND);
RuleService engine = new RuleServerZipFactory("127.0.0.1",1508).getRuleService();
web.xml配置DBRuleServerServlet的streamtype参数
<servlet>
<servlet-name>WebRuleServerServlet</servlet-name>
<servlet-class>com.flagleader.webserver.WebRuleServerServlet
</servlet-class>
<init-param>
<param-name>servertype</param-name>
<param-value>socket</param-value>
</init-param>
<init-param>
<param-name>ruleServerPort</param-name>
<param-value>1508</param-value>
</init-param>
<init-param>
<param-name>definepath</param-name>
<param-value></param-value>
</init-param>
<init-param>
<param-name>streamtype</param-name>
<param-value>3</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>
上一篇: 小米10发布会即将开始 雷军:有点激动
下一篇: 荞麦的产地到底在哪里?能做出哪些美食呢?
推荐阅读
-
规则引擎Visual Rules Solution开发基础教程【连载9】--VisualRules实例二(下)
-
规则引擎Visual Rules Solution开发基础教程【连载8】--VisualRules实例二(中)
-
规则引擎Visual Rules Solution开发基础教程【连载7】--VisualRules实例二(上)
-
规则引擎Visual Rules Solution开发基础教程【连载5】--VisualRules深入了解
-
规则引擎Visual Rules Solution开发基础教程【连载6】--VisualRules实例一
-
规则引擎Visual Rules Solution开发基础教程【连载2】-- 安装篇
-
规则引擎Visual Rules Solution开发基础教程【连载23】--规则协同管理之系统管理
-
规则引擎Visual Rules Solution开发基础教程【连载19】--规则协同管理介绍
-
规则引擎Visual Rules Solution开发基础教程【连载19】--规则协同管理介绍
-
规则引擎Visual Rules Solution开发基础教程【连载24】-- 使用VisualRules规则引擎实现业务逻辑