持续轻量级Java EE开发:编写可测试的代码
  • 推荐0
  • 收藏8
  • 浏览811

持续轻量级Java EE开发:编写可测试的代码

Andrew Lee Rubinger,Aslak Knutsen (作者)  崔婧雯 (译者) 刘芸 (责任编辑)

  • 书  号:978-7-121-30648-8
  • 出版日期:2017-03-14
  • 页  数:264
  • 开  本:16(178*233)
  • 出版状态:上市销售
  • 原书名: Continuous Enterprise Development in Java
  • 原书号:9781449328290
  • 维护人:张春雨
如今,测试已不再是企业发展中的"可选”部分,其必将成为企业发展壮大的核心武器。本书旨在指导读者使用测试平台进行持续开发。本书首先阐述了测试在企业发展中的重要性,然后大篇幅地分析了一些用户在发展中会遇到的共性问题(例如,如何引导新项目及验证用户界面)的解决方案,最后,指导用户了解如何构建一个终端到终端的测试方式。
使用测试平台进行Java EE持续开发。
讲述从零开始将一个空白存储库建设成完整部署在公有云之上的公开应用程序。
用具体的代码深入地阐述了项目和归档创建的自动化、Maven build 在流程里的编程式集成,以及所有级别的测试。
介绍了不少有用实践,展示如何测试难以测试的场景,包括SMTP 服务器和消息驱动Bean 的样例。


