用EJB开发订阅信息系统

  作者:板桥banq

上页

5.2.3  架构图

图5-4是一个比较完整的J2EE系统架构图。客户端发出请求后,由实现MVC模式的Web层负责处理客户的表单信息,通过事件触发EJB层中的相应服务,经过EJB层组件运算和处理,将结果返回Web层,再送回客户端。
ejb
图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所示。
ejb
图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,是一对多关系。
ejb
图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;


本项目的基本数据模型设计完成后,进入EJB的实体Bean开发。实体Bean基本与数据表结构一致,是数据表在内存中的映射,但是实体Bean的开发比较琐碎,如果采取CMP,虽然不用写大量的SQL语句,但是配置文件的编写也还是比较繁琐的,因此必须借助可视化的开发环境加快开发速度。在一个IDE开发工具中,首先需要配置开发环境。

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了。

 

下页