一個高級應用設計概要:完整設計一個高級應用-第一篇

1、一個高級應用設計概要

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

航班搜索、預約、確認預訂、座位選擇、行程審查、用戶資料、飛行管理、膳食訂單、航班狀態、飛行準備。html


應用的整體要求是:java

  • 客戶能夠預訂航班,選擇可選升級,並選擇座位。web

  • 客戶費用根據其所屬的常旅客級別而有所不一樣。算法

  • 客戶能夠經過提供航班號和出發日期來查看航班狀態。sql

  • 用戶管理員能夠執行管理功能,例如在飛行操做期間提交航班以安排和更新航班報告。數據庫

  • 全部後臺活動在航班提交時開始。編程

  • 根據膳食類型將膳食訂單發送給三個不一樣的供應商。瀏覽器

  • 多個操做並行進行以準備起飛航班,包括飛行員分配,登機門分配,飛機安全檢查和訂購燃料。緩存



具體而言:安全


航班搜索。 客戶能夠經過輸入出發日期,出發機場和到達機場來搜索航班。 若是出發日期爲空白,則顯示機場之間路線的全部航班。 要開始預訂,客戶從顯示的列表中選擇一個航班。


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


  • 檢查行李

  • 選擇行李數(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實現。



2、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提供對中間件服務器的管理,管理和監視



3、應用設計


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在下圖中的藍色方塊中描繪。


圖片




4、實驗展示:運行應用


首先,執行腳本,啓動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)

此服務模擬第三方供應商服務,接受噴氣燃料訂單。 服務由com.jbtravel.ws.FuelOrderWS提供。

相關文章
相關標籤/搜索