航班搜索、预约、确认预订、座位选择、行程审查、用户资料、飞行管理、膳食订单、航班状态、飞行准备。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实现。
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提供。