基于EJB技术的商务预订系统的开发

开发 后端
EJB技术已经越来越多地应用到大型网络系统开发中。本文中,笔者将介绍EJB(Enterprise Java Beans)的定义,最后结合基于EJB的结构模型和EJB组件开发了一个商务预订系统。

从EJB技术上而言不是一种“产品”,而是一种EJB技术规范。SUN公司对EJB的定义是:EJB的结构是开发和配置基于组件的分布式商务应用程序的一种组件结构。用EJB结构开发的应用程序是可伸缩的、事务型的、多用户安全的。这些应用程序可能只需编写一次,却可以在支持EJB规范的任务服务器平台上进行配置。总的来说,EJB是一个组件事务监控的标准服务器端的组件模型。

基于EJB技术的系统结构模型

EJB结构是一个服务端组件结构,是一个层次性结构。该结构模型在通常状况下可分为客户层、业务逻辑层和数据层,下面笔者对此作一简单介绍。

1.客户层 主要是用来满足对整个系统的各种访问需求并处理以下工作:

接收用户的输入,还可以对用户的输入进行分析检查并作相应的处理;显示由服务器端高层传来的运行结果。客户层通常是由客户进程组成,这些进程由浏览器动态地创建和撤销。

2.业务逻辑层这是整个系统最要害的部分。业务逻辑层在通常状况下会分为两层,其高层是请求接收层(一般称之为Web层),用于接收从浏览器传来的请求并将请求交给底层进行处理,同时将请求处理结果发送给浏览器。这些过程主要由jsp(SUN企业级应用的首选)页面、基于Web的Applets以及显示 HTML页面的Servlets组成。底层是请求处理层(一般称之为EJB层),包括监听进程、处理进程和数据库操作进程,负责处理请求接收层传来的客户请求并对它进行处理,同时将请求结果传递给请求接收层,假如需要的话还需要将处理结果交给数据层进行存储。

3.数据层 主要是为业务逻辑层提供数据服务,如存储业务逻辑层处理结果、返回业务逻辑层检索的数据结果,同时也是为了实现屏蔽数据源的变化,从而实现当数据库发生变化时我们只需修改连接数据源的语句就可以。

EJB组件的分类

通常状况下,服务端的EJB组件有两种基本类型:Entity Bean(实体Bean)和Session Bean(会话Bean)。

Entity Bean 是为了现实世界的对象建造的模型,这些对象通常是数据库的一些耐久记录。Entity Bean为那些可以表达成名词的商务概念建立模型,它既描述了真实世界对象的状态,也描述了它们的行为,同时答应开发者封装与具体概念有关的数据和商务规则。Session Bean是一种通过 Home Interface创建并对客户端连接专有的Enterprise Bean,Session bean实例一般不与其它客户端共享。 Session Bean是客户端应用程序的一个扩展,并负责管理整个过程或任务。Session Bean可以管理Entity Bean之间的交互,描述它们如何一起工作来完成一个非凡任务。

Entity Bean根据管理耐久性的方式可以分为容器管理的Bean和使用Bean管理的 Bean。容器管理的Bean由EJB容器自动管理它们的耐久性,容器知道Bean实例的字段是怎样映射到数据库中去,并自动管理插入、更新和删除数据库中与实体有关的数据;使用Bean管理耐久性的Bean需要明确地完成所有这些工作。Bean的开发者必须编写代码操作数据库,EJB容器只告诉Bean 实例什么时候可以在数据库中安全地插入、更新和删除数据,除此之外,它不提供任何别的帮助。Bean实例自己完成所有的耐久性工作。

Session Bean根据是否有状态可分为无状态Bean和有状态Bean。无状态Session Bean倾向于通用并可重复使用;有状态Session Bean是客户应用程序的扩展,它代表客户完成任务并维护客户的相关状态。

商务预订系统的开发

客舱预订系统是在J2EE平台上开发的基于EJB技术的商务预订系统,其主要流程是用户登录以后,将被依次带领着通过顾客选择页和导航选择页,并将为顾客选择一个可获得的客舱(从TraveAgentBean处获得可供选择的客舱列表,TravelAgentBean的 listAvailableCabin()方法由生成此网页的Servlet调用,客舱列表将用于装载到用户浏览器的网页上创建HTML列表框),当用户选择一间客舱并提交了选择时,一个HTTP请求将会发送到EJB服务器(Websphere Application Server),服务器接到此请求后,将其分派给ReservationServlet,此Servlet调用 TravelAgent.BookPassage()方法做实践的预订,BookPassage()方法返回的标签信息将用于创建另一个送回用户浏览器的网页。假如预订成功,则由 ProcessPaymentServlet去调用ProcessPaymentBean中的支付方法,从而实现对客户的收费过程。

