IBM®
跳转到主要内容
    中国 [选择]    使用条款
 
 
Select a scope: Search for:    
    首页    产品    服务与解决方案     支持与下载    个性化服务    
跳转到主要内容

developerWorks 中国  >  WebSphere  >

在WBI Server Foundation中使用Business Rule Bean 封装业务规则

(Pattern and Best Practice)

developerWorks
文档选项

未显示需要 JavaScript 的文档选项


级别: 初级

李志 (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给我们提供了一种减少工作量的解决方法和标准化的管理界面,降低了业务规则变化对应用系统的影响。



关于作者

李志,IBM 公司软件部工程师,主要负责业务流程整合,您可以通过 goodlz@21cn.com与我联系。




对本文的评价

太差! (1)
需提高 (2)
一般;尚可 (3)
好文章 (4)
真棒!(5)

建议?







回页首


IBM 公司保留在 developerWorks 网站上发表的内容的著作权。未经IBM公司或原始作者的书面明确许可,请勿转载。如果您希望转载,请通过 提交转载请求表单 联系我们的编辑团队。
    关于 IBM 隐私条约 联系 IBM 使用条款