国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JSP > 正文

基于EJB技術(shù)的商務(wù)預(yù)訂系統(tǒng)的開發(fā)

2024-09-05 00:18:12
字體:
供稿:網(wǎng)友

現(xiàn)在的技術(shù)已經(jīng)越來越多地應(yīng)用于大規(guī)模網(wǎng)絡(luò)系統(tǒng)的開發(fā),今天錯新技術(shù)頻道小編就為大家介紹基于EJB技術(shù)的商務(wù)預(yù)訂系統(tǒng)的開發(fā),以及EJB組件的內(nèi)容和分類,一起跟著小編的步伐來學(xué)習(xí)一下吧!
EJB從技術(shù)上而言不是一種“產(chǎn)品”,而是一種技術(shù)規(guī)范。SUN公司對EJB的定義是:EJB的結(jié)構(gòu)是開發(fā)和配置基于組件的分布式商務(wù)應(yīng)用程序的一種組件結(jié)構(gòu)。用EJB結(jié)構(gòu)開發(fā)的應(yīng)用程序是可伸縮的、事務(wù)型的、多用戶安全的。這些應(yīng)用程序可能只需編寫一次,卻可以在支持EJB規(guī)范的任務(wù)服務(wù)器平臺上進行配置。總的來說,EJB是一個組件事務(wù)監(jiān)控的標準服務(wù)器端的組件模型。

基于EJB技術(shù)的系統(tǒng)結(jié)構(gòu)模型
EJB結(jié)構(gòu)是一個服務(wù)端組件結(jié)構(gòu),是一個層次性結(jié)構(gòu),其結(jié)構(gòu)模型如圖1所示。該結(jié)構(gòu)模型在通常情況下可分為客戶層、業(yè)務(wù)邏輯層和數(shù)據(jù)層,下面筆者對此作一簡單介紹。

Entity?Bean是為了現(xiàn)實世界的對象建造的模型,這些對象通常是數(shù)據(jù)庫的一些持久記錄。Entity?Bean為那些可以表達成名詞的商務(wù)概念建立模型,它既描述了真實世界對象的狀態(tài),也描述了它們的行為,同時允許開發(fā)者封裝與具體概念有關(guān)的數(shù)據(jù)和商務(wù)規(guī)則。Session?Bean是一種通過Home?Interface創(chuàng)建并對客戶端連接專有的Enterprise?Bean,Session?bean實例一般不與其它客戶端共享。Session?Bean是客戶端應(yīng)用程序的一個擴展,并負責(zé)管理整個過程或任務(wù)。Session?Bean可以管理Entity?Bean之間的交互,描述它們?nèi)绾我黄鸸ぷ鱽硗瓿梢粋€特殊任務(wù)。
Entity?Bean根據(jù)管理持久性的方式可以分為容器管理的Bean和使用Bean管理的Bean。容器管理的Bean由EJB容器自動管理它們的持久性,容器知道Bean實例的字段是怎樣映射到數(shù)據(jù)庫中去,并自動管理插入、更新和刪除數(shù)據(jù)庫中與實體有關(guān)的數(shù)據(jù);使用Bean管理持久性的Bean需要明確地完成所有這些工作。Bean的開發(fā)者必須編寫代碼操作數(shù)據(jù)庫,EJB容器只告訴Bean實例什么時候可以在數(shù)據(jù)庫中安全地插入、更新和刪除數(shù)據(jù),除此之外,它不提供任何別的幫助。Bean實例自己完成所有的持久性工作。
Session?Bean根據(jù)是否有狀態(tài)可分為無狀態(tài)Bean和有狀態(tài)Bean。無狀態(tài)Session?Bean傾向于通用并可重復(fù)使用;有狀態(tài)Session?Bean是客戶應(yīng)用程序的擴展,它代表客戶完成任務(wù)并維護客戶的相關(guān)狀態(tài)。

