具体描述
《SOA与Java:用Java技术实现面向服务》几位作者均是业界专家和领袖,首席作者ThomasErl更是SOA领域的领军人物,撰写过多本关于SOA的图书,广受欢迎。本书介绍了使用Java技术实现SOA的方法,对于想要学习SOA的Java程序员,以及想要使用Java实现设计的SOA从业者,均能提供帮助。首先,本书对全书内容进行概览,并为全书使用的案例提供背景信息。然后,使用四部分讲解内容。第一部分介绍了基础知识,有助于理解后续的内容。第二部分介绍了面向服务原则,以及如何使用Java技术实现这些原则。第三部分讨论了如何设计和实现完整的基于Java的SOA解决方案。第四部分是附录,对背景案例进行了总结,并列举了一些对SOA从业人员很有帮助的信息。
如今,基于SOAP的Web服务仍然是最主要的SOA实现方法之一。WS-*标准是使用最广泛的与SOA相关的跨供应商标准,不管是在云内还是云外,都得到了企业的广泛采用。本书的几位作者均是业界专家和领袖,首席作者Thomas Erl更是SOA领域的领军人物,撰写过多本关于SOA的图书,广受欢迎。
作为Java新手,如何把SOA实践运用到实际开发中?作为架构师或开发人员,如何构建单独的服务?随着程序的增长,如何构建复合服务,同时不破坏面向服务原则?作者通过大量的实用案例和代码,对此进行了详尽的讲解。
本书以一种一致的方式将经常引起混淆的标准和实现放到一起,让读者轻松掌握这个关键领域。关于Java与基于Web的服务如何接口,作者介绍了JAX-WS和JAX-RS等标准及对应的Spring标准,并且使用大量代码来说明要点,例如,如何让应用程序获得最大吞吐量或安全性。此外,本书还详细介绍如何使用Java构建特定类型的服务,让这些服务在遵守面向服务原则的同时以良好性能运行,并介绍了WSDL、与REST进行数据映射以及如何实现松散耦合等细节内容。
作者简介
Thomas Erl,是一位IT 畅销书作者,Arcitura Education 的创始人,《Service Technology Magazine 》的编辑,以及《Prentice Hall Service Technology Series from Thomas Erl》的系列编辑。他的著作在全世界畅销超过175 000本,并得到了主要IT组织(如IBM、Microsoft、Oracle、Intel、Accenture、IEEE、HL7、MITRE、SAP、CISCO、HP等)的高级人员的认可。作为Arcitura Education的CEO,以及作为与CloudSchool.com和SOASchool.com 的合作者,Thomas 主持开办了国际上认可的云认证专家(CCP )和SOA认证专家(SOACP) 认证项目的课程,这些项目已经建立了一系列正式的、供应商中立的行业认证,全世界已经有数千名IT从业人员获得了这些认证。Thomas在20多个国家做过演讲和授课,并且经常参加国际性会议,包括Service Technology Symposium 和Gartner 会议。Thomas 在众多刊物上发表过100多篇文章,包括《The Wall Street Journal 》和《CIO Magazine》。
Andre Tost,是IBM Software Group的高级技术人员和软件架构师。目前,他正在帮助开发和设计新的PureApplication System 云平台。此前,Andre 在IBM 做过10 年的SOA顾问,主持与世界范围的客户进行的大型SOA转换项目。他主要关注使用企业服务总线技术进行SOA管理和中间件集成。Andre与他人合著过几本技术图书,并且发表了许多关于SOA和相关主题的文章。他经常在会议上发表演讲。Andre来自德国,但是现在工作和生活在明尼苏达州罗切斯特市。虽然工作繁忙,但是一旦有时间他喜欢观看、指导和踢足球。Andre从德国Berufsakademie Stuttgart获得了电子工程学位。
Satadru Roy,是一位架构顾问,在过去20 年中使用基于Java 的技术设计和构建大型分布式系统。在这期间,他作为产品工程师和服务顾问,在Java 基础设施软件供应商(如BEA Systems 、Sun Microsystems 和Oracle )工作过。目前,他帮助客户构建移动的、基于云的应用程序,有时候是架构师,有时候是开发经理。他的主要关注领域是使用敏捷开发方法进行API设计和轻量级集成。Satadru正在把自己投入逐渐成长的Scala平台生态系统中,并相信它们将在未来的云和大数据应用程序中扮演着越来越重要的角色。他从Indian Institute ofScience获得了工程学硕士学位。
Philip Thomas,是IBM Software Group的IT架构师。当他还从事技术工作的时候,他在不同行业、不同地域的多个组织中工作过,担任过技术策略顾问,以及多种类型的解决方案的架构、设计和实现的顾问。他具备多个领域的专业技能,包括Java/JEE、SOA、事务处理系统、消息/集成中间件、业务流程管理、信息管理系统和业务分析。他目前专注于大数据和分析,在英国以外工作。在2000年加入IBM以前,他学习的是物理学,从University of Birmingham获得了实验性高温超导电性的Ph.D.。
贡献者简介Raj Balasubramanian Raj Balasubramanian是IBM SWG的Mobile First组织的Senior Technical Staff Member 和云服务产品的产品经理。在这个职位上,Raj 管理和主持在IBM云中交付移动服务。此前,他是IBM Software Group的Business Process Optimization(BPO)团队的高级技术人员,关注于跨行业交付SOA 、BPM 和云解决方案。Raj承担企业架构师、系统架构师和解决方案架构师的职责,以满足客户的各种需求。他在IBM DeveloperWorks 上发表过大量文章,并在行业会议上就多种主题发表过演讲。他的兴趣包括分布式系统、在解决方案设计中应用Web 结构,以及使用正式模型来思考大型系统。
在IT 职业生涯的早期,他最早构建企业系统,使用不同的技术来解决业务问题,包括Web 技术、SOA、BPM 和各种机器学习技术。他目前在University of Texas at Austin 学习计算机科学的Ph.D. 学位。他的个人信息网站为http://raj.balasubramanians.com,在这里可以了解他的方方面面。
目录信息
作者及贡献者简介
第1章 概述 .1
1.1 关于本书 .1
1.1.1 本书目标 1
1.1.2 本书面向的读者 .1
1.1.3 本书特征 2
1.2 必要阅读 .2
1.3 本书结构 .2
1.4 本书使用原则和模式的方式 4
1.5 符号和图形 .4
第2章 案例分析示例 5
2.1 案例分析示例的使用 5
2.1.1 风格特点 .5
2.1.2 案例与抽象内容的关系 .5
2.1.3 代码示例 5
2.2 案例分析背景:NovoBank 6
2.2.1 技术基础设施 .6
2.2.2 自动化解决方案 6
2.2.3 业务阻碍和目标 7
2.2.4 未来IT路线图 7
2.3 案例分析背景:SmartCredit公司 .8
2.3.1 技术基础设施 .8
2.3.2 自动化解决方案 .8
2.3.3 业务目标 9
2.3.4 未来的IT路线图 .9
第一部分 基 础
第3章 SOA基本概念 .13
3.1 基本术语和概念 .13
3.1.1 面向服务计算 .13
3.1.2 面向服务 15
3.1.3 面向服务架构 .15
3.1.4 SOA宣言 17
3.1.5 服务 .18
3.1.6 云计算 18
3.1.7 IT资源 19
3.1.8 服务模型 19
3.1.9 服务库存 20
3.1.10 服务组合 20
3.1.11 服务候选.21
3.1.12 服务契约 21
3.1.13 服务相关的粒度 .21
3.1.14 服务概要 22
3.1.15 SOA设计模式 22
3.2 延伸阅读 .24
第4章 基本的Java分布式技术 .26
4.1 Java分布式计算的基础知识 .26
4.1.1 Java SE的架构 .27
4.1.2 Java EE的架构 .27
4.1.3 应用程序的打包和部署 .28
4.1.4 Java EE架构的各层 .29
4.2 Java分布式技术和API 30
4.2.1 Java SE API .30
4.2.2 Java EE API 32
4.3 XML标准和Java API 38
4.3.1 XML .39
4.3.2 XML模式定义 .40
4.3.3 XSLT 41
4.3.4 JAXP 41
4.3.5 JAXB 42
4.4 使用Java组件构建服务 42
4.4.1 组件作为服务 42
4.4.2 应用程序协议 42
4.4.3 服务契约 44
4.4.4 组件作为服务和面向服务 .46
4.5 Java供应商平台 47
4.5.1 GlassFish企业服务器 47
4.5.2 IBM WebSphere Application Server 48
4.5.3 IBM WebSphere Application Server Community Edition 50
4.5.4 Oracle WebLogic Server .50
第5章 基于Web的服务技术 52
5.1 基于SOAP的Web服务 .52
5.1.1 Web服务标准的扩展(WS-*) .56
5.1.2 常用Web服务中间件 .61
5.2 REST服务 .64
5.2.1 HTTP响应代码 65
5.2.2 资源和地址 .66
5.2.3 HTTP方法 68
5.2.4 资源表示 69
5.2.5 accept头部 70
第6章 使用Java构建基于Web的服务 .71
6.1 JAX-WS 71
6.1.1 SAAJ 73
6.1.2 处理程序 76
6.1.3 Web服务引擎和工具包 .76
6.1.4 JAXR 77
6.2 WS-*标准的Java实现 78
6.2.1 高级Web服务标准和框架 78
6.2.2 服务组件架构 79
6.2.3 Spring-WS 79
6.3 JAX-RS .80
6.3.1 实现JAX-RS .80
6.3.2 实现REST服务 83
6.3.3 可扩展性 84
6.3.4 安全性 86
6.3.5 REST服务支持 87
第二部分 服 务
第7章 Java基于Web服务中的面向服务原则 91
7.1 服务可重用性 .91
7.1.1 无关功能性上下文 91
7.1.2 高度泛型的服务逻辑 92
7.1.3 泛型可扩展服务契约 94
7.1.4 并发访问服务逻辑 .95
7.2 标准服务契约 .99
7.2.1 自顶向下和自底向上 99
7.2.2 在Java和WSDL之间映射 .100
7.2.3 包装文档/字面值契约 100
7.2.4 隐式和显式头部 .101
7.2.5 REST中的数据映射 .105
7.2.6 使用行业标准 .117
7.3 服务松散耦合 .118
7.3.1 分离契约和实现 .118
7.3.2 独立功能性上下文 .119
7.3.3 服务消费者耦合 .120
7.4 服务抽象 .123
7.4.1 抽象技术细节 .123
7.4.2 隐藏服务细节 .123
7.4.3 文档约束 .126
7.5 服务可组合性 .126
7.5.1 运行时环境的效率 .127
7.5.2 服务契约的灵活性 .128
7.5.3 基于标准的运行时 .128
7.6 服务自治 .129
7.6.1 定义明确的功能边界 .129
7.6.2 控制运行时环境 .129
7.6.3 高并发性 .130
7.7 服务无状态性 .131
7.7.1 编制基础设施 131
7.7.2 会话状态 .132
7.7.3 存储状态 .132
7.8 服务可发现性 .136
7.8.1 设计时的可发现性 .136
7.8.2 运行时的可发现性 .137
7.8.3 服务注册中心 .138
第8章 使用Java构建实用服务 .140
8.1 Java实用服务的原理 140
8.1.1 架构考虑 .140
8.1.2 实用服务分类 .145
8.2 实用服务的设计和实现 146
8.2.1 实用服务的设计 .146
8.2.2 实用服务和Java版本 149
8.2.3 实用服务和开源框架 .150
8.2.4 将实用服务作为基于Web的服务 152
8.2.5 测试考虑 157
8.2.6 打包考虑 157
8.3 实用服务的类型 158
8.3.1 公共实用服务 .158
8.3.2 资源实体服务 .163
8.3.3 微实用服务 .167
8.3.4 包装器实用服务 .169
第9章 使用Java构建实体服务 .173
9.1 Java实体服务的内部原理 .174
9.1.1 架构考虑 .174
9.1.2 域实体与消息实体 .175
9.1.3 数据聚合 .176
9.1.4 数据访问模式 .177
9.1.5 修改通知 .178
9.2 Java实体服务的设计和实现 .179
9.2.1 实体服务设计 .179
9.2.2 实体服务实现 .184
9.2.3 将实体服务作为基于Web的服务 187
9.2.4 使用SOAP的实体Web服务 .187
9.2.5 REST实体服务 .193
9.2.6 测试考虑 201
9.2.7 Java打包考虑 201
第三部分 服务组合与基础设施
第10章 使用Java构建任务服务 .205
10.1 任务服务的内部原理 205
10.2 构建任务服务 .211
10.2.1 实现考虑 .212
10.2.2 基于Web的任务服务 213
10.2.3 测试考虑 .223
10.2.4 打包考虑 .224
第11章 使用Java进行服务组合 .225
11.1 服务组合的内部原理 225
11.1.1 服务组合角色 .225
11.1.2 组合与MEP .226
11.1.3 同步和异步调用 .226
11.1.4 服务水平协议 .227
11.2 Java服务组合的设计和实现 .228
11.2.1 组合逻辑:编码和编制 228
11.2.2 REST服务组合考虑229
11.2.3 组合成员端点 .230
11.2.4 错误处理.231
11.2.5 模式类型重用 .238
11.2.6 基于Web的服务与Java组件 242
11.2.7 打包、测试和部署被组合服务 .244
11.3 服务和服务组合性能指导原则 .248
11.3.1 测量性能.248
11.3.2 测试性能.249
11.3.3 缓存 .249
11.3.4 使用状态扩展服务 .252
11.3.5 处理失败.252
11.3.6 解析和编组 .253
第12章 使用ESB作为SOA基础设施 255
12.1 基本的传统消息框架 .255
12.2 基本的服务消息框架 .261
12.2.1 不使用ESB时的基本服务消息处理 .261
12.2.2 使用ESB时的基本服务消息处理 263
12.3 与SOA相关的常用ESB特性 .267
12.3.1 服务查找和调用 .267
12.3.2 服务处理 .269
12.3.3 服务组合支持 .270
12.3.4 REST API管理支持 270
第四部分 附 录
附录A 案例分析结论 273
附录B 面向服务原则参考 275
附录C SOA设计模式参考 280
附录D 带注释的SOA宣言 312
· · · · · · (收起)
读后感
用户评价
我是一位对微服务架构情有独钟的开发者,在日常工作中,我经常思考如何通过Java语言将SOA的精髓融入微服务的设计中。《SOA与Java:用Java技术实现面向服务》这本书,在这一点上给了我不少启发。我特别喜欢书中关于“服务分解”和“服务组合”的章节,它们详细阐述了如何将一个大型单体应用逐步拆分成独立可控的服务单元,以及如何利用Java的API网关模式来统一管理和协调这些微服务。书中还探讨了消息队列在异步通信中的作用,以及如何利用Java的JMS或Kafka等技术来实现可靠的消息传递,这对于构建松耦合的分布式系统至关重要。虽然书中没有直接冠以“微服务”的名称,但其核心思想和实践建议,与微服务架构有着高度的契合度,为我实现更灵活、更具弹性的系统架构提供了坚实的技术基础。
在阅读《SOA与Java:用Java技术实现面向服务》这本书的过程中,我对其在“服务重用”和“服务演进”方面的论述印象深刻。书中强调了SOA的核心目标之一就是通过构建可被不同应用复用的服务来提高开发效率和降低成本。我个人认为,这正是SOA的魅力所在。书中列举了一些Java框架和模式,可以帮助开发者设计出具备高内聚、低耦合特性的服务,从而使其更易于被其他系统调用。此外,书中也关注了服务的生命周期管理,以及如何在不中断现有服务的情况下,对服务进行升级和迭代。这对于在复杂企业环境中维护和发展SOA系统至关重要。尽管具体的代码实现细节还需要我进一步探索,但书中提供的理论框架和设计思路,已经为我指明了方向,让我对如何在Java项目中有效落地SOA有了更清晰的认识。
我一直对SOA(面向服务架构)的概念很感兴趣,因为它 promises 能够提高系统的灵活性和可维护性。在工作中,我也接触过一些使用Java进行开发的系统,所以当看到《SOA与Java:用Java技术实现面向服务》这本书时,我感到非常兴奋,认为它能为我提供一个将这两种技术融合的实践指南。然而,在我翻阅这本书的过程中,我发现它在理论阐述上虽然完整,但在实际操作的深度上稍显不足。书中有不少关于SOA原则和Java EE特性的介绍,比如服务契约、服务注册、服务发现等,这些内容都非常重要。同时,书中也提及了如何利用Java中的一些框架来实现这些原则,例如使用JAX-WS或Spring Boot构建服务。但令我略感遗憾的是,这些技术细节的演示似乎停留在概念层面,对于初学者来说,可能需要花费额外的时间去查阅更具体的代码示例和实现细节。尽管如此,书中对SOA的宏观理解和Java在其中的角色扮演的描绘,依然为我构建了一个清晰的框架。
这本书为我提供了一个理解SOA与Java协同工作的宏观视角。尤其让我感到受益匪浅的是,书中对于“服务契约”这一概念的深入剖析。它详细讲解了如何通过清晰、标准化的接口定义来确保服务之间的互操作性,这对于避免“集成地狱”至关重要。书中还介绍了在Java中如何利用WSDL或OpenAPI等规范来定义和管理服务契约,并给出了相应的实现思路。此外,书中也探讨了服务安全的相关主题,包括认证、授权以及数据加密等,并提及了Java中可以用于实现这些安全机制的技术。虽然书中没有提供过于深入的安全实现细节,但它成功地将安全意识贯穿于SOA服务的整个生命周期。总而言之,这本书为我构建了一个扎实的SOA理论基础,并让我看到了Java在其中扮演的关键角色,为我今后的项目开发打下了良好的基础。
这本书给我带来的惊喜,在于它如何巧妙地将SOA的理念与Java开发的强大生态系统相结合。我尤其欣赏书中对“服务治理”这一关键环节的探讨,它深入分析了服务版本管理、服务监控以及服务安全的重要性。在现代分布式系统中,服务间的依赖错综复杂,有效的治理机制是保证系统稳定运行的基石。书中关于如何利用Java工具链来构建健壮的服务治理体系,虽然没有提供“一键式”的解决方案,但提供了一些非常实用的思路和框架选型建议。例如,对于服务注册与发现,它推荐了Consul和Eureka等流行方案,并简要说明了它们的工作原理。此外,在处理服务间的通信时,书中也提及了RESTful API和gRPC等不同协议的优缺点,以及如何在Java中高效地实现它们。这些内容对于那些希望构建可扩展、高可用的SOA应用的开发者来说,无疑具有很高的参考价值。