天天看點

一個進階應用設計概要:完整設計一個進階應用-第一篇

一、一個進階應用設計概要

JBTravel應用,是一個航空公司的應用,它需要包含幾大功能:

航班搜尋、預定、确認預訂、座位選擇、行程審查、使用者資料、飛行管理、膳食訂單、航班狀态、飛行準備。

應用的總體要求是:

  • 客戶可以預訂航班,選擇可選更新,并選擇座位。
  • 客戶費用根據其所屬的常旅客級别而有所不同。
  • 客戶可以通過提供航班号和出發日期來檢視航班狀态。
  • 使用者管理者可以執行管理功能,例如在飛行操作期間送出航班以安排和更新航班報告。
  • 所有背景活動在航班送出時開始。
  • 根據膳食類型将膳食訂單發送給三個不同的供應商。
  • 多個操作并行進行以準備起飛航班,包括飛行員配置設定,登機門配置設定,飛機安全檢查和訂購燃料。

具體而言:

航班搜尋。 客戶可以通過輸入出發日期,出發機場和到達機場來搜尋航班。 如果出發日期為空白,則顯示機場之間路線的所有航班。 要開始預訂,客戶從顯示的清單中選擇一個航班。

預訂。 在顯示預留頁面之前,使用者必須使用有效的使用者名和密碼登入。 使用者可以選擇膳食類型和以下便利功能:

  • 檢查行李
  • 選擇行李數(1-3個)
  • 更新到進階餐點。
  • 舒适套餐,包括毯子和枕頭。
  • 飲料套餐,最多可提供兩種含酒精飲料。
  • 娛樂套餐,提供耳塞和電影播放器。
  • 更新到頭等艙。
  • 旅行保險

客戶可能屬于以下幾種常旅客級别之一:無、銅、銀、金。 便利費用取決于等級。

一個進階應用設計概要:完整設計一個進階應用-第一篇
一個進階應用設計概要:完整設計一個進階應用-第一篇

*客戶必須達到法定飲酒年齡(21歲以上)。 僅限銀級和金級的飲品更新。

确認預訂後,便利功能選擇無法更改。

不允許退款或取消。

确認預訂。 當客戶确認預訂時,航班的裡程(航線距離)将添加到他們的帳戶中。 常旅客級别适當調整:

  • Gold is >= 50000 miles.
  • Silver is >= 25000 and < 50000.
  • Bronze is >= 10000 and < 25000.
  • None is < 10000.

座位選擇。 在确認預訂後的任何時間,客戶都可以選擇他們的座位。 以下是座位選擇規則:

  • 頭等艙的座位适用于購買了頭等艙的客戶。 頭等艙的客戶不能選擇頭等艙的座位以外的座位。
  • 經濟艙3個座位适用于所有常旅客級别。
  • 銅級及以上經濟艙2個座位。
  • 銀級及以上經濟艙1個座位。
  • 緊急出口排座位僅限金級。 客戶必須年滿21歲才能坐在出口處。
  • 隻有一個人可以預訂座位。

行程審查。 如果客戶已登入,則客戶可以從主菜單中選擇預約以供稽核。此時客戶可以更改其座位配置設定。

使用者資料。 使用者可以建立帳戶。 登入後,他們可以編輯他們的帳戶個人資料。 使用者還可以退出應用程式。

飛行管理

管理者使用者可以使用多種航班管理功能。 如果航班未計劃(OPEN),則管理者可以送出航班以進行計劃。 此時,所有的幕後操作都是為了準備航班,例如訂購餐點。

一旦送出航班,管理者可以按高度報告航班進度并從目的地報出數英裡。 如果報告的預定航班有高度和英裡數,則會被視為在飛行中。 據報道,在飛行中的飛行高度為0且距離0英裡時,它被認為是着陸的。

管理者可以使用飛行控制報告。 這顯示了已在四個類别之一中送出的所有航班的航班狀态:預定,接地,飛行和登陸。

膳食訂單

