级别: 初级 李志 (goodlz@21cn.com), 软件部工程师, IBM
2004 年 12 月 01 日 Business Rule Bean简称BR Beans,是WBI Server Foundation 中提供的封装业务规则的J2EE应用组件。应用系统中通常包含复杂的业务逻辑,随着业务的变化,其规则也会相应地改变。因此传统上,开发者会把业务规则数据放到配置文件或数据库中,通过编码方式读取这些数据,并通过修改配置文件或数据库的方式更改业务规则。通过使用BR Beans,用户可以更加方便、规范地更改业务规则,并通过图形方式进行管理。
1. Business Rule Bean 的架构
BR Bean是基于J2EE 三层架构的应用,它的体系结构如下所示:
从右往左看,各组件的功能分别为:
BRBeans DB:BRBeans EJB使用数据库存储规则定义
BRBeans EJB:包括一些EJB,用于管理规则定义,包括创建、更改和删除规则定义,包括三种EJB:
- Rule -- 封装业务规则的定义
- RuleFolder -- 封装文件夹对象的定义
- RuleHelper -- 是用于管理操作规则和文件夹接口的Session Bean
Rule Implementor:提供规则的实现。这是一个实现RuleImplementor接口的Java类。
Rule Client:一个JavaBean,用于封装调用Rule的API。
Rule User:使用Rule的业务代码。
开发者要创建的是Rule Implementor、Rule Client和 Rule User,而BR Bean EJB和 BR Beans DB 通过配置来实现。
下面我们就以一个具体的例子来展示BR Bean的使用。在银行信贷系统中,我们需要分析客户的信用等级,而信用等级是根据用户的存款数目来划分的。用于划分信用等级的存款数目就是一个经常变化的业务规则。在本例中,我们假设客户分为两个等级:"Gold"和"Regular",区分两个等级的业务规则数据是50000元,存款数目在五万元以上的用户等级为"Gold"。在应用系统运行后,我们会把业务规则数据改成六万元,并观察规则更改后应用系统的变化。
下面具体介绍开发BR Bean的步骤。
2. 导入BR Beans
我们的开发环境为WSADIE V5.1,并在工作区创建一个WBI Server Foundation V5.1的测试服务器。
1)新建一个企业应用程序项目,包含一个EJB项目和一个Web项目。
2)修改EJB项目的Java构建路径。右击项目,选择"属性",在弹出对话框中选择"Java构建路径"。点击"添加变量"按钮,选中"WAS_EE_V51",点击"扩展"按钮,展开lib目录,选中brbClient.jar、brbRuleMgmtApp.jar、brbServer.jar、distexcep.jar这四个文件,按"确定"按钮。如下图所示。
3)右击刚才创建的EJB 项目,选择"导入",浏览选择WSADIE安装目录下runtimes\ee_v51\BRBeans目录下的BRBeansDB2.jar文件(根据使用的数据库类型选择相应的文件)。
4)右击EJB项目,选择"验证",去除"覆盖验证首选项",再去除"EJB 验证器",这样可以去掉任务栏中显示的警告信息。
5)打开EJB 项目中的部署描述符页面,在"概述"页面中指定"JNDI - CMP"的缺省数据源。在JNDI名称中输入"jdbc/BRBeansDS"。如下图所示:
6)切换到"J2EE 层次结构"透视图,展开EJB模块,右击刚才生成的EJB项目,选择"生成"/"部署代码和RMIC代码",点击"全部选中"按钮,并点击"完成"生成部署代码。
7)右击刚才生成的EJB项目,选择"生成"/"Schema DDL"。
3. 创建Rule Implementor
1)右击新建的Web项目,选择"属性",在弹出窗口中选择"Java构建路径",点击"增加变量"按钮,选择WAS_EE_V51,并点击"扩展"按钮,在弹出窗口中展开lib目录,选择brbClient.jar、brbServer.jar和distexcep.jar文件。如下图所示:
2)在Web项目的JavaSource目录下创建一个Java类,在新建向导中点击"添加"按钮,实现接口com.ibm.websphere.brb.RuleImplementor,如下所示:
生成该类后,可以看到类中实现了三个方法:
- init():初始化函数,可以获取业务规则数据值
- fire():实现具体的规则运算
- getDescription():返回实现器的描述
3)在类中添加如下代码,导入ImplementorHelper类。
import com.ibm.websphere.brb.implementor.ImplementorHelper;
|
4)在类中添加如下变量,定义分类处理的标识字符。
String GOLD_LEVEL = "Gold";
String REGULAR_LEVEL = "Regular";
private double goldlevel;
|
5)在init方法中加入以下代码:
ImplementorHelper.assertParamLength(arg0,1,"ApproveRole.init");
//引号中ApproveRole为业务规则的名称
goldlevel = ((Double)arg0[0]).doubleValue();
|
6)在fire方法中添加如下代码:
double balance = ((Double)arg3[0]).doubleValue();//读取客户端传来的值
if (balance >= goldlevel)
return GOLD_LEVEL;
else
return REGULAR_LEVEL;
|
4. 创建Rule Client
1)在Web项目下创建一个Java类。
2)导入辅助类。
import com.ibm.websphere.brb.BusinessRuleBeansException;
import com.ibm.websphere.brb.TriggerPoint;
|
3)在类中指定规则名(即刚才Rule Implementor的类名),添加如下代码:
private static final String RULE_NAME="com/ibm/lizhi/br/ApproveRole";
|
4)添加如下代码,根据输入的数值判断客户是否属于Gold级别。
public boolean isGold(double balance) {
boolean isGold = false;
try {
TriggerPoint tp = new TriggerPoint();
tp.disableCaching();
Object[] parms = {new Double(balance)};
Object result = tp.triggerClassifier(null, parms, RULE_NAME);
Object[] resultParms = (Object[])result;
String customerLevel = (String)resultParms[0];
isGold = customerLevel.equalsIgnoreCase("Gold");
} catch(BusinessRuleBeansException e) {
System.err.println(e.getMessage());
}
return isGold;
}
|
5. 创建 Rule User
Rule User为Rule的客户端,通过给 Rule Client传递用户存款值,得到经过业务规则计算后得到的用户等级。
1)在Web项目中创建一个JSP或Servlet。
2)添加如下代码,调用Rule Client。
double balance=60000;
com.ibm.lizhi.br.Client client =new com.ibm.lizhi.br.Client();
boolean isGold = client.isGold(balance);
System.out.println(isGold);
|
6. 创建数据库
1)在DB2数据库中创建一个Database,这里起名叫BRBEANS。
2)展开EJB项目,右击ejbModule/META-INF目录下的Table.ddl文件,选择"在数据库服务器上运行"。
3)点击"下一步"按钮,选择"仅在成功时提交修改"。点击"下一步",输入数据库名、用户名和密码,选择数据库类型,点击"完成"按钮创建库,如下图所示:
4)切换到服务器透视图,双击测试服务器,打开服务器配置。
5)切换到"安全性"页面,在"JAAS认证条目"栏中点击"添加"按钮,输入数据库的用户名和密码,如下图所示:
6)切换到数据源页面,在JDBC提供程序列表中选择"Default DB2 JDBC Provider",在下面的"数据源"栏中点击"添加"按钮,输入名称、JNDI名称,选择组件管理的认证别名,如下图所示:
7)选中刚才添加的数据源,在下方的资源属性栏中选择"databaseName"项,点击"编辑"按钮,输入值"BRBEANS"。
8)切换到环境页面,展开"系统属性"栏,点击"添加"按钮,输入名称和值,如下图所示:
7. 使用规则管理浏览器
1)创建快捷方式,指向$WSADIE_HOME\runtime\ee_v51\bin\rulemgmt.bat,其中$WSADIE_HOME为WSADIE的安装目录。修改快捷方式,在命令后加参数"brbeansDefaultProperties",如下图所示。
2)启动WSADIE中的测试服务器。
3)双击快捷方式启动规则浏览器,如下图所示:
4)在界面中右击"规则名称空间",选择"新建"/"文件夹"。
5)反复执行,建立和 Rule Implementor 相同的路径,如上图所示。
6)右击"br"目录,选择"新建"/"规则",指定名称、开始日期,选择分类方式为"规则执行分类",如下图所示:
7)切换到"实现"选项卡,指定 Java规则实现器为Rule Implementor的完整类路径。
8)点击"初始化参数"栏中的"添加"按钮,更改类型为Double,输入值50000。
9)按"确定"按钮生成规则。
8. 测试规则
运行Rule User,查看返回的结果为"true",表明用户的存款多于五万,为Gold级用户。更改客户端传给Rule Client的值,将balance值改为41000。可以看到如果值小于五万,返回结果将会产生变化,返回"false"。
下面更改业务规则,启动业务规则浏览器,修改刚才创建的规则,把初始化参数改为40000。再次运行Rule User,可以看到返回结果为"true",说明业务规则即时生效了。
9. 启动全局安全性(可选)
如果在服务器中使用了全局安全性,BR Bean提供了一系列安全角色,用于限定由特定用户对业务规则进行管理。
1)打开服务器配置,切换到"安全性"选项卡,点击"启动安全性",输入操作系统的"Administrators"组的某个用户名和密码,作为WBI Server Foundation的系统管理员,并保存修改。如下图所示:
2)打开包含BR Bean的EAR项目,双击打开应用程序部署描述符,并切换到"安全性"选项卡,点击"收集"按钮,出现下图所示的安全角色:
3)如上图所示,点击"RuleManager",在"WebSphere绑定"区域中选择"用户/组",点击"添加"按钮,输入用户名,该用户将具有管理业务规则的权限。
4)点击"RuleUser"角色,在"WebSphere绑定"区域中选择"每个人",这样所有用户都可以使用业务规则功能。保存修改即可。
5)启动服务器,打开业务规则浏览器,这时会出现对话框,要求我们输入具有管理业务规则权限的用户名称和密码,说明安全性生效。
10.总结
业务规则的更改通常需要大量的代码和不尽人意的定制界面,Business Rule Bean给我们提供了一种减少工作量的解决方法和标准化的管理界面,降低了业务规则变化对应用系统的影响。
关于作者
对本文的评价
|