- 浏览: 19236 次
- 性别:
- 来自: 广州
最新评论
暂时记一下
http://www.ibm.com/developerworks/cn/websphere/library/techarticles/1103_sumf_iloginsurance/1103_sumf_iloginsurance.html
使用 WebSphere ILOG JRules 开发保险应用系统
本文详细介绍 WebSphere ILOG JRules 在保险行业的应用场景,系统架构,与开发过程。并展示规则管理系统给保险公司的业务支撑系统带来的灵活性。读者能够通过本文来准确定位 WebSphere ILOG JRules 在其整个保险系统所扮演的角色,并了解基于规则的应用开发所带来的变化。
7 评论:
苏 明富, IBM WebSphere ILOG 技术顾问, IBM
2011 年 3 月 31 日
内容
免费下载:IBM® WebSphere® ILOG JRules 试用版
下载更多的 IBM 软件试用版,并加入 IBM 软件下载与技术交流群组,参与在线交流。
概述
保险行业在国内是一个充分竞争的行业,竞争的加剧导致保险公司的业务管理等各项费用在增长。而保险公司业务支撑系统的先进性与灵活支撑能力能够在很大程度上降低企业运营成本。目前越来越多的国内外保险公司已经采用 IBM 公司的业务规则管理产品 WebSphere ILOG JRules 提升了自己的业务支撑系统,通过降低运营成本与提升业务灵活性来大大增强了企业竞争能力。业务规则管理系统能够给 IT 系统带来两个比较大的变化:
简单、灵活、快速地支撑业务变化;
让业务管理人员参与管理业务变化;
保险行业同时也是一个快速变化的行业,变化主要来自于政策法规变化、市场竞争、内部组织结构变化、以及各种突发事件等。而对这些变化的支持与响应对保险业务支撑系统提出了很大的挑战。通过使用业务规则管理系统可以轻松应对这些挑战。业务规则管理系统通过把原来硬编码在程序中的业务规则外置出来,集中存放在规则库中,然后通过图形化的、自然语言的形式来书写和管理这些业务规则。保险应用程序则通过规则执行服务器的调用接口来执行这些规则并得到返回结果。这样规则库就变成了保险公司的业务资产,而不是应用开发商的程序代码。在最近新的 IT 体系结构中,如面向服务的架构(SOA)允许应用程序或流程的松耦合。 业务逻辑可在一个业务规则管理系统中封装成决策服务,而这个基于规则的决策服务可被应用程序和流程触发。通过这种分离,业务策略和应用程序体系结构可以异步管理,对业务策略进行更改不需要更改应用程序或流程代码,这样允许业务用户和开发人员管理协作完成业务的变化需求,缩短了系统变更的实现周期。
在保险应用系统中适合使用业务规则管理系统来开发的应用主要包括:
自动核保;
自动理赔;
承保计费;
电话销售;
CRM 营销(包括网店);
佣金管理;
图 1. 整个保险业务过程中的业务规则应用点
本文将通过寿险自动核保应用的一个虚拟的业务需求来介绍如何使用 WebSphere ILOG JRules 规则管理系统进行开发。
回页首
IBM ILOG JRules 业务规则管理系统简介
ILOG JRules 是一组模块,它们虽然在不同的环境中进行操作,但却共同致力于提供一个复杂的业务规则管理系统。 下图显示了使用这几个不同的模块的环境以及他们是如何通过同步和部署进行协作的。
图 2. ILOG JRules 模块体系结构
基于业务规则的应用程序开发
开发人员利用 Eclipse 内的 Rule Studio 来进行设计、Java 开发和规则项目开发。 使用 Decision Validation Services,他们还可以用真实或虚拟的场景测试规则集,以支持和解决业务用户使用 Rule Team Server 时发现的任何问题。
业务用户的业务规则管理和编写
业务用户使用 Rule Team Server 以在应用程序开发过程中和应用程序被部署到产品之后编写和维护业务规则。业务用户还可以在 Rule Team Server 中执行终端用户测试和模拟。 业务分析人员能够模拟业务结果,对自己的历史数据运行更新的规则,以分析业务变化带来的影响。
政策管理人员和其他业务用户能够使用 Rule Solutions for Office 在一个他们熟悉的环境中编写规则。 RuleDocs 是包含业务规则的 Office 文档。 业务用户可以从 Rule Team Server 发布 RuleDocs,以 Word 或 Excel 格式编辑 RuleDocs,然后再在 Rule Team Server 中更新其变更。
在企业应用程序中集成、监控和审计
规则执行部件可以被集成到企业应用程序中。管理员可访问 Rule Execution Server 控制台以监视已部署的规则集和管理决策服务。 另外他们还可使用决策仓库来执行精细的审计。
在下面的需求开发中我们将会使用到其中的 3 个部件,Rules Studio、Rule Team Server、和 RuleExecution Server。假如你想在你自己的环境中尝试以下开发过程,则需要你已经安装了 ILOG JRules 7.01 或以上版本。
回页首
人寿保单自动核保系统
我们采用寿险公司的保单自动核保系统作为原型来开发基于规则的自动核保功能。保单核保在整个保单处理过程中起着关键的质量保障作用。通过建设自动核保系统能够提高保单处理效率,提高保单自动通过率,降低保单处理环节的成本。在保单核保过程中要解决保险条款适应、合规、风险控制等多方面的问题。由于经常有新产品的推出与老产品的升级,核保系统要经常变化以便满足新的核保要求。而核保逻辑又是由大量的业务规则组成,使用硬编码的方式对这些规则的进行管理与运行带来很大的维护成本,而专业的规则管理系统可以避免这个问题,并实现安全、简单、灵活地规则管理与执行。
图 3. 核保系统同其它系统之间的关系
保单可以通过联机(Online)或批处理(Batch)两种方式来执行核保处理。
人寿保单核保需求
在本文我们假设 A 保险公司有一个人寿保险产品 P,使用到这个产品的保单在自动核保时执行下面这些规则:
R1:投保人必须有工作单位。
R2:投保人的年收入必须大于 5 万元。
R3:被保险人的年龄小于 18 或者大于 60 岁则必须通过人工核保。
R4:保费标准:18-35 岁 1000 元;36-50 岁 1100 元。
这个需求的实现是由前台应用(在线应用或批处理)实例化保单数据,然后把这些数据交给规则执行服务器运行这些规则,然后返回处理结果。结果为:通过、未通过、需要走人工3 种情况。
回页首
业务对象设计
我们简化设计核保的业务对象为:
个人 (Individual):年龄 (age)、收入 (income)、工作单位 (employer)。
保险产品 (Product):编码 (id)、名称 (name)。
保单 (Policy):投保人 (applicant)、被保人 (insurant)、保险产品 (product)、处理结果状态 (processStatus)、处理结果消息 (processMsg)、保费(rate)。
图 4. 业务对象类图
回页首
业务对象 Java 项目开发
在这里我们根据上面的业务对象开发一个 Java 项目,创建这些业务对象对应的 Java 类,我们让这些类实现 Java 序列化接口,以便可以通过 EJB 来远程调用。假如这些对象在应用系统中已经开发好了,我们也可以直接引用它的 Jar 包。
运行安装好的 ILOG JRules Rule Studio (ZH),然后创建一个 Java 项目,命名为 underwriting-xom。然后在 model 包下创建以下类。
清单 1. Individual.java
package model;
public class Individual implements java.io.Serializable {
private static final long serialVersionUID = 1L;
private int age;
private int income;
private String employer;
public Individual(int age, int income, String employer) {
this.age = age;
this.income = income;
this.employer = employer;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public int getIncome() {
return income;
}
public void setIncome(int income) {
this.income = income;
}
public String getEmployer() {
return employer;
}
public void setEmployer(String employer) {
this.employer = employer;
}
}
清单 2. Product.java
package model;
public class Product implements java.io.Serializable {
private static final long serialVersionUID = 1L;
private String id;
private String name;
public Product(String id, String name) {
this.id = id;
this.name = name;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
清单 3. Policy.java
package model;
public class Policy implements java.io.Serializable {
private static final long serialVersionUID = 1L;
private Individual applicant;
private Individual insurant;
private Product product;
private int rate;
private String processStatus;
private String processMsg;
public Policy(Individual applicant, Individual insurant, Product product) {
this.applicant = applicant;
this.insurant = insurant;
this.product = product;
}
public Individual getApplicant() {
return applicant;
}
public void setApplicant(Individual applicant) {
this.applicant = applicant;
}
public Individual getInsurant() {
return insurant;
}
public void setInsurant(Individual insurant) {
this.insurant = insurant;
}
public Product getProduct() {
return product;
}
public void setProduct(Product product) {
this.product = product;
}
public String getProcessStatus() {
return processStatus;
}
public void setProcessStatus(String processStatus) {
this.processStatus = processStatus;
}
public String getProcessMsg() {
return processMsg;
}
public void setProcessMsg(String processMsg) {
this.processMsg = processMsg;
}
public int getRate() {
return rate;
}
public void setRate(int rate) {
this.rate = rate;
}
}
回页首
创建规则项目
在 Rule Studio(zh) 已经创建的 Java 项目对应的工作空间下,创建一个命名为 underwriting-rule 规则项目。在这个工作空间中可以同时开发 Java 代码与业务规则相关内容,并且 Java 项目和规则项目可以在一块进行 Debug。
下图为我们新建了一个规则项目后的 Rule Studio 工作空间。
图 5. 规则开发环境
红色框区 1:有两个项目,一个为 java 项目 underwriting-xom,包含上面所开发的 3 个 java 类。
红色框区 2:规则项目工作导图。可以按照链接逐步完成规则项目的开发。接下来我们就创建 BOM。
回页首
创建 BOM(业务对象模型)
BOM(业务对象模型,Business Object Model)是 WebSphere ILOG JRules 的一个核心概念。BOM 是业务规则(自然语言)与应用代码(Java、XML Schema)的连接的桥梁,同时也使得业务规则能够独立于应用代码来编写。前面开发的业务对象 Java 叫做执行对象模型 (XOM: eXecution Object Model )。业务规则、业务对象模型、执行对象模型之间的关系见下图。
图 6. Rule-BOM-XOM 的关系
假如使用 Java 类来作为执行对象的话,执行对象与业务对象之间的映射可以使用默认的类、属性、方法来一一对应。也可以在规则开发环境的 BOM 设计器中通过 Java 代码来进行扩展一些虚拟的属性与方法。例如根据被保人的年龄来在 BOM 中增加一个是否为成年人的虚拟方法 publid boolean isAdult(){return this.age>18;},这个可以在 BOM 设计器中完成,不需要更改 Java 代码。
现在我们基于前面开发的 Java 对象来创建一个 BOM。然后给每个属性一个中文描述。开发界面见下图。
图 7. BOM 开发与词汇编写
红色框区 1:当前操作为 Policy 类(保单)。
红色框区 2:当前操作为 processStatus 属性(处理结果)。
红色框区 3:变更 processStatus 属性的词汇描述。
红色框区 4:使用 processStatus 属性的词汇描述。
注:{this} 为关键字,表示当前处理的保单对象而 {***} 为属性占位符。
通过这种方式把 3 个类的相关属性与方法进行中文词汇描述。只需要对业务规则使用到的属性与方法提供中文词汇描述。
回页首
确定规则项目的输入输出参数
规则项目的输入输出参数确定了这个规则项目同外部应用的接口,外部应用通过 Map 键值对的方式来同规则执行服务器来交换数据。对于本例子我们采用 Policy(保单)来作为该规则项目的输入输出参数。见下图。
图 8. 规则项目参数定义
回页首
确定规则结构与执行流程
我们首先把核保规则分为通用核保规则、P 保单核保规则、其它保单核保规则多个规则包。在 P 保单核保规则包下再创建保费计算与资格检查两个包。接着在 P 保单规则包下创建一个子规则流,对保单先进行资格检查,然后再计算费率。
图 9. 保单 P 的规则运算流程
然后在根规则包下创建一个主规则流来确定不同类型的保单的规则运算路径。
图 10. 所有保单的运算流程
在这里,需要核保处理的保单进来之后,规则的执行会按照这个主流程来运行:首先执行通用核保规则包下的所有规则,然后再根据保单的类型运行相关保单的核保规则,而对于 P 保单分支对应的条件定义见红色连线,最后退出返回结果到应用程序。规则流中可以嵌套子流程,规则包中可以嵌套子规则包。
回页首
业务规则开发
接着我可以在 P 保单规则包中创建前面所定义的业务规则。
R1
新建一个业务规则 投保人必须有工作单位,在规则的辅助编辑器中按下图的步骤完成规则。
图 11. R1:投保人必须有工作单位,业务规则书写步骤
打开一个“业务规则辅助编辑器”。创建一个空的“业务规则”,这种规则叫做操作规则。另外还可以创建 决策表、和 决策树。
通过点击“选择一个条件”,从下拉框中选择我们前面定义的参数 核保保单。
点击 是 再选择保单的属性“投保人”。这些是我们在定义 BOM 时确定的。
点击“是” 再选择投保人的属性“工作单位”
点击“是” 再选择操作符“为空”。系统会自动根据属性的数据类型来确定可以使用的操作符集合。操作符还可以被定制。
在那么操作块中点击“选择一个操作”,选择“设置保单的处理结果为一个字符串” 并设置返回消息。
把占位符填上,就完成了一个规则的书写。
R2
参考上面的操作步骤,我们创建这个规则如下。
图 12. R2:投保人的年收入必须大于 5 万元
R3
图 13. R3:被保险人的年龄小于 18 或者大于 60 岁则必须通过人工核保
R4
对于这个规则比较适合使用决策表来处理,操作步骤见下图。
图 14. R4:费率表,决策表开发步骤
创建一个 决策表,并输入名称“保费费率”
产生了一张空表。其中 A、B、C 为条件列,而 D 为动作列。条件列与动作列可以增加或减少。
本规则只有一个条件列与动作列,所以我们删除两个条件列。
双击条件列 A 的表头,在条件定义弹出框中定义列条件。可以通过“ctrl+alt+ 空格”热键来选择条件。同时定义动作列的动作为设置保单费率。
完成格式的决策表。
输入数据的决策表。选中一行,则该行所表达的规则在下面的空白处自动显示出来。(需要配置决策表的属性为显示规则)
这样我们就完成了规则项目的开发。见下图。
图 15. 开发好的规则项目
回页首
同步规则项目到 Rule Team Server(RTS)
为集中安全地保存规则并提供给保单政策管理人员方便地管理与变更规则,我把在 Rule Studio 中开发的规则项目同步到基于 ILOG Rule Team Server(RTS) 的规则库中。该工作可以通过在 Rule Studio 中的规则项目上点击右键,然后选择“Rule Team Server”并输入 RTS 的服务器地址 http://server:port/teamserver 与 rtsAdmin/rtsAdmin 用户名与密码来上传项目。上传完毕后登录 Rule Team Server 的 Web 页面后可以看到该规则项目。
RTS 是部署在应用服务器(APP Server)上的一个企业应用(EAR),它通过 JDBC 数据源来访问存放在关系数据库中的规则库。在该环境中可以实现有权限控制的规则管理,包括查询、新建、变更、版本、基线、测试、部署、权限管理等各种功能。
业务管理人员在该环境下完成了规则变更后,可以直接把规则部署到生产环境。技术人员还可以在 Rule Studio 中同步管理人员的变更。或重新创建一个来自于 RTS 规则库中的规则项目。
图 16. RTS 操作界面与规则书写界面
回页首
规则执行服务器(RES)集成
ILOG JRules 规则执行服务器(Rule Execution Server)与应用的集成有多种方式。可以采用 J2SE 与 J2EE 或 Web Service 的集成方式。J2SE 的集成方式是通过一组 Java API Jar 包来引用,对应的规则部署方式则一般是通过规则文件,也支持 JDBC 数据库。默认没有提供热部署支持,需要应用程序定制来实现。而 J2EE 或 Web Service 的方式是依赖 Java 应用服务器的(例如 WebSphere Application Server),RES 表现为部署在 APP Server 上的 Resource Adapter 与控制台 Web 应用,规则通过控制台程序可以实现热部署,即应用应用无需中断就可以切换到新部署的规则上。已经部署的规则一般是通过 JDBC Datasource 保存在关系数据库中,也可以保存在文件中。应用程序可以通过 Local/Remote EJB、JMS、Web Service、POJO(应用与 RES 部署在同一个容器中)来与规则执行服务器建立会话然后调用执行。
对于批量处理(Batch)的应用我们建议采用 J2SE 的应用架构,数据与应用在一块,降低协议开销,最大化地提高系统吞吐量。而对于联机处理(OLTP)应用,我们建议采用 J2EE 模式或 Web Service。
针对本应用我们采用使用的比较广泛的 Remote EJB 集成方式,在性能满足的条件下,通过 EJB 接口可以提供给多个前端应用程序来访问(例如联机保单、批处理保单)。在能够运行该例子之前还需要你在你的应用服务器上部署 ILOG JRules 的 EJB Jar 包(对应文件为 jrules-res-session-XXX.jar,其中 XXX 是对应的应用服务器名)。
创建规则应用项目(RuleApp)
我们在 Rule Studio 中创建一个规则应用程序(Rule APP)的项目并把刚才创建的规则项目加入进来。规则应用程序是用来封装规则项目的,只与规则相关,不包含任何客户段代码。规则应用可以放入多个规则项目,每个规则项目对应一个规则集(RuleSet),规则集是最小的发布单元,也是客户端程序调用的入口。
在这里我们创建了一个 underwriting-app 项目并加入 underwriting-rule 规则项目,其对应的规则应用名称 underwritingapp 规则集名称为 underwritingrule。那么客户端调用核保规则的入口参数就是 underwritingapp/ underwritingrule。标准的规则集字串格式为:“规则应用程序名 /[ 版本 ]/ 规则集名称 /[ 版本 ]”。不写版本信息则执行最新版本。
同样名称的 RuleApp 也可以在 Rule Team Server 上来创建。这样规则可以同时在 Rule Studio 和 Rule Team Server 上来进行部署。
把规则应用(RuleApp)部署到 RES 上
然后我们把这个规则应用程序部署到 RES 规则执行服务器 上。通过在 underwriting-app 项目上点击右键,然后选择 RuleApp,选择部署,下一步输入 RES 服务器的 http://server:port/res 和 resAdmin/resAdmin 用户名与密码部署。这样规则项目被部署到执行服务器上去,规则执行服务器就可以被外部应用来调用了。
接着我们登录 RES 的控制台查看部署过来的规则。通过控制台我们发现,在执行服务器中可以同时部署多个规则应用,每个规则应用又可包含多个规则项目(规则集),每个规则应用与规则集有可以有不同的执行版本。
图 17. RES 控制台 - 已部署的核保规则应用
开发 EJB 集成客户端代码
我们使用 ILOG JRules 提供的 API 来开发 EJB 客户端,本代码调用部署在 WebSphere Application Server 上的 RES 服务。代码如下:
清单 4. ILOGRuleRemoteRunner.java
package client;
import ilog.rules.bres.session.IlrRuleSessionProvider;
import ilog.rules.bres.session.IlrRuleSessionProviderFactory;
import ilog.rules.bres.session.IlrSessionDescriptor;
import ilog.rules.bres.session.IlrSessionExecutionSettings;
import ilog.rules.bres.session.IlrSessionParameters;
import ilog.rules.bres.session.IlrSessionRequest;
import ilog.rules.bres.session.IlrSessionResponse;
import ilog.rules.bres.session.IlrStatelessRuleSession;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Properties;
import javax.naming.Context;
import model.Individual;
import model.Policy;
import model.Product;
public class ILOGRuleRemoteRunner {
private Map inputParams = new HashMap();
private IlrSessionResponse response = null;
private IlrSessionRequest sessionRequest = null;
private IlrStatelessRuleSession statelessRuleSession = null;
public void init(String rulesetPath) throws Exception{
sessionRequest = new IlrSessionRequest(rulesetPath);
Properties jndiProperties = new Properties();
jndiProperties.setProperty(Context.INITIAL_CONTEXT_FACTORY,
"com.ibm.websphere.naming.WsnInitialContextFactory");
jndiProperties.setProperty(Context.PROVIDER_URL, "corbaloc:iiop:localhost:2809");
IlrRuleSessionProvider provider
= new IlrRuleSessionProviderFactory.Builder(jndiProperties).build();
statelessRuleSession = provider.createStatelessRuleSession();
}
public void setInputParam(String paramName, Object paramValue){
inputParams.put(paramName, paramValue);
}
public Object getOutputParam(String paramName){
if(response == null) {
return null;
}
return response.getExecutionResult()
.getOutputParameters().getObjectValue(paramName);
}
public void executeRuleset()throws Exception {
IlrSessionExecutionSettings execSettings = sessionRequest.getExecutionSettings();
IlrSessionParameters parameters = execSettings.getInputParameters();
Iterator it = inputParams.keySet().iterator();
while(it.hasNext()){
String paramName = (String)it.next();
parameters.setParameter(paramName, inputParams.get(paramName));
}
response = statelessRuleSession.executeRules(sessionRequest);
}
public static void main(String[] args) throws Exception {
//sample
ILOGRuleRemoteRunner theRunner = new ILOGRuleRemoteRunner();
try{
theRunner.init("/underwritingapp/underwritingrule");
//Prepare your java object here
Individual aIndividual = new Individual(30, 100000, null);
Product aProduct = new Product("P", "P 保险产品");
Policy aPolicy = new Policy(aIndividual, aIndividual, aProduct);
//set the rule set exeuction parameter
theRunner.setInputParam("policy", aPolicy);
//execute the rule set
theRunner.executeRuleset();
//get the result
aPolicy = (Policy)theRunner.getOutputParam("policy");
//print the result
System.out.println("return code: " + aPolicy.getProcessStatus());
System.out.println("return message is: " + aPolicy.getProcessMsg());
}catch(Exception e) {
e.printStackTrace();
}
}
}
我们在 Eclipse 中运行这个类的 main 方法,得到的结果截图如下:
图 18. 投保人没有单位的执行结果
我们修改 main 方法的代码,给投保人加上单位,计算费率结果截图如下:
图 19. 核保通过,30 岁的费率标准为 1000
回页首
后续的工作
这样保险应用系统的两个主要的开发内容规则开发与应用集成就完成了。以后该自动核保应用可以通过维护业务规则来满足业务发展的需要,而不需要再变更代码。规则所有的变更轨迹都在 RTS 的规则库中详细保存,增强了业务的可审计性、可跟踪性,并有利于业务优化。
回页首
总结
基于业务规则管理系统(BRMS)的保险应用系统的开发能够简化系统的架构,使得应用程序处理逻辑与业务规则分离,业务规则可以独立于应用程序来使用简单易用的工具与方法进行管理,大大提高了保险公司业务支撑能力。
回页首
下载
描述 名字 大小
classpath 文件 .classpath.zip 1kb
参考资料
学习
IBM WebSphere ILOG JRules 官方网站 来查看该产品提供的完整的解决方案。
IBM developerWorks WebSphere ILOG BRMS 来查看关于本产品的相关技术与学习资料。
“WebSphere ILOG JRules 规则书写 Demo”了解如何使用自然语言的方式书写规则并部署到执行服务器上。
下载 IBM WebSphere ILOG JRules 试用版 去加入业务规则社区。该安装包含了 Rule Studio 与相关文档,通过它您可以了解到该产品的技术架构与开发方法。并可以创建基于 J2SE 的规则执行服务器的应用集成。
IBM developerWorks 中国 WebSphere 专区:为使用 WebSphere 产品的开发人员准备的技术信息和资料。这里提供产品下载、how-to 信息、支持资源以及免费技术库,包含 2000 多份技术文章、教程、最佳实践、IBM Redbook 和在线产品手册。
获得产品和技术
最受欢迎的 WebSphere 试用软件下载:下载关键 WebSphere 产品的免费试用版。
IBM developerWorks 软件下载资源中心:IBM deveperWorks 最新的软件下载。
IBM developerWorks 工具包:下载关键 WebSphere 最新的产品工具包。
讨论
WebSphere ILOG BRMS Blog 去加入业务规则社区。
My developerWorks BPM 群组:为开发人员设立的 BPM 群组,了解业务流程管理解决方案的最新技术资源。
IBM developerWorks 中文社区
条评论
请 登录 或 注册 后发表评论。
添加评论:
注意:评论中不支持 HTML 语法
有新评论时提醒我剩余 1000 字符
共有评论 (7)显示:
hi,我在 http://www.ibm.com/developerworks/cn/downloads/ws/jrules/ 尝试下载,但是总是下载失败,请问 v7.1.1.2 trial edition不再提供了吗
由 Y5G2_fei_lu 于 2012年12月27日发布 报告滥用
下面的异常是什么意思:
java.rmi.RemoteException: CORBA NO_IMPLEMENT 1330446337 No; nested exception is:
\torg.omg.CORBA.NO_IMPLEMENT:
\t>> SERVER (id=4773e3aa, host=chenyuanzhong) TRACE START:
\t>> org.omg.CORBA.NO_IMPLEMENT: The sender's class RMI:model.Policy:232D48710B688D35:0000000000000001 is not present on the local classpath, and the class is not marked as truncatable, so it cannot be unmarshaled. vmcid: OMG minor code: 1 completed: No
\t>>\t at com.ibm.rmi.io.IIOPInputStream.inputObjectFVD(IIOPInputStream.java:1528)
\t>>\t at com.ibm.rmi.io.IIOPInputStream.simpleReadObjectInternal(IIOPInputStream.java:414)
由 NC2E_袁中_陈 于 2012年12月21日发布 报告滥用
client是用ibm的jdk吗
由 NC2E_袁中_陈 于 2012年12月21日发布 报告滥用
还是缺少jar包啊:
ilog.rules.bres.session.IlrRuleSessionCreationException: 在调用规则会话时发生错误。:
java.lang.NoClassDefFoundError: com/ibm/ws/bootstrap/RASWsLoggerFactory
java.lang.ClassNotFoundException: com.ibm.ws.bootstrap.RASWsLoggerFactory
由 NC2E_袁中_陈 于 2012年12月21日发布 报告滥用
增加了class path 源码的下载。谢谢关注!
由 Melodyll 于 2012年12月11日发布 报告滥用
IBM PureSystems
IBM PureSystems™ 系列解决方案是一个专家集成系统
developerWorks 学习路线图
通过学习路线图系统掌握软件开发技能
软件下载资源中心
软件下载、试用版及云计算
使用 WebSphere ILOG JRules 开发保险应用系统
本文详细介绍 WebSphere ILOG JRules 在保险行业的应用场景,系统架构,与开发过程。并展示规则管理系统给保险公司的业务支撑系统带来的灵活性。读者能够通过本文来准确定位 WebSphere ILOG JRules 在其整个保险系统所扮演的角色,并了解基于规则的应用开发所带来的变化。
7 评论:
苏 明富, IBM WebSphere ILOG 技术顾问, IBM
2011 年 3 月 31 日
内容
免费下载:IBM® WebSphere® ILOG JRules 试用版
下载更多的 IBM 软件试用版,并加入 IBM 软件下载与技术交流群组,参与在线交流。
概述
保险行业在国内是一个充分竞争的行业,竞争的加剧导致保险公司的业务管理等各项费用在增长。而保险公司业务支撑系统的先进性与灵活支撑能力能够在很大程度上降低企业运营成本。目前越来越多的国内外保险公司已经采用 IBM 公司的业务规则管理产品 WebSphere ILOG JRules 提升了自己的业务支撑系统,通过降低运营成本与提升业务灵活性来大大增强了企业竞争能力。业务规则管理系统能够给 IT 系统带来两个比较大的变化:
简单、灵活、快速地支撑业务变化;
让业务管理人员参与管理业务变化;
保险行业同时也是一个快速变化的行业,变化主要来自于政策法规变化、市场竞争、内部组织结构变化、以及各种突发事件等。而对这些变化的支持与响应对保险业务支撑系统提出了很大的挑战。通过使用业务规则管理系统可以轻松应对这些挑战。业务规则管理系统通过把原来硬编码在程序中的业务规则外置出来,集中存放在规则库中,然后通过图形化的、自然语言的形式来书写和管理这些业务规则。保险应用程序则通过规则执行服务器的调用接口来执行这些规则并得到返回结果。这样规则库就变成了保险公司的业务资产,而不是应用开发商的程序代码。在最近新的 IT 体系结构中,如面向服务的架构(SOA)允许应用程序或流程的松耦合。 业务逻辑可在一个业务规则管理系统中封装成决策服务,而这个基于规则的决策服务可被应用程序和流程触发。通过这种分离,业务策略和应用程序体系结构可以异步管理,对业务策略进行更改不需要更改应用程序或流程代码,这样允许业务用户和开发人员管理协作完成业务的变化需求,缩短了系统变更的实现周期。
在保险应用系统中适合使用业务规则管理系统来开发的应用主要包括:
自动核保;
自动理赔;
承保计费;
电话销售;
CRM 营销(包括网店);
佣金管理;
图 1. 整个保险业务过程中的业务规则应用点
本文将通过寿险自动核保应用的一个虚拟的业务需求来介绍如何使用 WebSphere ILOG JRules 规则管理系统进行开发。
回页首
IBM ILOG JRules 业务规则管理系统简介
ILOG JRules 是一组模块,它们虽然在不同的环境中进行操作,但却共同致力于提供一个复杂的业务规则管理系统。 下图显示了使用这几个不同的模块的环境以及他们是如何通过同步和部署进行协作的。
图 2. ILOG JRules 模块体系结构
基于业务规则的应用程序开发
开发人员利用 Eclipse 内的 Rule Studio 来进行设计、Java 开发和规则项目开发。 使用 Decision Validation Services,他们还可以用真实或虚拟的场景测试规则集,以支持和解决业务用户使用 Rule Team Server 时发现的任何问题。
业务用户的业务规则管理和编写
业务用户使用 Rule Team Server 以在应用程序开发过程中和应用程序被部署到产品之后编写和维护业务规则。业务用户还可以在 Rule Team Server 中执行终端用户测试和模拟。 业务分析人员能够模拟业务结果,对自己的历史数据运行更新的规则,以分析业务变化带来的影响。
政策管理人员和其他业务用户能够使用 Rule Solutions for Office 在一个他们熟悉的环境中编写规则。 RuleDocs 是包含业务规则的 Office 文档。 业务用户可以从 Rule Team Server 发布 RuleDocs,以 Word 或 Excel 格式编辑 RuleDocs,然后再在 Rule Team Server 中更新其变更。
在企业应用程序中集成、监控和审计
规则执行部件可以被集成到企业应用程序中。管理员可访问 Rule Execution Server 控制台以监视已部署的规则集和管理决策服务。 另外他们还可使用决策仓库来执行精细的审计。
在下面的需求开发中我们将会使用到其中的 3 个部件,Rules Studio、Rule Team Server、和 RuleExecution Server。假如你想在你自己的环境中尝试以下开发过程,则需要你已经安装了 ILOG JRules 7.01 或以上版本。
回页首
人寿保单自动核保系统
我们采用寿险公司的保单自动核保系统作为原型来开发基于规则的自动核保功能。保单核保在整个保单处理过程中起着关键的质量保障作用。通过建设自动核保系统能够提高保单处理效率,提高保单自动通过率,降低保单处理环节的成本。在保单核保过程中要解决保险条款适应、合规、风险控制等多方面的问题。由于经常有新产品的推出与老产品的升级,核保系统要经常变化以便满足新的核保要求。而核保逻辑又是由大量的业务规则组成,使用硬编码的方式对这些规则的进行管理与运行带来很大的维护成本,而专业的规则管理系统可以避免这个问题,并实现安全、简单、灵活地规则管理与执行。
图 3. 核保系统同其它系统之间的关系
保单可以通过联机(Online)或批处理(Batch)两种方式来执行核保处理。
人寿保单核保需求
在本文我们假设 A 保险公司有一个人寿保险产品 P,使用到这个产品的保单在自动核保时执行下面这些规则:
R1:投保人必须有工作单位。
R2:投保人的年收入必须大于 5 万元。
R3:被保险人的年龄小于 18 或者大于 60 岁则必须通过人工核保。
R4:保费标准:18-35 岁 1000 元;36-50 岁 1100 元。
这个需求的实现是由前台应用(在线应用或批处理)实例化保单数据,然后把这些数据交给规则执行服务器运行这些规则,然后返回处理结果。结果为:通过、未通过、需要走人工3 种情况。
回页首
业务对象设计
我们简化设计核保的业务对象为:
个人 (Individual):年龄 (age)、收入 (income)、工作单位 (employer)。
保险产品 (Product):编码 (id)、名称 (name)。
保单 (Policy):投保人 (applicant)、被保人 (insurant)、保险产品 (product)、处理结果状态 (processStatus)、处理结果消息 (processMsg)、保费(rate)。
图 4. 业务对象类图
回页首
业务对象 Java 项目开发
在这里我们根据上面的业务对象开发一个 Java 项目,创建这些业务对象对应的 Java 类,我们让这些类实现 Java 序列化接口,以便可以通过 EJB 来远程调用。假如这些对象在应用系统中已经开发好了,我们也可以直接引用它的 Jar 包。
运行安装好的 ILOG JRules Rule Studio (ZH),然后创建一个 Java 项目,命名为 underwriting-xom。然后在 model 包下创建以下类。
清单 1. Individual.java
package model;
public class Individual implements java.io.Serializable {
private static final long serialVersionUID = 1L;
private int age;
private int income;
private String employer;
public Individual(int age, int income, String employer) {
this.age = age;
this.income = income;
this.employer = employer;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public int getIncome() {
return income;
}
public void setIncome(int income) {
this.income = income;
}
public String getEmployer() {
return employer;
}
public void setEmployer(String employer) {
this.employer = employer;
}
}
清单 2. Product.java
package model;
public class Product implements java.io.Serializable {
private static final long serialVersionUID = 1L;
private String id;
private String name;
public Product(String id, String name) {
this.id = id;
this.name = name;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
清单 3. Policy.java
package model;
public class Policy implements java.io.Serializable {
private static final long serialVersionUID = 1L;
private Individual applicant;
private Individual insurant;
private Product product;
private int rate;
private String processStatus;
private String processMsg;
public Policy(Individual applicant, Individual insurant, Product product) {
this.applicant = applicant;
this.insurant = insurant;
this.product = product;
}
public Individual getApplicant() {
return applicant;
}
public void setApplicant(Individual applicant) {
this.applicant = applicant;
}
public Individual getInsurant() {
return insurant;
}
public void setInsurant(Individual insurant) {
this.insurant = insurant;
}
public Product getProduct() {
return product;
}
public void setProduct(Product product) {
this.product = product;
}
public String getProcessStatus() {
return processStatus;
}
public void setProcessStatus(String processStatus) {
this.processStatus = processStatus;
}
public String getProcessMsg() {
return processMsg;
}
public void setProcessMsg(String processMsg) {
this.processMsg = processMsg;
}
public int getRate() {
return rate;
}
public void setRate(int rate) {
this.rate = rate;
}
}
回页首
创建规则项目
在 Rule Studio(zh) 已经创建的 Java 项目对应的工作空间下,创建一个命名为 underwriting-rule 规则项目。在这个工作空间中可以同时开发 Java 代码与业务规则相关内容,并且 Java 项目和规则项目可以在一块进行 Debug。
下图为我们新建了一个规则项目后的 Rule Studio 工作空间。
图 5. 规则开发环境
红色框区 1:有两个项目,一个为 java 项目 underwriting-xom,包含上面所开发的 3 个 java 类。
红色框区 2:规则项目工作导图。可以按照链接逐步完成规则项目的开发。接下来我们就创建 BOM。
回页首
创建 BOM(业务对象模型)
BOM(业务对象模型,Business Object Model)是 WebSphere ILOG JRules 的一个核心概念。BOM 是业务规则(自然语言)与应用代码(Java、XML Schema)的连接的桥梁,同时也使得业务规则能够独立于应用代码来编写。前面开发的业务对象 Java 叫做执行对象模型 (XOM: eXecution Object Model )。业务规则、业务对象模型、执行对象模型之间的关系见下图。
图 6. Rule-BOM-XOM 的关系
假如使用 Java 类来作为执行对象的话,执行对象与业务对象之间的映射可以使用默认的类、属性、方法来一一对应。也可以在规则开发环境的 BOM 设计器中通过 Java 代码来进行扩展一些虚拟的属性与方法。例如根据被保人的年龄来在 BOM 中增加一个是否为成年人的虚拟方法 publid boolean isAdult(){return this.age>18;},这个可以在 BOM 设计器中完成,不需要更改 Java 代码。
现在我们基于前面开发的 Java 对象来创建一个 BOM。然后给每个属性一个中文描述。开发界面见下图。
图 7. BOM 开发与词汇编写
红色框区 1:当前操作为 Policy 类(保单)。
红色框区 2:当前操作为 processStatus 属性(处理结果)。
红色框区 3:变更 processStatus 属性的词汇描述。
红色框区 4:使用 processStatus 属性的词汇描述。
注:{this} 为关键字,表示当前处理的保单对象而 {***} 为属性占位符。
通过这种方式把 3 个类的相关属性与方法进行中文词汇描述。只需要对业务规则使用到的属性与方法提供中文词汇描述。
回页首
确定规则项目的输入输出参数
规则项目的输入输出参数确定了这个规则项目同外部应用的接口,外部应用通过 Map 键值对的方式来同规则执行服务器来交换数据。对于本例子我们采用 Policy(保单)来作为该规则项目的输入输出参数。见下图。
图 8. 规则项目参数定义
回页首
确定规则结构与执行流程
我们首先把核保规则分为通用核保规则、P 保单核保规则、其它保单核保规则多个规则包。在 P 保单核保规则包下再创建保费计算与资格检查两个包。接着在 P 保单规则包下创建一个子规则流,对保单先进行资格检查,然后再计算费率。
图 9. 保单 P 的规则运算流程
然后在根规则包下创建一个主规则流来确定不同类型的保单的规则运算路径。
图 10. 所有保单的运算流程
在这里,需要核保处理的保单进来之后,规则的执行会按照这个主流程来运行:首先执行通用核保规则包下的所有规则,然后再根据保单的类型运行相关保单的核保规则,而对于 P 保单分支对应的条件定义见红色连线,最后退出返回结果到应用程序。规则流中可以嵌套子流程,规则包中可以嵌套子规则包。
回页首
业务规则开发
接着我可以在 P 保单规则包中创建前面所定义的业务规则。
R1
新建一个业务规则 投保人必须有工作单位,在规则的辅助编辑器中按下图的步骤完成规则。
图 11. R1:投保人必须有工作单位,业务规则书写步骤
打开一个“业务规则辅助编辑器”。创建一个空的“业务规则”,这种规则叫做操作规则。另外还可以创建 决策表、和 决策树。
通过点击“选择一个条件”,从下拉框中选择我们前面定义的参数 核保保单。
点击 是 再选择保单的属性“投保人”。这些是我们在定义 BOM 时确定的。
点击“是” 再选择投保人的属性“工作单位”
点击“是” 再选择操作符“为空”。系统会自动根据属性的数据类型来确定可以使用的操作符集合。操作符还可以被定制。
在那么操作块中点击“选择一个操作”,选择“设置保单的处理结果为一个字符串” 并设置返回消息。
把占位符填上,就完成了一个规则的书写。
R2
参考上面的操作步骤,我们创建这个规则如下。
图 12. R2:投保人的年收入必须大于 5 万元
R3
图 13. R3:被保险人的年龄小于 18 或者大于 60 岁则必须通过人工核保
R4
对于这个规则比较适合使用决策表来处理,操作步骤见下图。
图 14. R4:费率表,决策表开发步骤
创建一个 决策表,并输入名称“保费费率”
产生了一张空表。其中 A、B、C 为条件列,而 D 为动作列。条件列与动作列可以增加或减少。
本规则只有一个条件列与动作列,所以我们删除两个条件列。
双击条件列 A 的表头,在条件定义弹出框中定义列条件。可以通过“ctrl+alt+ 空格”热键来选择条件。同时定义动作列的动作为设置保单费率。
完成格式的决策表。
输入数据的决策表。选中一行,则该行所表达的规则在下面的空白处自动显示出来。(需要配置决策表的属性为显示规则)
这样我们就完成了规则项目的开发。见下图。
图 15. 开发好的规则项目
回页首
同步规则项目到 Rule Team Server(RTS)
为集中安全地保存规则并提供给保单政策管理人员方便地管理与变更规则,我把在 Rule Studio 中开发的规则项目同步到基于 ILOG Rule Team Server(RTS) 的规则库中。该工作可以通过在 Rule Studio 中的规则项目上点击右键,然后选择“Rule Team Server”并输入 RTS 的服务器地址 http://server:port/teamserver 与 rtsAdmin/rtsAdmin 用户名与密码来上传项目。上传完毕后登录 Rule Team Server 的 Web 页面后可以看到该规则项目。
RTS 是部署在应用服务器(APP Server)上的一个企业应用(EAR),它通过 JDBC 数据源来访问存放在关系数据库中的规则库。在该环境中可以实现有权限控制的规则管理,包括查询、新建、变更、版本、基线、测试、部署、权限管理等各种功能。
业务管理人员在该环境下完成了规则变更后,可以直接把规则部署到生产环境。技术人员还可以在 Rule Studio 中同步管理人员的变更。或重新创建一个来自于 RTS 规则库中的规则项目。
图 16. RTS 操作界面与规则书写界面
回页首
规则执行服务器(RES)集成
ILOG JRules 规则执行服务器(Rule Execution Server)与应用的集成有多种方式。可以采用 J2SE 与 J2EE 或 Web Service 的集成方式。J2SE 的集成方式是通过一组 Java API Jar 包来引用,对应的规则部署方式则一般是通过规则文件,也支持 JDBC 数据库。默认没有提供热部署支持,需要应用程序定制来实现。而 J2EE 或 Web Service 的方式是依赖 Java 应用服务器的(例如 WebSphere Application Server),RES 表现为部署在 APP Server 上的 Resource Adapter 与控制台 Web 应用,规则通过控制台程序可以实现热部署,即应用应用无需中断就可以切换到新部署的规则上。已经部署的规则一般是通过 JDBC Datasource 保存在关系数据库中,也可以保存在文件中。应用程序可以通过 Local/Remote EJB、JMS、Web Service、POJO(应用与 RES 部署在同一个容器中)来与规则执行服务器建立会话然后调用执行。
对于批量处理(Batch)的应用我们建议采用 J2SE 的应用架构,数据与应用在一块,降低协议开销,最大化地提高系统吞吐量。而对于联机处理(OLTP)应用,我们建议采用 J2EE 模式或 Web Service。
针对本应用我们采用使用的比较广泛的 Remote EJB 集成方式,在性能满足的条件下,通过 EJB 接口可以提供给多个前端应用程序来访问(例如联机保单、批处理保单)。在能够运行该例子之前还需要你在你的应用服务器上部署 ILOG JRules 的 EJB Jar 包(对应文件为 jrules-res-session-XXX.jar,其中 XXX 是对应的应用服务器名)。
创建规则应用项目(RuleApp)
我们在 Rule Studio 中创建一个规则应用程序(Rule APP)的项目并把刚才创建的规则项目加入进来。规则应用程序是用来封装规则项目的,只与规则相关,不包含任何客户段代码。规则应用可以放入多个规则项目,每个规则项目对应一个规则集(RuleSet),规则集是最小的发布单元,也是客户端程序调用的入口。
在这里我们创建了一个 underwriting-app 项目并加入 underwriting-rule 规则项目,其对应的规则应用名称 underwritingapp 规则集名称为 underwritingrule。那么客户端调用核保规则的入口参数就是 underwritingapp/ underwritingrule。标准的规则集字串格式为:“规则应用程序名 /[ 版本 ]/ 规则集名称 /[ 版本 ]”。不写版本信息则执行最新版本。
同样名称的 RuleApp 也可以在 Rule Team Server 上来创建。这样规则可以同时在 Rule Studio 和 Rule Team Server 上来进行部署。
把规则应用(RuleApp)部署到 RES 上
然后我们把这个规则应用程序部署到 RES 规则执行服务器 上。通过在 underwriting-app 项目上点击右键,然后选择 RuleApp,选择部署,下一步输入 RES 服务器的 http://server:port/res 和 resAdmin/resAdmin 用户名与密码部署。这样规则项目被部署到执行服务器上去,规则执行服务器就可以被外部应用来调用了。
接着我们登录 RES 的控制台查看部署过来的规则。通过控制台我们发现,在执行服务器中可以同时部署多个规则应用,每个规则应用又可包含多个规则项目(规则集),每个规则应用与规则集有可以有不同的执行版本。
图 17. RES 控制台 - 已部署的核保规则应用
开发 EJB 集成客户端代码
我们使用 ILOG JRules 提供的 API 来开发 EJB 客户端,本代码调用部署在 WebSphere Application Server 上的 RES 服务。代码如下:
清单 4. ILOGRuleRemoteRunner.java
package client;
import ilog.rules.bres.session.IlrRuleSessionProvider;
import ilog.rules.bres.session.IlrRuleSessionProviderFactory;
import ilog.rules.bres.session.IlrSessionDescriptor;
import ilog.rules.bres.session.IlrSessionExecutionSettings;
import ilog.rules.bres.session.IlrSessionParameters;
import ilog.rules.bres.session.IlrSessionRequest;
import ilog.rules.bres.session.IlrSessionResponse;
import ilog.rules.bres.session.IlrStatelessRuleSession;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Properties;
import javax.naming.Context;
import model.Individual;
import model.Policy;
import model.Product;
public class ILOGRuleRemoteRunner {
private Map inputParams = new HashMap();
private IlrSessionResponse response = null;
private IlrSessionRequest sessionRequest = null;
private IlrStatelessRuleSession statelessRuleSession = null;
public void init(String rulesetPath) throws Exception{
sessionRequest = new IlrSessionRequest(rulesetPath);
Properties jndiProperties = new Properties();
jndiProperties.setProperty(Context.INITIAL_CONTEXT_FACTORY,
"com.ibm.websphere.naming.WsnInitialContextFactory");
jndiProperties.setProperty(Context.PROVIDER_URL, "corbaloc:iiop:localhost:2809");
IlrRuleSessionProvider provider
= new IlrRuleSessionProviderFactory.Builder(jndiProperties).build();
statelessRuleSession = provider.createStatelessRuleSession();
}
public void setInputParam(String paramName, Object paramValue){
inputParams.put(paramName, paramValue);
}
public Object getOutputParam(String paramName){
if(response == null) {
return null;
}
return response.getExecutionResult()
.getOutputParameters().getObjectValue(paramName);
}
public void executeRuleset()throws Exception {
IlrSessionExecutionSettings execSettings = sessionRequest.getExecutionSettings();
IlrSessionParameters parameters = execSettings.getInputParameters();
Iterator it = inputParams.keySet().iterator();
while(it.hasNext()){
String paramName = (String)it.next();
parameters.setParameter(paramName, inputParams.get(paramName));
}
response = statelessRuleSession.executeRules(sessionRequest);
}
public static void main(String[] args) throws Exception {
//sample
ILOGRuleRemoteRunner theRunner = new ILOGRuleRemoteRunner();
try{
theRunner.init("/underwritingapp/underwritingrule");
//Prepare your java object here
Individual aIndividual = new Individual(30, 100000, null);
Product aProduct = new Product("P", "P 保险产品");
Policy aPolicy = new Policy(aIndividual, aIndividual, aProduct);
//set the rule set exeuction parameter
theRunner.setInputParam("policy", aPolicy);
//execute the rule set
theRunner.executeRuleset();
//get the result
aPolicy = (Policy)theRunner.getOutputParam("policy");
//print the result
System.out.println("return code: " + aPolicy.getProcessStatus());
System.out.println("return message is: " + aPolicy.getProcessMsg());
}catch(Exception e) {
e.printStackTrace();
}
}
}
我们在 Eclipse 中运行这个类的 main 方法,得到的结果截图如下:
图 18. 投保人没有单位的执行结果
我们修改 main 方法的代码,给投保人加上单位,计算费率结果截图如下:
图 19. 核保通过,30 岁的费率标准为 1000
回页首
后续的工作
这样保险应用系统的两个主要的开发内容规则开发与应用集成就完成了。以后该自动核保应用可以通过维护业务规则来满足业务发展的需要,而不需要再变更代码。规则所有的变更轨迹都在 RTS 的规则库中详细保存,增强了业务的可审计性、可跟踪性,并有利于业务优化。
回页首
总结
基于业务规则管理系统(BRMS)的保险应用系统的开发能够简化系统的架构,使得应用程序处理逻辑与业务规则分离,业务规则可以独立于应用程序来使用简单易用的工具与方法进行管理,大大提高了保险公司业务支撑能力。
回页首
下载
描述 名字 大小
classpath 文件 .classpath.zip 1kb
参考资料
学习
IBM WebSphere ILOG JRules 官方网站 来查看该产品提供的完整的解决方案。
IBM developerWorks WebSphere ILOG BRMS 来查看关于本产品的相关技术与学习资料。
“WebSphere ILOG JRules 规则书写 Demo”了解如何使用自然语言的方式书写规则并部署到执行服务器上。
下载 IBM WebSphere ILOG JRules 试用版 去加入业务规则社区。该安装包含了 Rule Studio 与相关文档,通过它您可以了解到该产品的技术架构与开发方法。并可以创建基于 J2SE 的规则执行服务器的应用集成。
IBM developerWorks 中国 WebSphere 专区:为使用 WebSphere 产品的开发人员准备的技术信息和资料。这里提供产品下载、how-to 信息、支持资源以及免费技术库,包含 2000 多份技术文章、教程、最佳实践、IBM Redbook 和在线产品手册。
获得产品和技术
最受欢迎的 WebSphere 试用软件下载:下载关键 WebSphere 产品的免费试用版。
IBM developerWorks 软件下载资源中心:IBM deveperWorks 最新的软件下载。
IBM developerWorks 工具包:下载关键 WebSphere 最新的产品工具包。
讨论
WebSphere ILOG BRMS Blog 去加入业务规则社区。
My developerWorks BPM 群组:为开发人员设立的 BPM 群组,了解业务流程管理解决方案的最新技术资源。
IBM developerWorks 中文社区
条评论
请 登录 或 注册 后发表评论。
添加评论:
注意:评论中不支持 HTML 语法
有新评论时提醒我剩余 1000 字符
共有评论 (7)显示:
hi,我在 http://www.ibm.com/developerworks/cn/downloads/ws/jrules/ 尝试下载,但是总是下载失败,请问 v7.1.1.2 trial edition不再提供了吗
由 Y5G2_fei_lu 于 2012年12月27日发布 报告滥用
下面的异常是什么意思:
java.rmi.RemoteException: CORBA NO_IMPLEMENT 1330446337 No; nested exception is:
\torg.omg.CORBA.NO_IMPLEMENT:
\t>> SERVER (id=4773e3aa, host=chenyuanzhong) TRACE START:
\t>> org.omg.CORBA.NO_IMPLEMENT: The sender's class RMI:model.Policy:232D48710B688D35:0000000000000001 is not present on the local classpath, and the class is not marked as truncatable, so it cannot be unmarshaled. vmcid: OMG minor code: 1 completed: No
\t>>\t at com.ibm.rmi.io.IIOPInputStream.inputObjectFVD(IIOPInputStream.java:1528)
\t>>\t at com.ibm.rmi.io.IIOPInputStream.simpleReadObjectInternal(IIOPInputStream.java:414)
由 NC2E_袁中_陈 于 2012年12月21日发布 报告滥用
client是用ibm的jdk吗
由 NC2E_袁中_陈 于 2012年12月21日发布 报告滥用
还是缺少jar包啊:
ilog.rules.bres.session.IlrRuleSessionCreationException: 在调用规则会话时发生错误。:
java.lang.NoClassDefFoundError: com/ibm/ws/bootstrap/RASWsLoggerFactory
java.lang.ClassNotFoundException: com.ibm.ws.bootstrap.RASWsLoggerFactory
由 NC2E_袁中_陈 于 2012年12月21日发布 报告滥用
增加了class path 源码的下载。谢谢关注!
由 Melodyll 于 2012年12月11日发布 报告滥用
IBM PureSystems
IBM PureSystems™ 系列解决方案是一个专家集成系统
developerWorks 学习路线图
通过学习路线图系统掌握软件开发技能
软件下载资源中心
软件下载、试用版及云计算
相关推荐
5. 后续防护:清除记录只是暂时措施,为了长期保护隐私,应定期清理,并考虑使用加密技术保护USB设备上的数据。 总之,USB使用记录清除是保护个人隐私和数据安全的重要手段,通过使用专用的清理工具,可以有效地...
能自行修改问题,插入删除图片,预览图片等阅读界面:能将记录能容生成到一个界面上方便阅读统计界面:统计日记总数、图片总数、编辑过的格子总数等运行效果:主界面记录心情、天气编辑内容统计界面其他界面暂时只做...
我们暂时只是开发一个网站,所以我们的产品暂时开发所用运行环境为: Windows 系统(Windows 10) Cpu i5-6500 开发软件 eclipse 环境 jdk 9.0 服务器:tomcat 9 详细介绍参考:...
此外,值得注意的是,尽管这种清理工具可能能暂时掩盖开挂行为,但大多数在线游戏都有先进的反作弊机制,能够检测到异常的行为模式,即使记录被清理,仍然有可能被封禁。因此,避免使用作弊软件是保护账户安全的最好...
首先,让我们了解一下“.zip”格式。ZIP是一种常见的文件压缩格式,用于将多个文件或文件夹打包成一个单一的可压缩文件,以节省存储空间并便于传输。ZIP文件可以包含不同类型的文件,并且支持多种压缩算法,如...
1. **临时文件夹**:Windows系统在执行文件操作时,有时会将数据暂时存储在%TEMP%或%USERPROFILE%\AppData\Local\Temp文件夹下。这些临时文件可能包含拷贝活动的痕迹。 2. **注册表**:系统事件和应用程序的活动会...
把CRichEdit改成可以显示行号,可以设置背景等,语法高亮暂时没弄出来(主要是闪烁的问题找不到办法解决)。 把CButoon写成符合下列要求: 支持位图、边框、填充颜色三种风格,并且可以内置一个小按钮,像标签上面的...
中断是嵌入式系统中的一种通信机制,使得处理器能够响应来自硬件或软件的突发事件,中断处理程序会暂时停止当前任务,转而处理中断事件。中断管理包括中断请求、中断响应、中断处理和中断返回四个阶段,是实时系统中...
8. **效率提升技巧**:为了提高记录速度,可以暂时搁置可后续回忆、查询或推测的内容,专注于捕捉关键信息,做到宁可略过不全,也不要遗漏重要点或犯错。 通过以上知识点,我们可以了解到会议记录的重要性以及如何...
计算机网络,大学生期末记记背背,轻松及格,不挂科,内卷室友必备良品!!! 内容包含:计算机网络概述、物理层、数据链路层、网络层、传输层、应用层、网络安全、VLAN实验、单臂路由、静态路由、DHCP、OSPF、RIP、...
保持实事求是的态度,即使是暂时困扰的问题,也可如实记录。 除了以上三种类型,日记的一般写法同样重要。首先,无论哪种日记,都需要有清晰的条理,让读者能够跟随作者的思路理解内容。其次,保持语言流畅,避免错...
用九宫格问答方式记录日记的应用,仿格志 ... 已实现功能: ...主界面:显示当前日期所记录的内容,包括文字内容、图片、心情、天气 ...暂时只做了iPad界面的适配,具有一些基本功能,细节后续待完善。
第一篇日记中,作者提到从忙碌的学期生活中暂时解脱出来,开始适应假期的节奏。在学校的日子里,虽然有时会遇到学生调皮捣蛋,但离开他们后依然会挂念他们的成长。寒假期间,作者选择了多看书和练习书法,认为这样的...
3. **制程检验**:制程检验未能按照《检验规程》和《质量暂时规定》进行,导致产品缺陷未被及时发现,反映了检验流程的疏漏。 4. **仓库管理**:仓库仓管员在处理产品时也存在问题,未严格按照《质量暂时规定》执行...
本软件中文名:“金点家庭记账簿”,英文名:“GOLD ACCOUNT OF FAMILY”,缩写名:“gold”,是一款 用于家庭(个人)记账理财的工具,它可以记录现金收支记录、管理家庭(个人)的银行、股票账户、债权债务以及...
现在是管理有保洁公司管,但工资还是医院发,所以暂时后勤科还要负起监管的责任,护士长们也要协助管理,进行考核,该扣的月末直接报财务科,保证病区的卫生。 18. 会议落实:请分管院长和各个职能部门按照会议内容...
标题中的“鼠标键盘锁”是一种安全工具,设计用于在用户暂时离开电脑时锁定键盘和鼠标,防止未经授权的人员使用。这种软件通常具有简单的操作界面,能够快速启用或解除锁定状态,确保用户离开时电脑的安全性。 描述...
这种情感变化与作者被贬的背景紧密相关,寄情山水只是为了暂时逃避内心的苦闷,但最终仍无法摆脱。 文章中运用了多种写作手法,如移步换景、动静结合、比喻等,使读者仿佛置身于小石潭的美景之中。例如,“潭中鱼可...
译员在听到数字时应立即记录,即使这可能暂时打断对其他意思的笔记。数字独立于上下文,一旦遗忘,可能无法复原。对于未知的大小概念,遗忘后可能只能给出大致的估计。 第三,记专有名词也是必不可少的。尽管大部分...
2. 转移注意力:通过阅读书籍、观看电影、聆听音乐等活动,可以帮助人们暂时脱离现实困扰,找到乐趣,从而缓解焦虑。 3. 社交倾诉:与家人朋友分享内心感受,寻求他们的支持和鼓励,能够增强心理承受力,减轻负面...