商務(wù)預(yù)訂系統(tǒng)的開發(fā)
客艙預(yù)訂系統(tǒng)是在J2EE平臺上開發(fā)的基于EJB組件技術(shù)的商務(wù)預(yù)訂系統(tǒng),其主要流程是用戶登錄以后,將被依次帶領(lǐng)著通過顧客選擇頁和導(dǎo)航選擇頁,并將為顧客選擇一個可獲得的客艙(從TraveAgentBean處獲得可供選擇的客艙列表,TravelAgentBean的listAvailableCabin()方法由生成此網(wǎng)頁的Servlet調(diào)用,客艙列表將用于裝載到用戶瀏覽器的網(wǎng)頁上創(chuàng)建HTML列表框),當(dāng)用戶選擇一間客艙并提交了選擇時,一個HTTP請求將會發(fā)送到EJB服務(wù)器(Websphere?Application?Server),服務(wù)器接到此請求后,將其分派給ReservationServlet,此Servlet調(diào)用TravelAgent.BookPassage()方法做實際的預(yù)訂,BookPassage()方法返回的標簽信息將用于創(chuàng)建另一個送回用戶瀏覽器的網(wǎng)頁。如果預(yù)訂成功,則由ProcessPaymentServlet去調(diào)用ProcessPaymentBean中的支付方法,從而實現(xiàn)對客戶的收費過程。其具體構(gòu)架見圖2。
預(yù)定系統(tǒng)中的EJB組件主要包括以下幾個部分:
CabinBean:實體Bean,主鍵是CabinPK,是用來封裝現(xiàn)實世界中的航船客艙的一個實體Bean。
CustomerBean:實體Bean,主鍵是CustomerPK,是用來封裝現(xiàn)實世界中需要預(yù)訂航船客艙的消費者的一個實體Bean。
CruiseBean:實體Bean,主鍵是CruisePK,是用來封裝現(xiàn)實世界中航船航線的一個實體Bean。ReservationBean:實體Bean,主鍵是CruiseID,CabinID,它代表了數(shù)據(jù)庫中不變的一條記錄,即一個預(yù)訂,它記錄了預(yù)訂系統(tǒng)的歷史事件,主要是用來防止雙重預(yù)訂,即兩個客戶預(yù)訂相同航線的相同客艙,產(chǎn)生這種問題的原因是因為客戶選擇客艙和航線的時刻與調(diào)用bookPassage()方法的時刻之間有一段間隔時間。TravelAgentBean:有狀態(tài)會話Bean,一個負責(zé)預(yù)訂航行艙位工作流的會話Bean,它封裝了完成一條航線的一個預(yù)訂操作的過程并在全世界的旅行代理的客戶端應(yīng)用程序中使用。TravelAgentBean不僅滿足消費者預(yù)訂票據(jù)的需要,還可提供在航行中剩余客艙的消息。為了完成此任務(wù),Bean需要知道預(yù)訂是由哪一條航線、客艙,以及客戶組成,收集到這些信息后,由bookPassage()方法來完成處理預(yù)訂過程,它為客戶賬戶的計費負責(zé),在正確航線的正確船只上預(yù)訂選擇的客艙,并通過Ticket類來為客戶產(chǎn)生一張票據(jù)。在這里,我們需使用CreditCard類存儲有關(guān)客戶信用卡的相關(guān)信息,同時,ListAvailableCabins()方法用來顯示可用的尚未被預(yù)訂的客艙。
ProcessPaymentBean:無狀態(tài)會話Bean,它是在事務(wù)系統(tǒng)中向消費者收費的過程。它定義了支票、現(xiàn)金和信用卡支付方式的三個事務(wù)方法,即ByCheck()、ByCash()和ByCredit()。

商務(wù)預(yù)訂系統(tǒng)的程序代碼示例
整個商務(wù)預(yù)訂系統(tǒng)的開發(fā)是在IBM?VisualAge?for?Java下面開發(fā)完成的,在該IDE開發(fā)環(huán)境中,實體Bean相對會話Bean要容易開發(fā)得多,以下就以TravelAgentBean為例,介紹EJB組件的開發(fā)過程:

1.TravelAgent遠程接口
它提供了設(shè)置客戶希望預(yù)訂的航線和客艙ID的方法。此外,還設(shè)置boolPassage()方法來對客戶的預(yù)訂進行計費,并為客戶產(chǎn)生一張票據(jù)。具體代碼如下:
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類
它需要實現(xiàn)TravelAgent的遠程接口和Home接口中的所有行為,限于篇幅,本文將不再介紹其實現(xiàn)代碼,感興趣的讀者可自己加以完成。

通過錯新技術(shù)頻道小編介紹的基于EJB技術(shù)的商務(wù)預(yù)訂系統(tǒng)的開發(fā),相信大家都有了一定的了解,想要了解更多的技術(shù)內(nèi)容,請繼續(xù)關(guān)注錯新技術(shù)頻道吧!

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 高清| 巴彦淖尔市| 乐安县| 安宁市| 孟连| 兴文县| 全椒县| 文山县| 宁陕县| 治多县| 益阳市| 鸡东县| 逊克县| 怀柔区| 砚山县| 奈曼旗| 那曲县| 普安县| 阿巴嘎旗| 皮山县| 锡林浩特市| 蓝田县| 成安县| 马边| 青海省| 双江| 鹤壁市| 阿克陶县| 桃园市| 彩票| 鄢陵县| 洮南市| 宁德市| 靖安县| 股票| 万源市| 游戏| 祥云县| 栾川县| 二连浩特市| 安远县|