J2EE6 中文规范
第二章 平台概述
本章是JavaTM平台企业版(Java EETM)的概述。
2.1 体系结构
图2-1展示了Java EE平台体系结构中各元素间的既定关系。注意,此图展示的是元素间的逻辑关系,它并不代表这些元素在物理上的划分方式(不同的机器,进程,地址空间或虚拟机)。
每个独立矩形上半部分标明的容器是Java EE运行时环境,它为应用程序组件提供了必要的服务。这些服务基于矩形下半部分所列出的技术。例如, “Application Client Container”(应用程序客户端容器) 为应用程序客户端提供了链接JMS的接口,其它服务也是如此。所有这些服务会在后续章节详细描述。
这些箭头表示,必须提供对Java EE平台对应部分的访问。应用程序客户端容器为应用程序客户端提供了直接访问数据库的环境。这是通过连接数据库系统的Java API(JDBCTM API)来实现。类似地,Web容器为JSP页面和Servlet,EJB容器为企业Bean也提供了对数据库的访问.
正如图中所示,JavaTM平台标准版(Java SE)API由Java SE运行时环境提供,各种类型应用程序组件都基于这些API。
图 2-1 Java EE 体系结构图
下面的章节描述了每种Java EE平台元素的标准。
2.2 Profile(自定义规范)
Java EE 6规范提出了”Profile (自定义规范)”的概念。
Profile描绘了Java EE平台针对应用程序特定类的配置。
Profiles不是一个新的概念,也不是Java EE platform特有的。“Java Community Process Document 2.6)”(Java社区进程文档2.6)对Profile给出了如下定义: “一种规范,它参考了某个平台版本的规范,并附加零个或多个其它的JCP规范(它们尚未成为平台版本规范的组成部分)。它必须包含来自参考平台的API,但必须符合那个平台定义的引用规则。其它引进的规范必须在完全符合规则的前提下被引进。”
所有Java EE Profile共享一套公共特征,例如命名和资源注入,打包规则,安全标准等等。这就保证了“Java EE平台”旗下的所有产品的一致性。这也确保了熟悉某一Profile或整个平台的开发者可以很容易地适应其它的Profile,避免了技能和经验上的过度差异。
相对于上面概括的基本功能,Profile可以自由包含这个平台的任何技术,它的平台规范中提供了适用于这些技术的所有规则,可以单独使用也可以组合使用。
最后要强调的是,如果Profile只包含逐点技术,它们将比哪些有很少或没有接入点的API包多一点。作为代替,这里采用的Profile的定义应保证,每当本规范定义了技术组合的标准,这些标准会在所有基于Java EE Profile的产品中兑现。
举一个具体的例子, 让我们思考一下在Servlet容器中事务的使用。在孤立状态下,Servlet规范和JTA规范都没有为可移植的应用程序定义一个完整的编程模型。通过开拓自己的一套标准来结合Servlet和JTA,这种规范就可以弥补这一缺陷。所有基于此Profile并包含了这两种技术的Java EE产品都必须满足这些条件, 这就给应用程序开发者提供了一个更完整的编程模型,并为所有相关的Java EE Profile共享。
一个独立的规范--Java EE 6 Web Profile规范,定义了Java EE Web Profile,它是Java EE 6平台的第一项Profile。
可以依据JCP制定的规则和当前规范包含的规则来定义附加的Profile。特别是,一项Profile的确立必须提交一项Java Specification Request(JSR),并在完成时公布自己的计划,它应无视平台自身或其它Profile在此时发生的任何修订。这确保了在定义和发布一项新的Profile或更新已有版本时拥有最大灵活性。
根据上面给出的Profile定义,一项Profile最终可以成为这个平台适当的子集或者超集,也可以与它在某一范围上部分重叠。这种灵活性保证了未来的Profile所覆盖的功能将远远超过这个平台规范最初的设想。
正如前面的段落所描述的,建立新的Profile是一项意义深远的任务。决定创建一项Profile时应该重视它潜在的不利因素,尤其是条件的分裂和开发者的困惑。一般而言,要建立一项Profile,需要开发者自然地支持,并且充分衡量应用程序能否从中获益。也推荐Profile在它自己的兴趣范围中扩展功能,尽量避免相互重叠或竞争的Profile出现。Profile可以使用Java EE 6 的平台特征,诸如可选的组件,可扩展性和修剪流程,以更好地实现他们预定的目标。
2.3 应用程序组件
Java EE运行时环境定义了Java EE产品必须支持的4种应用程序组件类型:
应用程序客户端是Java编程语言程序,它通常是执行在个人电脑上的图形用户界面(GUI)程序。应用程序客户端提供一种类似于本地应用程序的用户体验,并且能够访问Java EE中间层的所有功能。
Applet是运行在Web浏览器中的一种特殊的GUI组件,但它也可以运行在其它的支持Applet编程模式的应用程序或设备上。Applet可以用来为Java EE应用程序提供强有力的用户界面(简易的HTML页面也能用来为Java EE应用程序提供有限的用户界面)
Servlet, JSP页面, JSF应用程序, 过滤器和Web事件监听器通常运行在Web容器中,并且可以响应来自Web客户端的HTTP请求。Servlets, JSP 页面, JSF应用程序以及过滤器可以用来生成HTML页面,作为应用程序的用户界面。也可以用它们生成供其它应用程序组件使用的XML或其它格式的数据。一种特殊的Servlet使用SOAP/HTTP协议为Web服务提供支持。Servlet, 由JSP技术或JSF技术生成的页面,Web过滤器和Web事件监听器在本规范中统称为“Web组件”。Web应用程序由Web组件和其它数据(如HTML页面)组成。Web组件运行在Web容器中。Web服务器包含一个Web容器以及协议,安全等其它方面的支持,符合Java EE规范的要求。
Enterprise JavaBeans(EJB)组件运行在一个支持事务的环境中接受管理。企业Bean通常包含Java EE应用程序的业务逻辑。企业Bean可以使用SOAP/HTTP协议直接提供Web服务。
2.3.1 Java EE服务器为应用程序组件提供支持
Java EE服务器为符合标准的应用程序组件提供部署,管理和运行的支持。根据它们所以依赖的Java EE服务器,应用程序组件可以分成3类:
?部署,管理和运行在Java EE服务器上的组件。这类组件包括Web组件和EJB组件。请查看这些组件各自的规范。
?部署和管理在Java EE服务器上,但是被加载到客户机上运行的组件。这类组件包括诸如HTML页面和嵌入THML页面的Applet这样Web的资源。
?部署和管理没有完全定义在本规范中的组件。应用程序客户端就属于这种类型。本规范的未来版本可能会更完整地定义应用程序客户端的部署和管理。请查看EE.10, “应用程序客户端”中对应用程序客户端的描述。
2.4 容器
容器为Java EE应用程序组件提供了运行时支持。容器提供了一份从底层Java EE API到应用程序组件的联合视图。Java EE应用程序组件不能直接地与其它Java EE应用程序组件交互。它们通过容器的协议和方法来达成它们之间以及它们与平台服务之间的交互。在应用程序组件和Java EE服务之间插入一个容器,这允许该容器透明地为组件注入必须的服务,例如声明式事务管理,安全检查,资源池和状态管理。
一个标准的Java EE产品会为每个应用程序组件类型提供一个容器: 应用程序客户端容器,Applet容器,Web组件容器, 企业Bean容器。
2.4.1 容器的标准
本规范要求容器提供一个由JavaTM平台标准版规范v6 (Java SE)定义的JavaTM兼容性运行时环境。Applet容器可以使用Java插件产品来提供这个环境,或者是使用本地环境。提供JDKTM 1.1 API的Applet容器超出了本规范的范围。
容器工具必须识别部署应用程序组件的打包文件格式。
容器由Java EE产品供应商提供。请查看2.11.1,“Java EE产品供应商”中对产品供应商角色的描述。
本规范定义了一套标准服务,每个Java EE产品必须提供支持。后面会对这