热门标签 | HotTags
当前位置:  开发笔记 > 前端 > 正文

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

基于EJB技术的商务预订系统的开发
技术已经越来越多地应用到大型网络系统开发中,本文中,笔者将介绍EJB(Enterprise Java Beans)的定义、基于EJB技术的应用系统结构模型以及EJB组件的内容和分类,最后结合基于EJB的结构模型和EJB组件开发了一个商务预订系统。
EJB从技术上而言不是一种“产品”,而是一种技术规范。SUN公司对EJB的定义是:EJB的结构是开发和配置基于组件的分布式商务应用程序的一种组件结构。用EJB结构开发的应用程序是可伸缩的、事务型的、多用户安全的。这些应用程序可能只需编写一次,却可以在支持EJB规范的任务服务器平台上进行配置。总的来说,EJB是一个组件事务监控的标准服务器端的组件模型。

基于EJB技术的系统结构模型
EJB结构是一个服务端组件结构,是一个层次性结构,其结构模型如图1所示。该结构模型在通常情况下可分为客户层、业务逻辑层和数据层,下面笔者对此作一简单介绍。


图2:商务预订系统的构架 

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中的支付方法,从而实现对客户的收费过程。其具体构架见图2。
预定系统中的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()方法来对客户的预订进行计费,并为客户产生一张票据。具体代码如下:
package com.titan.travelagent;
import java.rmi.RemoteException;
import javax.ejb.FinderException;
import com.titan.cruise.Cruise;
import com.titan.customer.Customer;
import com.titan.processpayment.CreditCard;
public interface TravelAgent extends javax.ejb.EJBObject
{
public void setCruiseID(int cruise) throws RemoteException, FinderException;
public int getCruiseID( ) throws RemoteException, IncompleteConversationalState;
public void setCabinID(int cabin) throws RemoteException, FinderException;
public int getCabinID()throws RemoteException, IncompleteConversationalState;
public int getCustomerID()throws RemoteException, IncompleteConversationalState;
public Ticket boolPassage(CreditCard card,double price) throws RemoteException, IncompleteConversationalState;


2.TravelAgent Home接口
TravelAgent Home接口代码如下:

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

3.TravelAgent Bean类
它需要实现TravelAgent的远程接口和Home接口中的所有行为,限于篇幅,本文将不再介绍其实现代码,感兴趣的读者可自己加以完成。

通过以上步骤,我们就完成了一个商务预定系统的EJB组件的开发。 

推荐阅读
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • 禁止程序接收鼠标事件的工具_VNC Viewer for Mac(远程桌面工具)免费版
    VNCViewerforMac是一款运行在Mac平台上的远程桌面工具,vncviewermac版可以帮助您使用Mac的键盘和鼠标来控制远程计算机,操作简 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • Oracle优化新常态的五大禁止及其性能隐患
    本文介绍了Oracle优化新常态中的五大禁止措施,包括禁止外键、禁止视图、禁止触发器、禁止存储过程和禁止JOB,并分析了这些禁止措施可能带来的性能隐患。文章还讨论了这些禁止措施在C/S架构和B/S架构中的不同应用情况,并提出了解决方案。 ... [详细]
  • 一句话解决高并发的核心原则
    本文介绍了解决高并发的核心原则,即将用户访问请求尽量往前推,避免访问CDN、静态服务器、动态服务器、数据库和存储,从而实现高性能、高并发、高可扩展的网站架构。同时提到了Google的成功案例,以及适用于千万级别PV站和亿级PV网站的架构层次。 ... [详细]
  • Java和JavaScript是什么关系?java跟javaScript都是编程语言,只是java跟javaScript没有什么太大关系,一个是脚本语言(前端语言),一个是面向对象 ... [详细]
  • 如何实现织梦DedeCms全站伪静态
    本文介绍了如何通过修改织梦DedeCms源代码来实现全站伪静态,以提高管理和SEO效果。全站伪静态可以避免重复URL的问题,同时通过使用mod_rewrite伪静态模块和.htaccess正则表达式,可以更好地适应搜索引擎的需求。文章还提到了一些相关的技术和工具,如Ubuntu、qt编程、tomcat端口、爬虫、php request根目录等。 ... [详细]
  • Nginx使用AWStats日志分析的步骤及注意事项
    本文介绍了在Centos7操作系统上使用Nginx和AWStats进行日志分析的步骤和注意事项。通过AWStats可以统计网站的访问量、IP地址、操作系统、浏览器等信息,并提供精确到每月、每日、每小时的数据。在部署AWStats之前需要确认服务器上已经安装了Perl环境,并进行DNS解析。 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 本文介绍了使用AJAX的POST请求实现数据修改功能的方法。通过ajax-post技术,可以实现在输入某个id后,通过ajax技术调用post.jsp修改具有该id记录的姓名的值。文章还提到了AJAX的概念和作用,以及使用async参数和open()方法的注意事项。同时强调了不推荐使用async=false的情况,并解释了JavaScript等待服务器响应的机制。 ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • 本文详细介绍了云服务器API接口的概念和作用,以及如何使用API接口管理云上资源和开发应用程序。通过创建实例API、调整实例配置API、关闭实例API和退还实例API等功能,可以实现云服务器的创建、配置修改和销毁等操作。对于想要学习云服务器API接口的人来说,本文提供了详细的入门指南和使用方法。如果想进一步了解相关知识或阅读更多相关文章,请关注编程笔记行业资讯频道。 ... [详细]
  • 本文介绍了Java的集合及其实现类,包括数据结构、抽象类和具体实现类的关系,详细介绍了List接口及其实现类ArrayList的基本操作和特点。文章通过提供相关参考文档和链接,帮助读者更好地理解和使用Java的集合类。 ... [详细]
  • 本文介绍了一种图片处理应用,通过固定容器来实现缩略图的功能。该方法可以实现等比例缩略、扩容填充和裁剪等操作。详细的实现步骤和代码示例在正文中给出。 ... [详细]
author-avatar
阿魏空荡荡
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有