文章导读
版权说明:本文书写过程中参照了红帽的技术文档;本系列文章中的部分测试代码为红帽公司版权所有,因此不能提供源码文件。
航班搜索、预定、确认预订、座位选择、行程审查、用户资料、飞行管理、膳食订单、航班状态、飞行准备。
应用的总体要求是:
具体而言:
航班搜索。 客户可以通过输入出发日期,出发机场和到达机场来搜索航班。 如果出发日期为空白,则显示机场之间路线的所有航班。 要开始预订,客户从显示的列表中选择一个航班。
预订。 在显示预留页面之前,用户必须使用有效的用户名和密码登录。 用户可以选择膳食类型和以下便利功能:
客户可能属于以下几种常旅客级别之一:无、铜、银、金。 便利费用取决于等级。
*客户必须达到法定饮酒年龄(21岁以上)。 仅限银级和金级的饮品升级。
确认预订后,便利功能选择无法更改。
不允许退款或取消。
确认预订。 当客户确认预订时,航班的里程(航线距离)将添加到他们的帐户中。 常旅客级别适当调整:
座位选择。 在确认预订后的任何时间,客户都可以选择他们的座位。 以下是座位选择规则:
行程审查。 如果客户已登录,则客户可以从主菜单中选择预约以供审核。此时客户可以更改其座位分配。
用户资料。 用户可以创建帐户。 登录后,他们可以编辑他们的帐户个人资料。 用户还可以退出应用程序。
飞行管理
管理员用户可以使用多种航班管理功能。 如果航班未计划(OPEN),则管理员可以提交航班以进行计划。 此时,所有的幕后操作都是为了准备航班,例如订购餐点。
一旦提交航班,管理员可以按高度报告航班进度并从目的地报出数英里。 如果报告的预定航班有高度和英里数,则会被视为在飞行中。 据报道,在飞行中的飞行高度为0且距离0英里时,它被认为是着陆的。
管理员可以使用飞行控制报告。 这显示了已在四个类别之一中提交的所有航班的航班状态:预定,接地,飞行和登陆。
膳食订单
膳食订单发送给三个供应商之一。 每个供应商都有自己的订单协议:
航班状态
客户可以随时查看航班状态。 客户提供航班号和出发日期。 如果航班存在,则显示航班状态。
航空公司未承诺的航班显示为OPEN状态。 承诺的航班是预定的。 其他状态包括:飞行,着陆和接地。
飞行准备
一旦提交航班,就会发生以下活动。 这些活动可以并行进行。
整个应用的设计,将会以开源中间件解决方案-JBoss实现。
JBoss是一整套开源中间件解决方案,实现的功能架构图如下:
这些产品主要在以下几个方向支撑应用:
应用和服务运行时
提供了一个核心运行时,它能够支持不同特性的应用。 该体系结构为当今流行的标准提供支持,并且足够灵活、可支持未来的新编程模型、框架和组件模型。
红帽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)视图。
它包括以下功能:
优点
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应用程序中提供。 这些是:
规则引擎
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提供。