膳食訂單發送給三個供應商之一。 每個供應商都有自己的訂單協定:

  • 素食餐訂單通過FTP發送給供應商。 每個航班都有一個XML檔案,其中包含訂購素食餐的航班上每個預訂的内容。
  • Kosher膳食訂單通過Web服務發送給供應商。 該服務一次接受一個訂單,并要求将預訂作為XML記錄發送。
  • 任何其他類型的膳食訂單都通過檔案系統發送給供應商。 每個航班都有一個XML檔案,其中包含航班上每個預訂的内容,用于訂購猶太食品和素食者以外的餐點。

航班狀态

客戶可以随時檢視航班狀态。 客戶提供航班号和出發日期。 如果航班存在,則顯示航班狀态。

航空公司未承諾的航班顯示為OPEN狀态。 承諾的航班是預定的。 其他狀态包括:飛行,着陸和接地。

飛行準備

一旦送出航班,就會發生以下活動。 這些活動可以并行進行。

  • 人力資源為飛行員配置設定飛行員。
  • 根據飛機的大小(座位數)為飛行配置設定登機口。
  • 維護部門對飛機進行安全檢查。 如果引用任何問題,航班将停飛。 在這種情況下,航班狀态顯示為GROUNDED。
  • 計算飛行所需的燃料量(加侖)加上一小時儲備。 通過将訂單發送到Web服務來訂購該燃料量。 燃料量根據飛機類型和以下因素計算:
  • 在巡航速度下每小時燃燒的平均燃料磅數。
  • 飛機的平均巡航速度。
  • 飛機上的發動機數量。

整個應用的設計,将會以開源中間件解決方案-JBoss實作。

二、JBoss産品

JBoss是一整套開源中間件解決方案,實作的功能架構圖如下:

一個進階應用設計概要:完整設計一個進階應用-第一篇
  • Red Hat JBoss Enterprise Application Platform (EAP)
  • Red Hat JBoss Data Grid
  • Red Hat JBoss BPM Suite
  • Red Hat JBoss BRMS
  • Red Hat JBoss Fuse
  • Red Hat JBoss A-MQ
  • Red Hat JBoss Data Virtualization
  • Red Hat JBoss Developer Studio
  • Red Hat JBoss Operations Network

這些産品主要在以下幾個方向支撐應用:

應用和服務運作時

提供了一個核心運作時,它能夠支援不同特性的應用。 該體系結構為當今流行的标準提供支援,并且足夠靈活、可支援未來的新程式設計模型、架構群組件模型。

一個進階應用設計概要:完整設計一個進階應用-第一篇

紅帽JBoss企業應用程式平台(EAP)提供了參考體系結構的應用程式和服務運作時元件。通過此平台,開發人員可以生成可在浏覽器和移動/平闆電腦裝置中檢視的豐富應用程式。企業服務可以使用EJB,JAX-RS和JAX-WS提供給用戶端應用程式和企業服務總線。應用程式可以使用面向消息的中間件(MOM)來使用和生成消息。通過持久性架構(JPA),應用程式可以使用和從關系資料庫生成資料。

部署在JBoss EAP中的企業應用程式還可以與參考體系結構的其他區域互動,例如資料內建平台、資料網格和業務流程/規則引擎。

今天的許多應用程式都遇到性能下降,因為應用程式正在消耗大量資料。紅帽JBoss資料網格,可以通過在記憶體中緩存資料來提高資料密集型應用程式的性能。除了緩存之外,JBoss Data Grid還提供了分布式資料網格計算平台。複雜的資料密集型計算可以分布在資料所在的資料網格叢集的節點上,而不是通路大型資料集然後執行計算。

流程管理和服務內建

在快速變化的業務需求的世界中,通常實作靈活的面向服務的體系結構。使用這些服務的靈活性由使用BPMN2等标準協調工作的體系結構元件提供。紅帽JBoss BPM Suite提供業務流程創作,管理和執行服務。

為了對快速變化的市場做出反應,業務邏輯與業務應用程式的分離非常重要。紅帽JBoss BRMS提供規則創作,管理和執行服務。規則實施業務邏輯和決策算法,提供業務靈活性和上市速度。

企業服務總線用于通過企業內建模式(EIP)內建應用程式和服務。 Red Hat JBoss Fuse提供了一個OSGi容器,支援流行的開源架構,如Apache Camel。 Apache Camel通過支援各種資料和服務通路協定以及企業內建模式,簡化了應用程式內建的實作。

