JBoss服务器是一种优秀的J2EE服务器,和BEA的Weblogic,IBM的Websphere属于同类产品, JBoss的优势在于具有良好的性价比。JBoss为完全开放源码的免费软件,而且具有良好的运行效率和可靠性,因此已经得到越来越多的J2EE应用开发者的青睐。
本书详细介绍了最新版本JBoss3.2.x服务器的软件架构,深入讨论了JBoss服务器对J2EE规范的实现机制。在使读者对JBoss服务器的组成有深入理解的基础上,详细介绍了配置JBoss服务器的步骤,以及在JBoss平台上开发J2EE应用的方法。
本书适用于J2EE应用服务器的系统管理人员,J2EE应用的开发人员,J2EE应用服务器的开发人员。光盘内容为书中实例源代码。
第1章 安装和构建JBoss服务器 1
1.1 获得二进制文件 1
1.1.1 预备条件 1
1.1.2 安装二进制存档 2
1.1.3 default服务器配置文件集合 3
1.2 基本安装测试 8
1.3 从网络服务器启动 10
1.4 基于源代码构建服务器 14
第2章 JBoss JMX微内核(Microkernel) 21
2.1 JMX介绍 21
2.1.1 装配层 22
2.1.2 代理层 23
2.1.3 分布式服务层 23
2.1.4 JMX组件介绍 23
2.2 JBoss JMX实现架构 26
2.2.1 JBoss类装载器架构 26
2.2.2 类装载和Java中的类型 26
2.2.3 JBoss XMBean 47
2.3 连接到JMX服务器 53
2.3.1 浏览服务器——JMX控制台Web应用 53
2.3.2 使用RMI连接到JMX 56
2.3.3 命令行方式访问JMX 66
2.3.4 使用任何协议连接到JMX 71
2.4 将JMX作为微内核 71
2.4.1 启动过程 71
2.4.2 JBoss MBean服务 72
2.4.3 开发JBoss MBean服务 81
2.4.4 部署排序和依赖性 110
2.5 JBoss部署器架构 127
2.6 借助于SNMP展示MBean事件 131
2.6.1 SNMP适配器服务 131
2.6.2 陷阱服务事件 132
2.7 远程访问服务——分离式Invoker 132
2.7.1 分离式Invoker实例:MBeanServer Invoker适配器服务 137
2.7.2 分离式Invoker参考 143
第3章 JBoss之命名——JNDI 命名服务 149
3.1 JNDI概述 149
3.1.1 JNDI应用编程接口 149
3.1.2 J2EE和JNDI——应用组件环境 151
3.2 JBossNS架构 164
3.2.1 命名InitialContext工厂 166
3.2.2 基于HTTP访问JNDI 170
3.2.3 保护基于HTTP访问JNDI 176
3.2.4 保护只读、未保护上下文JNDI的访问 178
3.2.5 其他命名MBean 179
第4章 JBoss之事务——JTA事务服务 185
4.1 事务/JTA概述 185
4.1.1 悲观锁/乐观锁 186
4.1.2 分布式事务的组件 186
4.1.3 两阶段XA协议 187
4.1.4 启发式异常 187
4.1.5 事务ID和分支 187
4.2 JBoss事务内核 188
4.2.1 为JBoss适配事务管理器 188
4.2.2 默认事务管理器 189
4.2.3 UserTransaction支持 189
第5章 JBoss之EJB——EJB容器配置和架构 191
5.1 EJB客户端视图 191
5.2 EJB服务器端视图 198
5.3 EJB容器 204
5.3.1 EJBDeployer MBean 204
5.3.2 容器插件式框架 215
5.4 实体Bean锁和死锁检测 227
5.4.1 JBoss为什么需要锁 227
5.4.2 实体Bean的生命周期 228
5.4.3 默认锁行为 228
5.4.4 插入式拦截器和锁策略 229
5.4.5 死锁 230
5.4.6 高级配置和调优 232
5.4.7 在群集中运行 236
5.4.8 修理故障 236
第6章 JBoss之消息——JMS 配置和架构 239
6.1 JMS实例 239
6.1.1 点对点实例 240
6.1.2 发布/订阅实例 242
6.1.3 使用持久topic的发布/订阅实例 249
6.1.4 使用MDB的点对点实例 252
6.2 JBoss消息概述 261
6.2.1 调用层 261
6.2.2 安全性管理器 262
6.2.3 目的地管理器 263
6.2.4 消息缓存 263
6.2.5 状态管理器 263
6.2.6 持久化管理器 263
6.2.7 目的地 264
6.3 JBoss消息配置和MBean 264
6.3.1 org.jboss.mq.il.jvm.JVMServerILService 265
6.3.2 org.jboss.mq.il.rmi.RMIServerILService(已丢弃) 265
6.3.3 org.jboss.mq.il.oil.OILServerILService(已丢弃) 266
6.3.4 org.jboss.mq.il.uil.UILServerILService(已丢弃) 266
6.3.5 org.jboss.mq.il.uil2.UILServerILService 267
6.3.6 org.jboss.mq.il.http.HTTPServerILService 269
6.3.7 org.jboss.mq.server.jmx.Invoker 270
6.3.8 org.jboss.mq.server.jmx.InterceptorLoader 270
6.3.9 org.jboss.mq.sm.file.DynamicStateManager 270
6.3.10 org.jboss.mq.security.SecurityManager 271
6.3.11 org.jboss.mq.server.jmx.DestinationManager 273
6.3.12 org.jboss.mq.server.MessageCache 274
6.3.13 org.jboss.mq.pm.file.CacheStore 274
6.3.14 org.jboss.mq.pm.file.PersistenceManager 274
6.3.15 org.jboss.mq.pm.rollinglogged.PersistenceManager 275
6.3.16 org.jboss.mq.pm.jdbc2.PersistenceManager 275
6.3.17 目的地MBean 276
6.3.18 借助于JMX管理 279
6.4 指定MDB JMS供应商 280
6.4.1 org.jboss.jms.jndi.JMSProviderLoader MBean 281
6.4.2 org.jboss.jms.asf.ServerSessionPoolLoader MBean 282
6.4.3 集成其他JMS供应商 283
第7章 JBoss之连接器——JCA 配置和架构 285
7.1 JCA概述 285
7.2 JBossCX架构概述 287
7.2.1 BaseConnectionManager2 MBean 288
7.2.2 RARDeployment MBean 289
7.2.3 JBossManagedConnectionPool MBean 290
7.2.4 CachedConnectionManager MBean 291
7.2.5 JCA资源适配器实例纲要 291
7.3 配置JCA适配器 298
7.3.1 配置JDBC数据源 299
7.3.2 配置常见JCA适配器 303
7.3.3 配置实例 306
第8章 JBoss之安全性 ——J2EE安全性配置和架构 307
8.1 J2EE安全性声明概述 307
8.1.1 安全性引用 309
8.1.2 安全性身份 310
8.1.3 安全性角色 311
8.1.4 EJB方法许可 312
8.1.5 Web内容安全性约束 315
8.1.6 使用JBoss中的安全性声明 316
8.2 JAAS介绍 316
8.3 JBoss安全性模型 321
8.4 JBoss安全性扩展架构 328
8.4.1 JaasSecurityManager如何使用JAAS 329
8.4.2 JaasSecurityManagerService MBean 331
8.4.3 扩展JaasSecurityManager,JaasSecurityDomain MBean 333
8.4.4 基于XML的 JAAS登录配置MBean 334
8.4.5 JAAS登录配置管理 MBean 336
8.4.6 使用和开发JBossSX登录模块 336
8.4.7 开发自定义登录模块 347
8.5 安全远程密码协议 357
8.5.1 为SRP提供密码信息 360
8.5.2 深入SRP算法 362
8.6 使用Java 2安全性管理器运行JBoss 367
8.7 使用JSSE为JBoss提供SSL 369
8.8 配置用于防火墙后的JBoss 376
8.9 如何保护JBoss服务器 377
8.9.1 jmx-console.war 377
8.9.2 web-console.war 377
8.9.3 http-invoker.sar 377
8.9.4 jmx-invoker-adaptor-server.sar 377
第9章 集成Servlet容器 379
9.1 AbstractWebContainer类 379
9.1.1 AbstractWebContainer契约 380
9.1.2 创建AbstractWebContainer子类 386
9.2 JBoss/Tomcat-4.1.x绑定 388
9.2.1 嵌入式Tomcat配置元素 389
9.2.2 JBoss/Tomcat绑定使用SSL 394
9.2.3 为JBoss/Tomcat-4.x绑定配置虚拟主机 401
9.2.4 使用外部静态内容 403
9.2.5 为JBoss/Tomcat-4.x绑定使用Apache 405
9.2.6 使用群集 407
第10章 MBean服务杂记 409
10.1 系统属性管理 409
10.2 属性编辑器管理 410
10.3 服务绑定管理 410
10.4 定时任务 417
10.5 JBoss日志功能框架 420
10.6 RMI动态类装载 421
第11章 CMP引擎 423
11.1 启程 423
11.2 jbosscmp-jdbc结构 430
11.3 实体Bean 431
11.4 容器管理持久域 437
11.4.1 容器管理持久域抽象访问方法 437
11.4.2 容器管理持久域声明 438
11.4.3 容器管理持久域列映射 438
11.4.4 read-only域 440
11.4.5 评审实体Bean访问 440
11.4.6 依赖值类 442
11.5 容器管理关系 446
11.5.1 cmr-field抽象访问方法 446
11.5.2 关系声明 447
11.5.3 关系映射 448
11.6 查询 454
11.6.1 finder和ejbSelect声明 455
11.6.2 EJB-QL声明 455
11.6.3 覆盖EJB-QL到SQL的映射 457
11.6.4 JBossQL 457
11.7 优化装载 464
11.7.1 装载场景 465
11.7.2 装载组 466
11.7.3 read-ahead 467
11.7.4 装载过程 471
11.7.5 事务 477
11.8 乐观锁 480
11.9 实体命令和主键生成 485
11.10 Defaults 488
11.11 自定义数据源 491
11.11.1 函数映射 493
11.11.2 类型映射 493
11.11.3 用户类型映射 494
第12章 Web服务 495
12.1 XDoclet 495
12.2 将Hello World EJB发布为Web服务 496
附录A JBoss Group和我们的LGPL授权 507
附录B JBoss DTDs 518
附录C 实例安装 519
附录D 索引 520
JBoss是最优秀的、基于Open Source的J2EE应用服务器之一。一方面,业界对JBoss应用服务器强烈关注,因为JBoss具有精良的、基于JMX的总线架构,这使得它在开发者中更加流行和实用。另一方面,JBoss Group本身积极参与J2EE相关规范的制定和相关技术的研究(比如,参与EJB 3.0规范制定,提供轻量级O/R Mapping产品Hibernate,参与Tomcat开发,提供JBoss AOP及JBossCache等优秀产品),这使得JBoss应用服务器本身能够遵循和推动J2EE规范的革新。这些都使得JBoss更为健壮,更为持久,更为“Professional Open Source”,现在已经发展成为以JBoss平台为中心的JBoss社区。
Java管理扩展(Java Management Extension,JMX)在JBoss架构中具有不可替代的作用。借助于JMX,JBoss应用服务器的一切都是模块化的。JBoss 3.2.x系列产品,在JBoss 2.x/3.0.x的基础上,已经发展成为很完善、成熟的产品,而且其源代码也成为了JBoss 4.x(J2EE 1.4认证)的重要基础。这些产品系列都以JMX作为架构总线。同时,本书的第三版,即读者手中的这本书,正是深入介绍和研究JBoss 3.2.x系列产品的管理和开发的。这本书在JBoss社区中广泛传播,已经成为了JBoss管理和开发的重要基础资源。它将JBoss的各个层面娓娓道来,尤其是管理和开发JBoss应用服务器本身,使得开发者能够定制更适合自身业务需求的JBoss应用服务器;同时,也使开发者深入到JBoss应用服务器源码之中,而领略其带来的无限魅力及完美的体验。
本书由JBoss Group官方编写,绝对是目前对JBoss应用服务器诠释最好的参考书之一。它首先从介绍JBoss的安装和构建入手(第1章),然后介绍了JBoss JMX微内核(第2章),这也是本书最为重要、最为基础的内容之一。进而,本书结合J2EE平台技术和JBoss服务,依次展开对JNDI命名(第3章)、JTA事务服务(第4章)、EJB容器配置和架构(第5章)、JMS配置和架构(第6章)、JCA配置和架构(第7章)、J2EE安全性配置和架构(第8章),以及CMP引擎(第11章)的深入研究和分析,从而奉献出了JBoss中蕴含的丰富内容和业界经验。另外,本书还阐述了JBoss其他内容,比如集成Servlet容器(第9章)、MBean服务杂记(第10章)及Web服务(第12章)。还犹豫什么,赶紧进行JBoss之旅吧!
另外,在网站http://www.open-v.com和www.fecit.cn上,还提供了本书的最新信息及JBoss相关资料。
由于译者水平有限,加上时间仓促,书中翻译难免有不妥之处,希望广大读者和同行批评和指正。
关于开源
开源背后所隐藏的基本哲理非常简单:当开发者能够阅读、重新发布并修改软件时,软件改进了。人们改进它、使用它并修复Bugs。在通常情况下,如果开发者厌烦传统软件开发的慢速度,他们将会对开源产生极大的兴趣。开源和免费软件,这两个概念经常被大家误解。Open Source Initiative(简称OSI)网站给出了很多从不同角度定义开源的参考资料。具体的网址在:
http://www.opensource.org/docs/definition.html
下面与JBoss关系极为密切的一段概述开源的话摘自OSI主页:
开源社区的人们体会到,其快速的革新速度能够比传统的封闭式开发模型创造更好的软件。在封闭式开发模型中,只有很少的几个人能够看到源代码,而其他人仅仅是盲目地使用二进制软件。
OSI的出现使得这种开放式的开发在商业领域获得可能。
开源软件的时代已经到来。经过近二十年的发展,这种模式一直在建立Internet和WWW技术文化的过程中积蓄能量。现在,它已经冲入了商业领域,并改变了现有的所有规则。你们做好准备了没有?
关于JBoss
JBoss,一个领先的Java 开源、集成和开发基于J2EE的完整服务实现。JBoss提供JBossServer、基本的EJB容器及JMX框架。它也为JMS系统提供JBossMQ,为JTA事务提供JBossTX,为CMP持久化提供JBossCMP,为基于JAAS的安全性提供JBossSX,以及为JCA连接提供JBossCX。为支持Web组件,比如Servlet和JSP,JBoss提供了抽象集成层。而这些抽象层的集成服务实现可以由第三方Servlet引擎提供,比如Tomcat和Jetty。JBoss使得开发者能够通过JMX混合应用这些组件,即借助于替换JMX兼容的组件实现完成这项任务。同时,这些JBoss组件之间甚至不会产生任何影响。因此,JBoss现在全部都是模块化的。
JBoss是基于JMX的完整J2EE实现。JBoss的目标是提供完整的开源 J2EE服务栈,其实我们已经达到了这个目标,而成功的秘诀在于JMX。JMX,即Java管理扩展,是我们发现集成软件的最好利器。JMX提供了公共的平台以允许集成模块、容器及插件。图1展示了JMX总线是如何和JBoss架构进行交互的。
图1 JBoss JMX集成总线及标准的JBossXX组件
关于作者
斯科特·斯塔克(Scott Stark),博士,1964年生于美国的华盛顿州。他原先是一名化学工程师,后来于华盛顿大学获得硕士学位,于特拉华大学获得博士学位。在攻读博士期间,他对计算机和编程已经流露出浓厚的兴趣。因此,使用功能强大的并行计算机来解决难度极大的化学工程问题便成了他读博士期间的研究方向。至今,分布式编程一直是他的主攻目标。当前,Scott是JBoss公司的首席技术官。
马克·弗鲁里(Marc Fleury),博士,1968年生于巴黎。马克原先在太阳微视(法国)从事过销售工作。毕业于法国声名显赫的Ecole Poly技术学院的他,同时也是伞兵队的前任上尉。后来,马克从巴黎高等师范学校获得理论物理专业的硕士和博士学位。在从事物理方面的研究过程中,他也在麻省理工学院做过X射线激光器方面的访问学者。目前,马克是JBoss公司,即一个坐落在亚特兰大郊外的、提供优质服务的公司的总裁。
JBoss公司,由Marc Fleury领衔的、由世界范围内100多位开发者组成的公司。他们分发各种用途的J2EE工具,并且致力于将JBoss发展为J2EE平台中的主流企业Java应用服务器。
JBoss是开源支持、兼容J2EE标准及纯Java实现的J2EE应用服务器。JBoss服务器及其附属产品都是基于开放的授权分发的。每月至少达到100 000次的下载量,使得JBoss成为业界下载最多的J2EE基础服务器。
本书内容
本书的主要目的是从配置和架构这两个角度弄清楚标准JBoss 3.2.x的架构组件。使用JBoss的开发者将理解如何配置标准的组件。其中,需要开发者注意的是,本书不是介绍J2EE和如何应用J2EE的,而是关注JBoss服务器架构的内部细节及具体J2EE容器实现的配置和扩展。
JBoss开发者将很好地理解标准组件的架构、集成,以及扩展或替代标准组件,从而满足用户的基础信息框架需求。同时,本书也将指导开发者如何获得JBoss源码,并在此基础上构建和调试JBoss服务器。
本书最后提供了索引表,以方便读者更加方便快速地找到相关技术点。随书光盘内容为书中范例源代码,希望对读者有所帮助。
本书由飞思科技产品研发中心策划引进并组织翻译,由具有多年J2EE开发、培训及写作经验的罗时飞先生执笔翻译。罗先生在翻译过程中数易其稿,其精益求精的治学态度令我们深深感动。此书在出版过程中也得到了JBoss公司Ben Wang(王文彬)博士的大力支持,在此一并表示感谢。由于翻译时间仓促,书中难免会有一些疏漏,希望广大读者给予批评指正。
我们的联系方式如下:
咨询电话:(010)68134545 68131648
答疑邮件:support@fecit.com.cn
服务网址:http://www.fecit.com.cn http://www.fecit.net
通用网址:计算机图书、FECIT、飞思教育、飞思科技、飞思
飞思科技产品研发中心