一个高级应用设计概要:完整设计一个高级应用-第一篇

文章导读

版权说明:本文书写过程中参照了红帽的技术文档;本系列文章中的部分测试代码为红帽公司版权所有,因此不能提供源码文件。

  • 本文的内容仅限于技术探讨,不能作为指导生产环境的素材;
  • 本文分为系列文章,将会有多篇,初步预计将有多篇。
  • 笔者鼓励读者购买红帽培训获得更多系统性的培训。

一、一个高级应用设计概要

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)

此服务模拟第三方供应商服务,接受喷气燃料订单。 服务由com.jbtravel.ws.FuelOrderWS提供。

原文发布于微信公众号 - 大魏分享(david-share)

原文发表时间:2018-09-07

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏成猿之路

Java的常用开发工具

java常用的开发工具。都说工欲善其事必先利其器,要想学好java这门语言,选择一款好用顺手的开发工具是必不可少的。另外面试java工作时开发工具的使用也是一个...

78820
来自专栏JAVA技术zhai

从1.6W名面试者中收集的Java面试题精选汇总(内附知识脑图)

36380
来自专栏Web 开发

Generator异步隐藏测试

这样有没有Generator感觉都是一样的,只不过把异步的包在一个函数里面,对外没有暴露出来而已

13000
来自专栏Albert陈凯

2018-11-23 graph图数据库概览,经过一个星期的Demo终于看懂了这篇文章20180818图数据库概览

Knowledge Base of Relational and NoSQL Database Management Systems​db-engines.co...

70430
来自专栏java一日一条

java学习路线图(2018年最新版)

最近有些网友问我如何自学 Java 后端,还有些是想从别的方向想转过来,但都不太了解 Java 后端究竟需要学什么,究竟要从哪里学起,哪些是主流的 Java 后...

26710
来自专栏Debian社区

21款必不可少的Ubuntu桌面应用程序

无论你是刚接触Ubuntu,还是最近从微软Windows改用Ubuntu,都会在下文中找到适合你的一款软件。并非所有的应用程序对每个人都有用,欢迎分享你认为最出...

1.5K30
来自专栏圆方圆学院精选

【戴嘉乐】IPFS伴侣浏览器插件V2.2.0版本升级的重大意义

IPFS 伴侣(IPFS Companion)是一款是由IPFS官方应用社区(IPFS-Shipyard)孵化出来的应用项目。 Ta 是一个浏览器插件,可以帮助...

13910
来自专栏Java面试通关手册

近几个月Github上最热门的Java项目一览

今天逛了逛Github,顺手精选出了一下近几个月以来Github上最热门的12个Java项目。如果遇到自己感兴趣的开源项目,不妨去学习一下哦!

39130
来自专栏架构师小秘圈

有经验的程序员应该如何提升自己

工作1-5年,当我们向老板提出加薪的时候,或者跳槽去“捡”offer的时候,我们底气够吗? 敢不敢不给涨薪,就“挥一挥衣袖,不带走一个bug”?是不是提出要求后...

37350
来自专栏Java架构师进阶

成为一名Java高级架构师到底需要学习哪些技术?

工作1-5年,当我们向老板提出加薪的时候,或者跳槽去“捡”offer的时候,我们底气够吗?

8820

扫码关注云+社区

领取腾讯云代金券