紅帽JBoss A-MQ提供面向消息的中間件解決方案,以進一步協助應用程式內建,支援高速消息傳遞。

所有這些中間件産品都可以以各種組合使用,以滿足當今複雜應用程式內建方案的需求。

資料內建和商業智能

當必須一起使用多個資料庫時,組織需要彌合許多不同的技術和語義差距,以獲得所需的資料。 組織的資料量不斷增加,對整合資料視圖的需求不斷增加,以推動實時業務營運,并且越來越多地推動互操作性和标準支援。 以更直接,簡化和可擴充的方式彌合資料缺口的能力正成為迫切需要。

借助紅帽JBoss資料虛拟化,企業可以建立、部署、執行和管理資料服務。 可以從多個源建立資料的虛拟視圖,包括關系資料庫,檔案系統上的檔案,Web服務等。 開發人員可以更有效地跨聯合資料源橋接語義差距,并建立可重用的資料通路子產品,将應用程式與資料結構更改的影響隔離開來。

使用者互動服務

今天,需要以多種格式為應用程式提供使用者界面:完整的Web浏覽器,移動Web浏覽器和移動/平闆電腦應用程式。 Red Hat 支援并鼓勵使用HTML5,jQuery Mobile,AngularJS,GWT和Apache Cordova等開源解決方案,為您的應用程式建構強大,豐富的用戶端界面。

內建開發工具和系統管理

随着可用的中間件産品,API和架構數量不斷增加,為企業應用程式開發人員提供工具以提高其工作效率非常重要。 紅帽JBoss Developer Studio是一個基于Eclipse的開發平台(IDE),內建了對所有中間件産品套件的支援。 提供嵌入式運作時支援以促進企業應用程式的部署和調試。

紅帽中間件的營運管理由紅帽JBoss營運網絡提供。 JBoss Operations Network提供對中間件伺服器的管理,管理和監視

三、應用設計

JBTravel架構:

一個進階應用設計概要:完整設計一個進階應用-第一篇

JBTravel資料庫架構。 JBTravel應用程式使用一個PostgreSQL。 有一個建立資料庫并使用測試資料的加載腳本:

下圖顯示了架構。

一個進階應用設計概要:完整設計一個進階應用-第一篇
一個進階應用設計概要:完整設計一個進階應用-第一篇

JBTravel domain entity。

 JBTravel Web應用程式,使用JPA實體與PostgreSQL資料庫進行互動。entities 駐留在com.jbtravel.domain包中。 commons項目包含一個模型,該模型是com.jbtravel.model包中此domain的鏡像(大部分)。 commons模型類不包含任何JPA注釋,在一種情況下,類名稱不同(Customer = User)。 此外,已删除與父模型對象的關系。 commons模型類用于将資料傳遞到應用程式之外,例如隊列,資料網格和業務流程。 每個JPA實體都有一個方法map(),它生成實體的副本作為公共模型對象。

一個進階應用設計概要:完整設計一個進階應用-第一篇

Web application

JBTravel Web應用程式包含使用者界面元件: Web服務和EJB服務。 使用者界面元件包括facelets templates, JSF pages, style sheets, images, and backing beans (CDI).。

網頁模闆。 facelets模闆位于src/main/webapp/jbtravelTempate.xhtml。 它包含幾個部分,如下圖所示。 每個JSF頁面都将出現在模闆的内容部分中。

一個進階應用設計概要:完整設計一個進階應用-第一篇

Facelets是一種輕量級的頁面聲明語言,用于使用HTML樣式建構JSF(JavaServer Faces)視圖。

它包括以下功能:

  • 它使用XHTML建立網頁。
  • 除了支援JavaServer Faces和JSTL标記庫之外,它還支援Facelets标簽庫。
  • 它支援表達語言(EL)。
  • 它是使用元件和頁面的模闆。

優點

  • 它通過模闆和複合元件支援代碼可重用性。
  • 它通過定制提供元件和其他伺服器端對象的功能可擴充性。
  • 編譯時間更快
  • 它在編譯時驗證表達式語言。
  • 高性能渲染能力。

JSF頁面。 XHTML格式的JSF頁面包含facelets和RichFaces标記。 以下是描述頁面流的圖表。