即使是古老的J2EE 也绝不仅仅是关于开发的。
从企业Java 的出现开始,就有了严格定义的整体角色概念。组件提供者、组装者、系统
管理员和服务器提供者,都有清晰且独特的职责,但是这些角色在真实世界里很少有
真正的支撑。因为政策和组织结构的原因,开发人员通常需要承担所有这些角色的职
责,可能的例外也只是系统管理和运维。开发人员的首要目标是开发,因此上述意图良
好的角色划分很快就没有意义了。
在“真实世界”里,特定的运维部门负责维护开发周期的成果,尝试安装、运行、保持
应用在线。因此这里真正起作用的是人为划分的模型,但是它和最佳方式相去甚远。有
时情况会尤其糟糕,签署文档甚至会比产品质量更加重要。
如果你只对快速hack 感兴趣,那么肯定会厌恶Java EE 和应用服务器,也很可能会因此
讨厌这本书。如果你只关注于开发,那么打包、部署、监控和管理听上去就是多此一举。
但是,“DevOps”将运维和开发看作一个单独单元。谁会需要漂亮,却无法在预定义环
境里正常部署的代码呢?DevOps 并不是什么开创性的事物,相反,它是“回到初心”的
倡导。
本书不仅契合DevOps 的理念,还编程式地展现了如何从零开始构建一个Java EE 应用
程序,并且填补了Java EE 规范的空白之处。本书还用具体的代码深入地阐述了项目和
归档创建的自动化、Maven build 在流程里的编程式集成,以及所有级别的测试。本书
不仅关注最佳实践,而且向读者展示了如何测试难以测试的场景,包括SMTP 服务器
和消息驱动Bean 的样例。
虽然本书介绍的工具、库函数和框架都是由Red Hat 公司的员工发起的,但是即使你
完全没有用过JBoss 或者WildFly,这本书也会很有价值。实际上,我同时在GlassFish
和TomEE 上使用Arquillian、ShrinkWrap 和Forge 来测试应用程序,并且,我在研讨会(http://airhacks.com)里使用了Arquillian 测试插件、扩展和复杂的依赖注入,而无须将
mock 部署到生产归档里。
在飞往旧金山的JavaOne 2013 大会的途中,我阅读了这本书,它非常有意思,让我学到
了很多。希望所有人都能从这本书中有所收获——享受轻量级Java EE 开发的生命周期!
——Adam Bien
http://adam-bien.com




前言
简约是复杂的最终形式。
——Leonardo DaVinci
现代Web 软件开发的发展日新月异。近些年,大家看到了客户端状态向服务器端移动
的趋势,现在又在往回自我纠正。虽然JavaScript 的作用明显,但是关于其价值,两个工
程师可能会给出三个意见。HTML5 开创了在浏览器里支持富媒体和并发的新时代。在
颇具实力的NoSQL 系统的挑战下,统治业界40 年之久的关系数据模型开始有些过时,
同时版本控制存储也经历了实现和范式的改革。
可用的工具正在不断变化,要从中做出选择难免会眼花缭乱。
同时,工程师们也面临着构建多用户程序所带来的巨大挑战。大家都喜欢简洁、易于维
护的代码,需要代码能够高效并且安全地运行,工程师们必须保证代码的正确性。
在Java 的世界里,很多答案来自于伴随Java 企业版(Java Enterprise Edition)发布的一
系列规范。这项努力的首要目标仍然是:隐藏软件开发固有的复杂语法,并且尝试根据
需求提供清晰的标准模型。换句话说,Java EE 平台包括很多不断演变的工具包,而其
中一个可能不太可靠。
因此几年后,大家开始填补那些Java EE 没有规范的漏洞,最终掌握了一个可以激发想
象力,并且经证明比最初设想更为灵活的测试框架。很明显,为了充实想法以便更好地
分享所收获的经验教训,并不需要罗列任何特别的技术。开发人员一直想拥有一张详
尽的地图,能够帮助理解Java EE,及其附属框架和服务。
本书不会详细介绍某个规范,这些资料可以在别处找到,因为本书认为通过解决方案
(Solution)来开始学习并没有太大意义。
相反,本书从问题(Problem)开始。我们为企业级Java 的可测试开发选择了以用例为
中心的方案,并且在一些理论探索和必要的背景介绍之后,每章都会解决一个高层次的问题。本书提出的解决方案涵盖范围从用户界面到持久化存储,并且会涉及许多标
准和第三方项目。所有的示例都是可执行的,还可以在相关网站的生产环境上运行,从
而加以验证。
新手能够借助本书达到企业级Java 开发人员的水平,能够从零开始将一个空白存储库
建设成完整部署在公有云之上的公开应用程序。所有的程序员都能够从本书中找到极
具吸引力的方法,用来测试种子数据,向客户端推送事件,与分布式数据网格交互,验
证用户界面,等等。
很简单,本书的目标是将复杂的事情变得简单些。幸运的是,这会带来更高的工作效率
和更多的乐趣。
至少,这是我们采用本书中提到的技术时得到的经验。
本书使用的排版约定
如下是本书中使用的排版规范:
斜体(Italic)
表示新名词、URL、电子邮件地址、文件名、文件扩展名。
等宽体(Constant width)
用于程序列表,以及在段落中引用的程序元素,比如变量、函数名称、数据库、数
据类型、环境变量、语句和关键字。
等宽粗体(Constant width bold)
显示命令或其他应该由用户键入的文本。
等宽斜体(Constant width italic)
显示应该由用户提供的值或上下文确定的值所替换的文本。
使用代码示例
从http://continuousdev.org可以下载辅助资料(代码示例、练习等)。第4章里有详细介绍。
本书帮助读者完成自己的工作,所有的内容使用Creative Commons Attribution-ShareAlike
2.0 Generic(http://creativecommons.org/licenses/by-sa/2.0/)许可证,本书邀请社区贡献了
很多工作,包括特性请求、印刷错误勘正,并且通过GitHub Issue Tracker(http://bit.ly
/1e7kQRD)改进加强。读者可以在遵守许可证的前提下重用所有文本或者示例,但需
要注明出处。更多细节请查看许可证。
出处通常包括标题、作者、出版社和ISBN。例如:“Andrew Lee Rubinger 和Aslak Knutsen
撰写的Continuous Enterprise Development in Java(O’Reilly)。Copyright 2014 Andrew Lee
Rubinger and Aslak Knutsen, 978-1-449-32829-0.”
Safari? Books Online
Safari Books Online(http://my.safaribooksonline.com/?portal=oreilly)
是按需的数字图书馆,以书籍和视频的形式,提供来自技术和商
业领域的世界顶级作家的专业内容。
技术专家、软件开发人员、Web 设计师,以及业务和创新专家将Safari Books Online 作
为其主要资源,用来研究、解决问题,学习以及认证培训。
Safari Books Online 为企业、政府机构和个人提供一系列产品组合和付费项目。订阅者
能够访问完整可搜索数据库里的数千本书、培训视频和正式出版前的手稿,涵盖的出版
社包括O’Reilly Media、Prentice Hall Professional、Addison-Wesley Professional、Microso
Press、Sams、Que、Peachpit Press、Focal Press、Cisco Press、John Wiley & Sons、Syngress、
Morgan Kaufmann、IBM Redbooks、Packt、Adobe Press、FT Press、Apress、Manning、New
Riders、McGraw-Hill、Jones & Bartlett、Course Technology,等等。在线可获得更多有关
Safari Books Online 的信息。
如何联系我们
请将对本书的评价和存在的问题通过如下地址告知出版者。
美国:
O’Reilly Media, Inc.
1005 Gravenstein Highway North
Sebastopol, CA 95472
中国:
北京市西城区西直门南大街2 号成铭大厦C 座807 室(100035)
奥莱利技术咨询(北京)有限公司
本书有自己的网页,里面列出了勘误表、示例和所有额外信息。从http://oreil.ly/continu
ous-enterprise访问该网页。
关于本书的评论或者技术问题,请发送邮件到bookquestions@oreilly.com。
要获取更多关于我们的书籍、课程、会议和新闻,请访问网站http://www.oreilly.com。
Facebook 主页:http://facebook.com/oreilly
在Twitter 上关注我们:http://twitter.com/oreillymedia
YouTube 上的视频:http://www.youtube.com/oreillymedia
鸣谢
首先,我要由衷感谢Arquillian 社区:来自世界各地的天才们贡献时间和知识,帮助改
进项目,从代码到写作,再到演讲和在Internet 上的呼喊(是的,我们注意到你了)。
特别感谢所有Arquillian 的模块领袖:Karel Piwko、Bartosz Majsak、Luká? Fry?、Dan Allen、
Stefan Miklosovic、Jakub Narloch、Gerhard Poul、John Ament、Jan Papousek、Bernard Labno、
St?le Pedersen、Ken Finnigan、Tolis Emmanouilidis、Ales Justin、Martin Gencur、Vineet
Reynolds、Davide D’Alto、Jean Deruelle、David Blevins、Mark Struberg、omas Diesler、
Romain Manni-Bucau、Logan McGrath 和Alexis Hassler。
特别感谢Sarah White 和Cheyenne Weaver 给出了视觉识别和书目大纲,是你们让这本
书看上去这么好!
还要感谢完成本书过程中帮助改正内容和给予评论的所有人。
谢谢Meghan Blanchette 坚持推进我们的工作。如果没有你的帮助,很可能(也许是肯
定)就不会有这本书的出版。
放在最后但同样重要的是,由衷感谢我的朋友Adam Bien 为本书作序。
本书献给我们的工作诞生于此,兴起于此,并且仍在持续演进于此的社区。

目录

序. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . v
前言. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xix

第1 章持续性. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
预防的真理1
被动的错误处理1
主动的质量策略2
软件开发流程3
串行模型3
迭代模型3
测试即开发5
测试的分级5
单元测试6
集成测试7
基础测试框架8
JUnit 9
TestNG 12
持续开发13
第2 章启动技术. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
Bootstrapping 15
Apache Maven 16
JBoss Forge 17
版本控制18
Git 19
Java EE 的测试平台20
Arquillian 21
ShrinkWrap 22
ShrinkWrap Resolvers 27
实验性功能35
运行时36
WildFly 36
OpenShi 37
进入编程38
第3 章从零到生产. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
开发环境39
一个新项目40
用Arquillian 编写第一个集成测试48
在本地运行应用程序52
运行Arquillian 集成测试54
通过JBoss Developer Studio 部署到OpenShi 上55
第4 章需求和示例应用程序. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
GeekSeek 介绍64
功能集64
概念数据模型65
逻辑数据模型66
获得,构建,测试和运行GeekSeek 68
用例和章节指南73
第5 章Java 持久化和关系型数据73
第6 章NoSQL:数据网格和图数据库74
第7 章业务逻辑和服务层74
第8 章REST 和可寻址服务74
第9 章安全性74
第10 章UI 75
第11 章组装及部署75
第5 章Java 持久化和关系型数据. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
关系型数据模型79
Java 持久化API 81
POJO 实体82
用例和需求83
用户角度83
技术考虑84
实现85
实体对象86
存储库EJB 91
需求测试场景93
测试搭建94
CRUD 测试95
第6 章NoSQL:数据网格和图数据库. . . . . . . . . . . . . . . . . . . . . . . . . . . 101
RDBMS:不擅长处理二进制数据102
数据网格103
RDBMS:不善长处理关系104
图论105
用例和需求106
实现107
Attachment 107
Relation 111
需求测试场景120
Attachment CRUD 测试120
Attachment 持久化的事务完整性124
验证关系128
第7 章业务逻辑和服务层. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131
用例和需求132
新用户注册时发送邮件133
实现133
需求测试场景139
仅供测试所用的SMTP 服务器139
测试142
第8 章REST 和可寻址服务. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149
企业Java 里的REST:JAX-RS 规范152
用例和需求155
实现158
存储库资源158
描述转换器162
@ResourceModel 164
LinkableRepresentation 166
ResourceLink 169
需求测试场景170
黑盒测试170
验证支持Warp 的HTTP 协定173
Arquillian Warp 173
测试装置搭建175
HTTP 协定测试176
第9 章安全性. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179
用例和需求180
实现180
支撑软件180
需求测试场景189
综述189
搭建189
安全测试190
第10 章用户界面. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199
用例和需求199
实现200
需求测试场景202
纯JavaScript 203
功能性行为205
第11 章组装及部署. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213
获得JBoss EAP 213
在JBoss EAP 上运行215
使用EAP 远程容器215
使用EAP 托管容器217
持续集成和授权Build 服务器220
在CloudBees 上配置GeekSeek Build 220
使用EAP 存储库布局CloudBees Jenkins 222
Git Push 事件的自动构建225
推送到过渡和生产环境226
搭建OpenShi 应用程序226
移除默认OpenShi 应用程序229
从CI Build 推送Job 到OpenShi 230
第12 章结语. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233

读者评论

电子书版本

  • Epub
  • Mobi

相关图书

Python一行流:像专家一样写代码

Christian Mayer (作者) 苏丹 (译者)

本书专注于从初学迈向进阶的Python编码技术:如何像专家一样写出优雅、准确、简洁高效的Python 单行代码;阅读任意一行Python 代码时,如何系统性地对...

¥89.00

剑指Offer(专项强化版):数据结构与算法名企面试题精讲

何海涛 (作者)

本书全面、系统地总结了在准备程序员面试过程中必备的数据结构与算法。本书首先详细讨论整数、数组、链表、字符串、哈希表、栈、队列、二叉树、堆和前缀树等常用的数据结构...

¥89.00

C++服务器开发精髓

张远龙 (作者)

本书从操作系统原理角度讲解进行C++服务器开发所需掌握的技术栈。全书总计9章,第1~2章讲解C++ 11/14/17新标准中的常用特性、新增类库,以及C++开发...

 

PHP编程(第4版)

Rasmus Lerdorf(拉斯马斯·勒多夫), Kevin Tatroe(凯文·塔特罗), Peter MacIntyre(彼得·麦金太尔) (作者) 卢涛 (译者)

PHP是一种被广泛使用的Web编程语言,它简单易用,而且与时俱进,不断进化,提升性能。本书基于PHP 7.4,深入介绍 PHP编程技术,涵盖了 PHP 所有基本...

¥109.00

深入理解Spring Cloud与实战

方剑 (作者)

本书共分10章,主要介绍Spring Cloud各个核心组件的设计原理,以及目前流行的Spring Cloud Alibaba和 Netflix组件,并且剖析S...

¥106.00

基于Kotlin的Spring Boot微服务实战

袁康 (作者)

本书介绍了Kotlin在Spring Boot微服务开发中的实践,并使用Kotlin作为开发语言,介绍了函数式编程思想、Kotlin的语法、Kotlin在常用中...

¥69.30