用EJB开发订阅信息系统
作者:板桥banq
上页
5.2.3 架构图
图5-4是一个比较完整的J2EE系统架构图。客户端发出请求后,由实现MVC模式的Web层负责处理客户的表单信息,通过事件触发EJB层中的相应服务,经过EJB层组件运算和处理,将结果返回Web层,再送回客户端。
图5-4 架构图
在整个层次中,依次为Domain层、持久层、服务层,然后是表现层及应用层。即需要首先建立整个系统Domain Model,如基本的业务对象、实体Bean等。
5.2.4 接口框架设计
在本项目中,将建立一个通用的Web和EJB接口框架,实现图5-4中Web层与EJB层之间的统一通道。这种框架实现了两个容器之间的解耦,同时又使得Web层对EJB层的调用变得标准而有规则,可以推广应用到大多数J2EE项目中。
该框架的优点:
可重用性强,使用方便。由于形成了一个标准框架,在具体应用中只要分别实现相应接口就可以直接使用该框架。
松散的耦合性。与Web层和EJB层都保持了松散的耦合性,同时为两者之间联系提供了一个可控制的通道。
易于开发,该框架好似一根扁担,一头挑起了Web层,另外一头挑起了EJB层,使得整个J2EE的开发分工明确。负责Web层程序开发的Team只要做好与框架的接口工作,而负责EJB层程序开发的Team做好与框架接口另外一边,再通过配置文件配置,就可以将整个J2EE系统轻松地组合运行起来。
易于拓展,可以在这个框架中很方便地加入缓冲Cache,这样减少Web层对EJB层的频繁访问。
该接口图如图5-5所示。
图5-5 接口框架图
在该接口框架中,具体应用系统只要实现ServiceProxy,Web层的Struts Action类(或其他类似功能的类)作为客户端可以直接调用ServiceProxyHandler的perform方法,通过ServiceProxyHandler委托后台进行逻辑运算和数据库操作。
该控制框架综合使用了Command模式、Proxy模式以及工厂模式等,实现了一个可重用、可扩展、伸缩性极强的接口框架系统。
5.3 EJB详细设计和实现
本项目实际是一个基于数据库的管理信息系统,又因为需要支持多台服务器并发运行,因此使用EJB这个分布式技术框架是比较适合的。
在一个多台服务器集群的环境中,由于EJB容器的集群功能,部署和发布EJB非常方便。应用系统在一台EJB服务器中发布后,将自动在几百台服务器上运行,由EJB服务器自动实现动态负载平衡,以及单点错误恢复。而这些集群技术在应用系统开发时基本不需考虑。
5.3.1 业务对象建模
本项目主要业务对象有3个:客户对象Customer、住址对象Address和订阅对象subscription。每个Csutomer有多个Address和subscription,是一对多关系。
图5-6 领域模型
Customer对象代码如下:
public class Customer implements java.io.Serializable {
private String id = null; //客户ID
private String firstName = null; //姓
private String lastName = null; //名
private Collection addresss; //地址
private Collection subscriptions; //订阅
public String getId() { return id; }
public void setId(String id) { this.id = id; }
public void setFirstName(String firstName) { this.firstName = firstName; }
public String getFirstName() { return firstName; }
public void setLastName(String lastName) { this.lastName = lastName; }
public String getLastName() { return lastName; }
public void setAddress(Collection addresss){ this.addresss = addresss; }
public Collection getAddresss(){ return addresss; }
public void setSubscription(Collection subscriptions){
this.subscriptions = subscriptions;
}
public Collection getSubscriptions(){ return subscriptions; }
}
由于Customer与Address和Subscription的一对多关系,在Customer中包含了它们两个的集合,这为实体Bean实现Composite Entity模式(http://java.sun.com/blueprints /corej2eepatterns/Patterns/CompositeEntity.html)作好了准备。
定义完成3个基本对象,可以设计其持久化的数据结构,如下:
# 客户数据表的结构customer
CREATE TABLE customer (
id varchar(50) NOT NULL default '',
firstName varchar(50) default '', #名字
lastName varchar(50) default '',
UNIQUE KEY customerID (id)
) TYPE=InnoDB;
##地址数据库
CREATE TABLE address (
addressID varchar(50) NOT NULL default '0',
street varchar(50) default '0', #街道
city varchar(50) default '0', #城市
zip varchar(50) default '0', #邮编
state varchar(50) default '0', #州和省份
customerID varchar(50) default '', #customerID
PRIMARY KEY (addressID),
KEY customerID (customerID)
) TYPE=InnoDB;
# 订阅信息数据表的结构 `subscription`
CREATE TABLE subscription (
title varchar(50) NOT NULL default '', #订阅的题目
type varchar(50) default '', #类型 报纸或杂志
id varchar(50) default '', #客户数据库
PRIMARY KEY (title)
) TYPE=InnoDB;
5.3.2 开发环境配置
目前,使用JBoss 3.0 作为应用服务器,MySQL 4.0作为数据库,JBuilder作为编程工具和Rose作为设计工具的J2EE设计开发运行模式已经日趋成熟稳定。其显著特点是打破了J2EE成本居高不下的弊端,以极其低廉的运行成本受到广大用户的欢迎。
尤其是JBoss作为免费的J2EE服务器,对webshere和weblogic商业服务器形成了有力的冲击。SQL 4.0在继承以前版本快速稳定的基础上,整合了InnoDB (http://www.InnoDB.com/)先进的事务处理机制,从最近关于MySQL伴随Linux不断蚕食商业数据库市场的报道中,可以预见MySQL辉煌的未来。
EJB的开发如果完全手工编码是非常繁琐的,当然需要依靠强大的IDE工具来达到快速开发的目的,JBuilder作为快速有力的开发工具,其独特性主要表现在7.0以后版本提供的EJB快速可视化开发功能。
为了让JBuilder7以后版本支持JBoss的运行环境,需要安装一个OpenTool的插件,步骤如下:
到http://sourceforge.net/projects/JBoss-opentool/下载软件JBoss OpenTool,放到JBuilder的lib/ext目录下。重启动JBuilder。
启动Jbuilder,用Tools/Configure Servers选择JBoss 3x,激活Enable Server checkbox。选择JBoss安装目录。如 C:\JBoss-3.0.0选择Custom tab,然后设置JBoss 的安装目录,选择JBoss部署目录。
选择所在项目的project 属性或default porject属性。选择Server,选中Modular services provided by different servers,单击Service中的EJB下拉Server菜单,会出现JBoss 3.x,其他service也如果有非None就逐个选择。确认后,保存。
当再新建一个project或直接选择new 时,选择Enterprise,会发现以前灰色图标的EJB系列图标激活,表示JBuilder可以开发EJB了。
为了让JBuilder能够直接从MySQL数据库中导入数据表并自动转换成CMP实体Bean,需要做以下配置:
安装MySQL的JDBC ,在JBuilder 的tools->config libraries中,选择窗口的左下方new后,对于name输入MySQL,对于location选择User Home,对于Add选择MySQL的JDBC库mysql-connector-java-XXXX-stable-bin.jar ,这个包可以在MySQL网站上下载。
在tools->Enterprise setup 的Database driver中加入新增的MySQL库,这时一定要重启JBuilder。
至此,JBuilder安装准备就绪,现在可以开始使用JBuilder的图形化界面快速开发EJB了。
下页