利用EJB创建CRM系统

2002-12-16 10:17:20【作者】 AMTeam.org 【进入论坛】
本文关键字 理论探讨
广告

利用EJB创建CRM系统

林建刚、聂旭琰、薛瑛

本文主要是介绍如何利用EJB(Enterprise Java Bean)技术来开发一个CRM系统,整个系统应用J2EE构架,以IBM Websphere Application Server作为应用服务器来进行开发的。本文将介绍整个系统的构架以及整个系统中EJB的分析设计和实现。

系统结构

本系统运用了当今流行的J2EE构架,将整个CRM系统分成四层,即客户层、Web层、EJB层和数据层。其中EJB层主要处理系统的业务逻辑,系统运用Session facade设计模式即利用Session Bean包装所有Entity Bean,来负责调用Entity Bean的方法,客户端只允许与Session Bean交互,这样可以缩短系统响应时间,减少资源利用。Entity Bean用来代表数据库中的数据,所有对Entity Bean的操作都代表了底层数据库中数据的变动,Entity Bean与数据库的同步过程由容器来管理。Session Bean用来处理业务逻辑和工作流,是客户端工作的抽象。由Web层来处理企业的表示逻辑,用来处理与EJB层和客户端之间的交互,包括接收、响应客户端的请求,并向EJB层发出请求,接收它的响应结果。

系统以IBM Vasual Age forJ ava作为开发工具,以IBMDB2作为后台数据库,利用IBM Websphere Application Server作为应用服务器。下图就是整个系统的结构图。



系统结构图

客户层(Client Tier):包括浏览器、笔记本等客户端。

Web层(Web Tier):使用JSP(Java Server Pages)来开发业务逻辑。

业务层(也叫EJB层):Web Server/App Server,使用IBM HTTP Server作为HTTP Server,IBM Websphere Server作为应用服务器。

数据层(Data Tier):使用IBMDB2存储企业数据。

EJB设计

下面,我们将详细介绍系统中所需的实体EJB与会话Bean的功能。

实体EJB设计

使用了EJB的实体Bean类型,所有的数据都封装到实体EJB中,因此数据库设计就成了EJB的设计。对应于上面的数据库设计,这里可以抽象出来以下数据实体:

System Manager EJB:主要用来描述整个系统的管理员信息的实体Bean;

Customer EJB:主要用来描述整个系统的客户信息的实体Bean;

Contact EJB:主要用来描述与客户接触洽谈的有关信息的相关资料的实体Bean;

Customer Service EJB:主要用来描述企业对客户提供服务的相关信息的实体Bean;

Product Purchase EJB:主要用来描述客户向企业购买产品的有关信息的实体Bean;

Produt Checkout EJB:主要用来描述客户向企业购买产品后,企业的产品出库的相关信息的实体Bean;

Product Storage EJB:主要用来企业向销售厂家购买产品后,产品入库的相关信息的实体Bean。

会话Bean设计

会话Bean(Session Bean)主要完成一些逻辑处理,包括以下会话Bean:

Facade EJB:主要用来封装所有实体Bean;

Stat Product EJB:主要是用来统计库存产品的会话Bean;

Stat Customer EJB:主要是用来统计客户信息的会话Bean。

程序示例

下面,笔者以Customer EJB为例,简述程序的开发过程:

编写Home接口

Home接口是用来创建、定位和删除对象的,每个实体Bean都有自己的Home接口。下面的代码包含了Customer Home接口的具体代码:

  import java.rmi.?;
  import javax.ejb.?;
  import java.util.?;
  public interface CustomerHome extends EJBHome {
  public Customer create(
  String customerName,
  String customerPassword,
  String customerSex,
  String customerDepartment,
  String customerInfo)
  throws RemoteException,CreateException;
  public Customer findByPrimaryKey(String primaryKey)
  throws RemoteException,FinderException;
  public Collection findAll() throws RemoteException, FinderException;
  ……
  }


编写Remote接口

远程接口定义了客户端和Bean交互使用的商务方法。下面的代码显示了Customer接口的定义。

  import java.rmi.?;
  import javax.ejb.?;
  public interface Customer extends EJBObject {
  String getCustomerName() throws RemoteException;
  void setCustomerName(String customerName) throws RemoteException;
  ……
  }


写Bean类

开发任何Bean都要以它的远程接口作向导。远程接口中定义的商务方法必须复制到Bean类中。在一个CMP中,Bean类必须有与Home接口中的创建方法对应的方法.最后还必须实现javax.ejb.Entity Bean接口中定义的回调方法。下面是Customer Bean类的代码示例:

  import java.rmi.?;
  import javax.ejb.?;
  public abstract class UserinfoBean implements EntityBean {
  EntityContext entityContext;
  String customerName;
  ……
  public Customer ejbcreate(
  String customerName,
  String customerPassword,
  String customerSex,
  String customerDepartment,
  String customerInfo)
  throws RemoteException,CreateException {
  this.customerName = customerName;
  ……
  }
  public void ejbRemove()
  throws RemoveException {
  }
  …… //其他回调方法
  public String getCustomerName(){
  return customerName;
  }
  …… //其他商务方法
  }


在会话Bean中包装实体

在Facade EJB中包装实体Bean,以便客户端调用。

下面代码演示了如何在会话Bean的一个商务方法中包装实体Bean:

  public Collection getAllRecords(){
  Vector vectUserInfos = new Vector();
  try {
  Context ctx = new InitialContext();
  Object ref = ctx.lookup("CustomerHome");
  CustomerHome customerHome = (CustomerHome) PortableRemoteObject.narrow
(ref, CustomerHome.class);
  Collection collection = customerHome.findAll();
  Return collection;
  } catch(Exception e) {
  e.printStackTrace();
  }
  }


最后,我们只要在JSP页面中调用整个Customer的数据资料即可。完成其他的设计工作后,一个用EJB技术开发的CRM系统就初具规模了。

本文原载于中国计算机报

如果您希望与本文章的作者或其所在机构,进一步交流,请联系:姜小姐
jill.jiang@amt.com.cn | 021-51096826-112 | 在线联系
CRM会客厅[原创]汉拓讲坛-第三讲 建立有..

第三讲 建立有效的销售体系CRM超越软件 客户关系管理的销售模式 大客户组织关系图 销售工作记录与管理工具 时间管理 客户拜访计划 销售行动……

周祖军专栏房地产企业,快速扩张凭什么? ..

在大量囤积资金和土地资源的同时,房地产企业的快速扩张离不开标准化。