一個進階應用設計概要:完整設計一個進階應用-第一篇

Backing beans:

 支援網頁操作的CDI範圍bean可以在com.jbtravel.view包中找到。 這些beans在下圖中的藍色方塊中描繪。

一個進階應用設計概要:完整設計一個進階應用-第一篇

四、實驗展現:運作應用

首先,執行腳本,啟動EAP

一個進階應用設計概要:完整設計一個進階應用-第一篇

建立項目:

一個進階應用設計概要:完整設計一個進階應用-第一篇
一個進階應用設計概要:完整設計一個進階應用-第一篇

建構:

一個進階應用設計概要:完整設計一個進階應用-第一篇

建構成功,生成war包:JBTravel-Web-Slution.war

一個進階應用設計概要:完整設計一個進階應用-第一篇

部署war包:

一個進階應用設計概要:完整設計一個進階應用-第一篇
一個進階應用設計概要:完整設計一個進階應用-第一篇

啟動浏覽器并導航到http://localhost:8080/jbtravel。

我們可以看到,浏覽器輸入位址後,會跳轉到 faces/jbtHome.xhtml

一個進階應用設計概要:完整設計一個進階應用-第一篇

使用航班菜單進行預訂。flights.sql中的腳本可用于查找可用航班:

一個進階應用設計概要:完整設計一個進階應用-第一篇
psql postgres postgres flights.sql      
一個進階應用設計概要:完整設計一個進階應用-第一篇
一個進階應用設計概要:完整設計一個進階應用-第一篇
一個進階應用設計概要:完整設計一個進階應用-第一篇

可以将滑鼠懸停在航班号上,對話框将顯示有關航班的其他資訊。

一個進階應用設計概要:完整設計一個進階應用-第一篇

接下來,到資料庫中檢視使用者的資訊,檢視使用者名、密碼、年齡和常旅客卡的級别:

一個進階應用設計概要:完整設計一個進階應用-第一篇

随便選擇一個航班,然後提示登入,我們使用admin使用者,金卡級别。

一個進階應用設計概要:完整設計一個進階應用-第一篇

接下來,選擇飲食傾向和其他服務:

一個進階應用設計概要:完整設計一個進階應用-第一篇

選擇座位:

一個進階應用設計概要:完整設計一個進階應用-第一篇
一個進階應用設計概要:完整設計一個進階應用-第一篇

預定成功。

一個進階應用設計概要:完整設計一個進階應用-第一篇

在這個預定機票的過程中:

1. 總費用由JBoss BRMS規則引擎(jBPM)計算。 不同的使用者具有不同的常旅客級别。 更新費用根據常旅客級别而有所不同。

2.可用座位基于之前的預訂以及按年齡,常旅客級别和所選班級(一等艙)可用的座位。 可用席位清單由一系列規則縮小。

Service Layer

服務由EJB在com.jbtravel.beans包中的JBTravel Web應用程式中提供。 這些是:

  • AirportBean
  • FlightBean
  • MealBean
  • ReservationBean
  • RouteBean
  • SeatBean
  • UserBean

規則引擎

 JBoss BRMS規則引擎用于滿足多種要求,包括計算便利/更新費用,裡程獎勵以及可供座位選擇的計算座位。 com.jbtravel.rules.RulesEngine包裝規則引擎的配置和執行。 這個bean被注入EJB和需要觸發規則的背景bean。

檢視這些bean的源碼檔案:

一個進階應用設計概要:完整設計一個進階應用-第一篇

MealBeanTest.java

一個進階應用設計概要:完整設計一個進階應用-第一篇

Web services

JBTravel Web應用程式提供了幾個JAX-RS Web服務和一個JAX-WS Web服務。 Web服務由EJB提供。 其他由POJO提供。 支援以下Web服務:

使用者Web服務(JAX-RS)

此服務提供有關使用者的詳細資訊。 查找條件是使用者名。 服務com.jbtravel.beans.UserBean提供。

我們檢視源碼的一段:膳食訂單服務(JAX-RS)

此服務模拟第三方供應商服務,該服務接受猶太餐的膳食訂單。 服務com.jbtravel.ws.MealOrderWS提供。

燃油訂單服務(JAX-WS)