商务预定系统中的EJB组件主要包括以下几个部分:
◆CabinBean:实体Bean,主键是CabinPK,是用来封装现实世界中的航船客舱的一个实体Bean。
◆CustomerBean:实体Bean,主键是CustomerPK,是用来封装现实世界中需要预订航船客舱的消费者的一个实体Bean。
◆CruiseBean:实体Bean,主键是CruisePK,是用来封装现实世界中航船航线的一个实体Bean。
◆ReservationBean:实体Bean,主键是 CruiseID,CabinID,它代表了数据库中不变的一条记录,即一个预订,它记录了预订系统的历史事件,主要是用来防止双重预订,即两个客户预订相同航线的相同客舱,产生这种问题的缘由是因为客户选择客舱和航线的时刻与调用bookPassage()方法的时刻之间有一段间隔时间。
◆TravelAgentBean:有状态会话Bean,一个负责预订航行舱位工作流的会话Bean,它封装了完成一条航线的一个预订操作的过程并在全世界的旅行代理的客户端应用程序中使用。TravelAgentBean不仅满足消费者预订票据的需要,还可提供在航行中剩余客舱的消息。为了完成此任务,Bean需要知道预订是由哪一条航线、客舱,以及客户组成,收集到这些信息后,由bookPassage()方法来完成处理预订过程,它为客户账户的计费负责,在正确航线的正确船只上预订选择的客舱,并通过Ticket类来为客户产生一张票据。在这里,我们需使用CreditCard类存储有关客户信用卡的相关信息,同时,ListAvailableCabins()方法用来显示可用的尚未被预订的客舱。
◆ProcessPaymentBean:无状态会话Bean,它是在事务系统中向消费者收费的过程。它定义了支票、现金和信用卡支付方式的三个事务方法,即ByCheck()、ByCash()和ByCredit()。

商务预订系统的程序代码示例

整个商务预订系统的开发是在IBM VisualAge for Java下面开发完成的,在该IDE开发环境中,实体Bean绝对会话Bean要轻易开发得多,以下就以TravelAgentBean为例,介绍EJB组件的开发过程:

1.TravelAgent远程接口
它提供了设置客户希望预订的航线和客舱ID的方法。此外,还设置boolPassage()方法来对客户的预订进行计费,并为客户产生一张票据。具体代码如下:

 
  1. package com.titan.travelagent;  
  2. import java.rmi.RemoteException;  
  3. import javax.ejb.FinderException;  
  4. import com.titan.cruise.Cruise;  
  5. import com.titan.customer.Customer;  
  6. import com.titan.processpayment.CreditCard;  
  7. public interface TravelAgent extends javax.ejb.EJBObject  
  8. {  
  9. public void setCruiseID(int cruise) throws RemoteException, FinderException;  
  10. public int getCruiseID( ) throws RemoteException, IncompleteConversationalState;  
  11. public void setCabinID(int cabin) throws RemoteException, FinderException;  
  12. public int getCabinID()throws RemoteException, IncompleteConversationalState;  
  13. public int getCustomerID()throws RemoteException, IncompleteConversationalState;  
  14. public Ticket boolPassage(CreditCard card,double price) throws RemoteException。IncompleteConversationalState;  
  15. }  

 

2.TravelAgent Home接口

TravelAgent Home接口代码如下:

 
  1. puckage com.titan.tracelagent;  
  2. import java.rmi.RemoteException;  
  3. import javax.ejb.CreateException;  
  4. import com.titan.customer.Customer;  
  5. public interface TravelAgentHome extends javax.ejb.EJBHome {  
  6. public TravelAgent create(Customer cust) throws RemoteException,CreateException;}  

 

3.TravelAgent Bean类
它需要实现TravelAgent的远程接口和Home接口中的所有行为,限于篇幅,本文将不再介绍其实现代码,感爱好的读者可自己加以完成。以上就是基于EJB技术的商务预订系统的开发。

【编辑推荐】

  1. EJB入门知识简单介绍
  2. 选择EJB3.0,不再需要Spring+Hibernate
  3. EJB3.0和Spring的抉择
  4. 使用EJB事务属性控制事务的作用域
  5. EJB的分类及其各自的功能和应用
责任编辑:佚名 来源: jsp博客
相关推荐

2009-06-25 16:35:12

EJB技术

2009-04-13 11:37:12

IBMdWSOAP

2009-06-11 16:53:09

什么是EJBEJB

2009-06-26 16:01:39

EJB组织开发EJB容器EJB

2011-03-04 10:03:45

EJB数据库应用

2009-06-25 16:47:30

EJB技术

2009-06-12 11:06:35

EJB技术

2009-06-11 16:25:44

EJB2.0EJB

2011-05-16 16:26:14

EJB

2009-06-26 14:10:24

EJB开发

2009-06-15 16:29:42

JSONAJAX

2009-08-17 17:53:07

RSS订阅开发实例

2009-06-25 17:08:14

2022-09-04 23:24:45

Go语言监控

2010-06-18 17:09:05

UML用例驱动

2009-06-12 12:46:59

EJB3.0

2009-06-15 16:06:25

JBoss IDE

2009-06-26 14:29:03

2009-06-11 14:25:17

EJBJava

2009-06-26 14:54:18

Spring支持EJB
点赞
收藏

51CTO技术栈公众号