0

0

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

php中文网

php中文网

发布时间:2016-06-01 14:09:26

|

1098人浏览过

|

来源于php中文网

原创

EJB

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

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

客户层 主要是用来满足对整个系统的各种访问需求并处理以下工作:
接收用户的输入,还可以对用户的输入进行分析检查并作相应的处理;
显示由服务器端高层传来的运行结果。
客户层通常是由客户进程组成,这些进程由浏览器动态地创建和撤销。

业务逻辑层 这是整个系统最关键的部分。业务逻辑层在通常情况下会分为两层,其高层是请求接收层(一般称之为Web层),用于接收从浏览器传来的请求并将请求交给底层进行处理,同时将请求处理结果发送给浏览器。这些过程主要由JSP页面、基于Web的Applets以及显示 HTML页面的Servlets组成。底层是请求处理层(一般称之为EJB层),包括监听进程、处理进程和数据库操作进程,负责处理请求接收层传来的客户请求并对它进行处理,同时将请求结果传递给请求接收层,如果需要的话还需要将处理结果交给数据层进行存储。
数据层 主要是为业务逻辑层提供数据服务,如存储业务逻辑层处理结果、返回业务逻辑层检索的数据结果,同时也是为了实现屏蔽数据源的变化,从而实现当数据库发生变化时我们只需修改连接数据源的语句就可以。

EJB组件的分类
通常情况下,服务端的EJB组件有两种基本类型:Entity Bean(实体Bean)和Session Bean(会话Bean)。
基于EJB技术的商务预订系统的开发 _MySQL

图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组件的开发。 

HTShop网上购物系统
HTShop网上购物系统

HTShop网上购物系统由恒天网络科技有限公司根据国际先进技术和国内商务特点自主版权开发的一款具有强大功能的B2C电子商务网上购物平台。HTShop以国际上通用流行的B/S(浏览器/服务器)模式进行设计,采用微软公司的ASP.NET(C#)技术构建而成。 2007-11-10 HTShop CS 通用标准版 v1.1.11.10 更新内容自由更换模版功能开放 修改了购买多款商品,会员中心订单只显示

下载

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
c语言中/相关合集
c语言中/相关合集

本专题整合了c语言中/的用法、含义解释。阅读专题下面的文章了解更多详细内容。

0

2026.02.03

漫蛙漫画网页版入口与正版在线阅读 漫蛙MANWA官网访问专题
漫蛙漫画网页版入口与正版在线阅读 漫蛙MANWA官网访问专题

本专题围绕漫蛙漫画(Manwa / Manwa2)官网网页版入口进行整理,涵盖漫蛙漫画官方主页访问方式、网页版在线阅读入口、台版正版漫画浏览说明及基础使用指引,帮助用户快速进入漫蛙漫画官网,稳定在线阅读正版漫画内容,避免误入非官方页面。

0

2026.02.03

Yandex官网入口与俄罗斯搜索引擎访问指南 Yandex中文登录与网页版入口
Yandex官网入口与俄罗斯搜索引擎访问指南 Yandex中文登录与网页版入口

本专题汇总了俄罗斯知名搜索引擎 Yandex 的官网入口、免登录访问地址、中文登录方法与网页版使用指南,帮助用户稳定访问 Yandex 官网,并提供一站式入口汇总。无论是登录入口还是在线搜索,用户都能快速获取最新稳定的访问链接与使用指南。

3

2026.02.03

Java 设计模式与重构实践
Java 设计模式与重构实践

本专题专注讲解 Java 中常用的设计模式,包括单例模式、工厂模式、观察者模式、策略模式等,并结合代码重构实践,帮助学习者掌握 如何运用设计模式优化代码结构,提高代码的可读性、可维护性和扩展性。通过具体示例,展示设计模式如何解决实际开发中的复杂问题。

2

2026.02.03

C# 并发与异步编程
C# 并发与异步编程

本专题系统讲解 C# 异步编程与并发控制,重点介绍 async 和 await 关键字、Task 类、线程池管理、并发数据结构、死锁与线程安全问题。通过多个实战项目,帮助学习者掌握 如何在 C# 中编写高效的异步代码,提升应用的并发性能与响应速度。

0

2026.02.03

Python 强化学习与深度Q网络(DQN)
Python 强化学习与深度Q网络(DQN)

本专题深入讲解 Python 在强化学习(Reinforcement Learning)中的应用,重点介绍 深度Q网络(DQN) 及其实现方法,涵盖 Q-learning 算法、深度学习与神经网络的结合、环境模拟与奖励机制设计、探索与利用的平衡等。通过构建一个简单的游戏AI,帮助学习者掌握 如何使用 Python 训练智能体在动态环境中作出决策。

2

2026.02.03

python end=
python end=

本专题整合了python中end=的相关内容,阅读专题下面的文章了解更多详细内容。

0

2026.02.03

python运算符优先级
python运算符优先级

本专题整合了python运算符优先级排序、用法相关内容,阅读专题下面的文章了解更多详细内容。

1

2026.02.03

python print用法与作用
python print用法与作用

本专题整合了python print的用法、作用、函数功能相关内容,阅读专题下面的文章了解更多详细教程。

1

2026.02.03

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Rust 教程
Rust 教程

共28课时 | 5.3万人学习

PostgreSQL 教程
PostgreSQL 教程

共48课时 | 8.4万人学习

Git 教程
Git 教程

共21课时 | 3.3万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号