重磅推荐
【前言】

  即使是古老的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 部署到生产归档里。
  在飞往San Francisco 的JavaOne 2013 大会的途中我阅读了这本书,它非常有意思,让我学到了很多。希望所有人都能从这本书中有所收获——享受轻量级Java EE 开发的生命周期!
  -Adam Bien http://adam-bien.com(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 开发人员的水平, 能够从零开始将一个空白存储库建设成完整部署在公有云之上的公开应用程序。各种程序员都能够从本书中找到极具吸引力的方法,用来测试种子数据,向客户端推送事件,与分布式数据网格交互,验证用户界面,等等。
  很简单,本书的目标是将复杂的事情变得简单些。幸运的是,这会带来更高的工作效率和更多的乐趣。
  至少,这是我们采用本书中提到的技术时得到的经验。
  本书使用的排版约定
  如下是本书中使用的排版规范:
  斜体表示新名词、UR、电子邮件地址、文件名、文件扩展名。
  等宽体用于程序列表,以及在段落中引用的程序元素,比如变量、函数名称、数据库、数据类型、环境变量、语句和关键字。
  等宽粗体显示命令或其他应该由用户键入的文本。
  等宽斜体显示应该由用户提供的值或上下文确定的值所替换的文本。
  该图标表示小窍门或者建议。

  前言
  该图标表示一般注解。
  该图标表示警告或者注意事项。
  使用代码示例
  从http://continuousdev.org可以下载辅助资料(代码示例、练习等)。第第4 章章里有详细介绍。
  本书帮助读者完成自己的工作,所有内容使用Creative Commons Attribution-ShareAlike2.0 Generic(http://creativecommons.org/licenses/by-sa/2.0/)许可证,本书邀请社区贡献了很多工作,包括特性请求、印刷错误勘正,并且通过GitHub Issue Tracker(http://bit.ly/1e7kQRD)改进加强。读者可以在遵守许可证的前提下重用所有文本或者示例,但需要注明出处。更多细节请查看许可证。
  出处通常包括标题、作者、出版社和ISBN。例如:“Andrew Lee Rubinger 和AslakKnutsen 撰写的Continuous Enterprise Development in Java(O’Reilly)。Copyright 2014Andrew 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
  800-998-9938 (美国或加拿大可拨)
  707-829-0515 (国际或本地可拨)
  707-829-0104 (传真)
  本书有自己的网页,里面列出了勘误表、示例和所有额外信息。从http://oreil.ly/-continuous-enterprise(http://oreil.ly/continuous-enterprise)访问该网页。关于本书的评论或者技术问题,请发送邮件到bookquestions@oreilly.com(mailto:bookquestions@oreilly.com)。
  要获取更多关于我们的书籍、课程、会议和新闻,请访问网站http://www.oreilly.com。
  Facebook 主页:http://facebook.com/oreilly(http://facebook.com/oreilly)
  在Twitter 上关注我们:http://twitter.com/oreillymedia(http://twitter.com/oreillymedia)
  YouTube 上的视频:http://www.youtube.com/oreillymedia(http://www.youtube.co


【编辑推荐】
讲述从零开始将一个空白存储库建设成完整部署在公有云之上的公开应用程序。
用具体的代码深入地阐述了项目和归档创建的自动化、Maven build 在流程里的编程式集成,以及所有级别的测试。
介绍了不少有用实践,展示如何测试难以测试的场景,包括SMTP 服务器和消息驱动Bean 的样例。

【内容简介】
如今,测试已不再是企业发展中的"可选”部分,其必将成为企业发展壮大的核心武器。本书旨在指导读者使用测试平台进行持续开发。本书首先阐述了测试在企业发展中的重要性,然后大篇幅地分析了一些用户在发展中会遇到的共性问题(例如,如何引导新项目及验证用户界面)的解决方案,*后,指导用户了解如何构建一个终端到终端的测试方式。
【作者简介】
Andrew Lee Rubinger 是Red Hat 部门之一,JBoss 的资深软件工程师,主要负责公司的EJB 3.x 实现的开发工作。他是Java EE 技术的早期使用者,并且是技术论坛上的活跃贡献者。Aslak Knutsen,Arquillian 的项目领导,是RedHat、JBoss 的资深软件工程师。他曾经参与Arquillian、ShrinkWrap、Weld 和Seam 3 等项目,是JBoss Testing 项目的创始人,也是很多重要的业界大会,包括Devoxx、JavaOne、Jazoon、JFokus 和Geecon 的演讲者。 Andrew Lee Rubinger 是Red Hat 部门之一,JBoss 的资深软件工程师,主要负责公司的EJB 3.x 实现的开发工作。他是Java EE 技术的早期使用者,并且是技术论坛上的活跃贡献者。
Aslak Knutsen,Arquillian 的项目领导,是RedHat、JBoss 的资深软件工程师。他曾经参与Arquillian、ShrinkWrap、Weld 和Seam 3 等项目,是JBoss Testing 项目的创始人,也是很多重要的业界大会,包括Devoxx、JavaOne、Jazoon、JFokus 和Geecon 的演讲者。
【目录】
序. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 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
【深度学习】

返回顶部