Sun ONE logo上一部分 | 目录 | 索引 | 下一部分
Sun ONE Application Server 7 Enterprise Java Bean 技术开发者指南



Sun ONE 应用服务器 Enterprise JavaBean 技术介绍

本节概述 Java 企业版 (J2EE) Enterprise JavaBeans (EJB) 技术在 Sun ONE Application Server 7 的应用程序编程模型中的工作方式。



注意

如果您不熟悉 EJB 技术,请参阅 Java 软件教程:

http://java.sun.com/j2ee/docs.html

以及 J2EE 规范:

http://java.sun.com/products/

关于 Sun ONE 应用服务器的概述资料包含在 Sun ONE 应用服务器产品介绍中。



本节介绍以下主题:

以下位置包含有随 Sun ONE 应用服务器一起提供的相关文件:

EJB 2.0 更改摘要


Sun ONE 应用服务器支持 Enterprise JavaBeans Specification 2.0 定义的 Sun Microsystems Enterprise JavaBean (EJB) 体系架构,并且与 Enterprise JavaBeans Specification 1.1 兼容。



您可以在 Sun ONE 应用服务器中部署现有 1.1 Bean,但我们建议按 2.0 Enterprise Bean 部署新 Bean。



本节概述 Enterprise JavaBeans Specification 2.0 中影响 Sun ONE 应用服务器环境中 Enterprise Bean 的更改:

EJB 体系架构


Sun ONE 应用服务器通过自动支持中间件服务(如事务处理、安全数据库连接,等等),减少开发中间件的复杂性。

下图说明把 Enterprise Bean 装配在 J2EE 环境中的什么位置。在此图中,客户机运行 Web 浏览器或应用程序客户端,J2EE 服务器运行着Sun ONE 应用服务器程序,而数据库服务器运行着数据库管理软件,例如,Oracle 和 LDAP。Enterprise Bean 驻留在业务层,由 JSP(和servlet)提供连接客户端层的接口,而 Sun ONE 应用服务器管理客户端和数据库机器之间的关系。


Figure shows Sun ONE Application Server archtitecture. Illustrates client tier, web tier, business tier, EIS tier.

Sun ONE 应用服务器负责提供 EJB 执行系统的基础,EJB 执行系统包括:

下图说明 J2EE 环境的更多详细信息。业务逻辑层显示 EJB 流。


Figure shows detailed J2EE environment. Illustrates the contents and flow of the client layer, the presentation layer,  the business logic layer, and the data access layer.

增值特性


Sun ONE 应用服务器提供许多与 EJB 开发相关的价值增加特性。这些功能将在以下各节讨论(包括更加深入的资料的参考):

只读 Bean

Sun ONE 应用服务器提供的另一个特性是只读 Bean - EJB 客户端从不修改的实体 Bean。只读 Bean 可完全避免数据库更新。

只读 Bean 可用于caching(其他 Bean 从外部)频繁访问但极少更新的数据库。当另一个 Bean 更新只读 Bean caching的数据时,可以通知只读 Bean,以便刷新其只读 Bean。

Sun ONE 应用服务器提供可以刷新只读 Bean 状态的许多方法。通过设置 refresh-period-in-seconds 元素和 Bean 的事务属性,很容易配置 (a) 始终刷新、(b) 定期刷新、(c) 从不刷新或(d)  计划刷新的只读 Bean。

只读 Bean 最适合于基本数据从不变化或不频繁变化的情形。有关详细信息和使用原则,请参阅“只读 Bean”

pass-by-reference

sun-ejb-jar.xml 文件中的 pass-by-reference 元素使您可以指定 Enterprise Bean 使用的传递参数的方法。这是一个提高性能的机会。请参阅“pass-by-reference”

Pooling和caching特性

Sun ONE 应用服务器提供一种高度可配置的 Bean pooling机制,该机制使部署者可以根据企业需要配置 Bean 池。

另外,Sun ONE 应用服务器支持许多可调整的参数,这些参数可用于控制缓存的 Bean 的数目,以及控制缓存这些 Bean 的持续时间。引用表中同一数据库行的多个 Bean 实例也可以被缓存。

有关此功能的信息,请参阅“pooling和caching”

监视

Sun ONE 应用服务器支持监视运行时环境的许多方面,其中包括可用于调试您的应用程序的正确性以及调整其性能的 EJB 容器的各种元素。

有关监视的详细信息,请参阅 Sun ONE 应用服务器管理员指南(“监视和管理 Sun One 应用服务器”一节)以及性能调整和大小调整指南

与 Sun ONE Studio 4 集成

Java 用 Sun ONE Studio 4 企业版(旧称 Java 用 Forte [FFJ] 企业版)是一种集成式开发环境 (IDE),它使您可以从单个易用界面创建、组装、部署和调试 Sun ONE 应用服务器中的代码。在幕后,有一个插件将 Sun ONE Studio 4 IDE 与 Sun ONE 应用服务器集成在一起。

有关使用 Sun ONE Studio 4 的详细信息,请参阅 Sun ONE Studio 4 企业版指南和“使用 Sun ONE Studio 4 进行 CMP 映射”

动态部署和重新加载

您可以部署、重新部署和撤除部署一个应用程序或独立模块。如果是在服务器运行时执行此操作,就视为动态部署。下面的动态过程可以在 Sun ONE 应用服务器中使用:

有关动态部署的详细信息,请参阅 Sun ONE 应用服务器开发指南管理指南

关于 Enterprise JavaBean


如果您已经熟悉 Enterprise Bean 以及它们如何工作,您可能更希望继续学习“关于开发有效的应用程序”

本节讨论以下主题:

什么是 Enterprise JavaBean?

Enterprise Bean 或 Enterprise JavaBean (EJB) 是一种独立的、可复用组件,该组件包含数据成员、属性和方法。每个 Enterprise Bean 都包含一个或多个应用程序任务或对象,包括数据结构和操作方法。.

出于多种原因,Enterprise Bean 简化了大型分布式应用程序的开发。

Bean 的类型

有三种完全不同的 Enterprise bean 类型:

EJB 流

当用通过浏览器调用某个 Sun ONE 应用服务器中的servlet时,servlet可以调用一个或多个 Enterprise Bean。例如,servlet可以把 JavaServer Page (JSP) 加载到用户的浏览器,以便请求用户名和密码,然后将用户输入传递到一个会话 Bean,以便验证输入。


Figure shows EJB flow, from user interface to database and back.

接受有效用户名和密码组合之后,servlet可能实例化一个或多个实体和会话 Bean,才能运行该应用程序的业务逻辑,然后才终止。Bean 本身可能实例化其他实体或会话 Bean,以便进行进一步的业务逻辑和数据处理。

示例方案

某个servlet调用使客户服务代表可以访问一个订单数据库的会话 Bean。此访问可能包括以下功能:

作为客户订购过程的组成部分,servlet创建一个会话 Bean,该会话 Bean 管理一个临时跟踪客户选定的商品的购物车。订购完成后,购物车数据传输到订单数据库,并释放购物车会话 Bean。

EJB 容器

Enterprise Bean 始终在容器的上下文内工作。容器可作为 Enterprise Bean 和服务器之间的链接。EJB 容器允许利用您自己的组件以及其他供应商提供的组件构建分布式应用程序。

通过该容器,Sun ONE 应用服务器提供高水平的事务管理、安全管理、状态管理(持久性)、多线程处理以及资源pooling包装,因而免于您必须了解低水平 API 细节。通过处理并行操作,容器可使您免于担心存在同时访问某个 Enterprise Bean 的实体(即“线程”)。此容器提供 Enterprise JavaBeans Specification 2.0 说明的所有标准容器服务,同时还提供针对 Sun ONE 应用服务器的附加服务。

Sun ONE 应用服务器包括远程访问、命名服务、安全服务、并行操作、事务控制以及数据库访问。下表显示 Sun ONE 应用服务器提供的 EJB 容器。


Figure shows EJB container components.

接口

客户端从不直接访问会话或实体 EJB 实例。相反,客户端使用 Bean 的远程接口访问 Bean 实例。实施一个 Bean 的远程接口的 EJB 对象类是由容器提供的。

home接口

home接口提供一种供客户端创建、删除并查找 EJB 的机制。EJB 为扩展 EJB 规范中定义的 javax.ejb.EJBHome 接口的容器提供一个home接口。最基本的是,home接口为创建 Bean 的每种方法定义零个或多个 create 方法。

实体 Bean 必须为可用于查找 Bean 或 Bean 集合的各个方法定义查找程序方法。

远程接口

远程接口(以及远程home接口)为远程客户端提供一种访问会话 Bean 或实体 Bean 的方法。远程客户端可以是同一容器或不同容器或 Java 程序(如应用程序、小程序或servlet)中部署的另一个 EJB。一个 EJB 的远程客户端视图具有位置独立性,并可映射到非 Java 客户端环境。

远程home接口是由 EJB 开发者定义的,并由 EJB 容器实施。

本地接口

本地接口(以及本地home接口)为位于具有会话或实体 Bean 的同一 Java 虚拟机 (JVM) 中的客户端提供一种访问该 Bean 的机制。这可提供本地客户端视图。本地客户端可以与关联 Bean 紧密地耦合在一起;会话 Bean 和实体 Bean 可以拥有多个本地客户端。

容器提供实施本地home接口和本地接口的类。实施这些接口的对象为本地 Java 对象。一个 EJB 的本地客户端视图受位置限制。

下图显示通过容器中两个 Enterprise Bean 内的本地接口连接的本地客户端。


Figure shows a client on the Java Virtual Machine using local interfaces in the container to connect to EJBs.

可以在开发期间为一个 Bean 定义本地接口,这样才能在某个调用者处于同一容器时对 Bean 进行简化调用。

pooling和caching

Sun ONE 应用服务器的 EJB 容器pooling匿名实例(消息驱动型 Bean、无状态会话 Bean 和实体 Bean),以减少创建和毁坏对象的额外开销。EJB 容器维护对于部署的每个 Bean 的自由池。自由池中的实例没有身份(即没有关联的主键),用来服务于home接口的方法调用。自由 Bean 也用于服务于无状态会话 Bean 的所有方法。

运行 ejbCreate 和业务方法之后,自由池中的 Bean 实例从“pooling”状态转换为“caching”状态。可以使用 server.xmlsun-ejb-jar.xml 文件中与池相关的属性控制每个池的大小和行为。

EJB 容器把“有状态”实例(有状态会话 Bean 和实体 Bean)caching在内存中,以提高性能。EJB 容器为部署的每个 Bean 维持一个caching。

为实现可扩展性,容器将有选择地从caching中收回一些 Bean 实例,通常是在caching溢出的时候。这些收回的 Bean 实例返回到自由 Bean 池。可以使用 server.xmlsun-ejb-jar.xml 文件中与caching相关的属性控制每个caching的大小和行为。

pooling和caching sun-ejb-jar.xml 文件的参数将在“pooling和caching元素”

pooling参数

Sun ONE 应用服务器pooling的最重要参数之一是 steady-pool-size.。如果把 steady-pool-size 设置为大于 0 的值,容器不仅会以指定数目的 Bean 预先填充 Bean 池,而且还会试图确保自由池中始终有这么多 Bean。这可确保有足够现成 Bean 服务于处理用户请求的状态。

另一个参数 pool-idle-timeout-in-seconds 使管理员可以指定某个 Bean 实例在池中的空闲时间数量。如果把 pool-idle-timeout-in-seconds 设置为大于 0 的值,容器就会删除/毁坏在此指定持续时间期间空闲的任何 Bean 实例。 

caching参数

Sun ONE 应用服务器使用 commit-c 选项完全避免caching实体 Bean 的方法。如果 Bean 的访问次数很大,但却很少重复利用,Commit-c 选项尤其有用。有关其他信息,请参阅“Commit 选项”

Sun ONE 应用服务器caching可以是绑定的,也可以是未绑定的。绑定的caching对其可以容纳的 Bean 的数目有限制,超出这个限制就会钝化 Bean。对于有状态的会话 Bean,caching溢出发生时,有三种选取受害 Bean 的方法(LRU、NRU 和 FIFO)。也可以把caching配置为钝化要钝化的空闲(在指定持续时间内未被访问)Bean。

Enterprise Bean 如何访问资源

Enterprise Bean 可以访问多种资源,其中包括数据库、JavaMail 会话、JMS 对象以及 URL。J2EE 平台提供允许您以相似方式访问所有这些资源的机制。

本节讨论以下内容:

JNDI 连接

J2EE 组件定位它们需要通过调用 Java 命令和目录接口 (JNDI) API 的 lookup 方法l访问的对象。此调用返回的值表现调用者希望访问的对象。如果是 Enterprise Bean,lookup 调用返回 Bean 的home接口的对象引用。此引用可用于 EJB home接口上的所有未来的调用。

Context initial = new InitialContext();
   Object objref
initial.lookup("java:comp/env/ejb/CompString");

服务器上希望访问一个已部署 Enterprise Bean 的 J2EE 组件(JSP、servlet或 Enterprise Bean)在其指定此访问的部署描述符中使用一个 EJB 引用元素。EJB 引用在部署时被映射到与该组件希望访问的 Enterprise Bean 相对应的 JNDI 名称。此映射作用是把访问 Enterprise Bean 的组件从所访问的 Bean 的 JNDI 名称分离开来。因此,与一个 EJB 主页捆绑的 JNDI 名称可能会在部署时被更改,而且不需要调用者的更改代码。

数据库连接

Enterprise Bean 的持久性类型确定您将是否对访问数据库的连接例程进行编码。

URL 连接

统一资源地址 (URL) 在 Web(如网页)上指定资源位置。然后,可以把这些 URL 映射到 JNDI 名称,这样开发者就可以查找 URL。

事务管理

通过把应用程序的工作分成若干称为事务的单元,您就不必处理数据库故障恢复和维护数据库完整性这样的复杂问题。

作为开发人员,您可以选择使用 EJB 代码中的编程事务划分(Bean 管理)还是使用或说明性划分,实施事务管理的负担落在 EJB 容器和 Sun ONE 应用服务器上。该容器和该服务器在事务管理器与一个数据库系统或 Sun ONE 消息队列提供者之间实施必需的低级事务协议,如二阶段承诺协议。

有关事务处理的信息,请参阅“利用 Enterprise Bean 处理事务”

应用程序安全的工作原理

J2EE 应用程序编程模式使开发者与应用程序安全的针对机制的实施细节隔开。一般来说,容器提供安全基础结构的实施。J2EE 以一种增强应用程序可移植性的方法提供这种隔离,从而无需再进行编码,即可把它们部署在不同的安全环境中。

应用程序中使用的说明性安全机制是用部署描述符表达的。然后,部署者就可以使用特定 Sun ONE应用服务器工具把一个部署描述符中的应用程序要求映射到容器实施的安全机制中。

有关详细信息,请参阅“开发安全的 Enterprise Bean”。有关安全领域的信息,请参阅 Sun ONE 应用服务器开发者指南

关于开发有效的应用程序


把一个 Sun ONE 应用服务器应用程序的业务逻辑和数据处理划分为最有效的servlet集、JSP、会话 Bean、实体 Bean 和消息驱动型 Bean 是开发者工作的顶点。没有针对包含 Enterprise  Bean 的面向对象设计的具体规则。但实体 Bean 实例倾向于长命、持久和在客户端之间共享,而会话 Bean 实例则倾向于短命,并只由单个客户端使用;消息驱动型 Bean 作为 JMS 消息的唯一异步接收者,属于其自己的类别。

一般来说,您的目标是创建一个有效平衡对于执行速度的需要以及对于共享(应用程序和客户端内)Enterprise Bean 以及在服务器之间容易地部署应用程序的需要。

以下几节介绍有助于您在 Sun ONE 应用服务器中开发 Enterprise Bean 的高级信息和准则:

创建 Enterprise Bean 的一般过程

本节中的步骤概述创建 Enterprise Bean 的一般过程。关于创建各种类型 Enterprise Bean 的具体说明包含在以下几个步骤所引用的各节中。

要创建 Enterprise Bean:

  1. 为所有 Enterprise Bean 的文件创建一个目录。

  2. 确定您所创建的 Enterprise Bean 的类型:

  3. 根据 EJB 规范为 Enterprise Bean 编写代码,包括:


    • 本地和/或远程/home接口


    • 本地和/或远程接口


    • 实施类(对于消息驱动型 Bean,这正是您所需要的)

  4. 编译接口和类。

  5. 创建 META-INF 目录以及 Enterprise Bean 的其他结构要求。

  6. 创建部署标识符文件 ejb-jar.xmlsun-ejb-jar.xml。(请参阅“组装和部署 Enterprise Bean”。)

    如果某个 Bean 是一个具有容器管理持久性的实体 Bean,您还必须创建一个 sun-cmp-mappings.xml 文件和一个 .dbschema 文件。(请参阅“使用容器管理持久性”。)

  7. 如果需要,请把该类和 XML 文件封装到一个 JAR 文件中。如果目前正在使用目录部署,这就仅是一个可选选择。

  8. 部署 Bean 本身,或将其包含在一个 J2EE 应用程序。(请参阅 Sun ONE 应用程序服务器开发者指南。)

最好按照 Sun ONE 应用程序服务器开发者指南中所述方法,使用验证工具验证这些文件的结构。

Bean 使用准则

决定应用程序的哪些部分作为实体 Bean 的候选者,以及哪些部分作为会话 Bean(有状态或无状态)的候选者,否则消息驱动型 Bean 将会极大地影响应用程序的有效性。一般来说:

有关 EJB 开发者准则的其他信息,请参阅“使用会话 Bean”“使用实体 Bean”以及“使用消息驱动型 Bean”

客户端视图准则

选择使用本地接口还是远程接口是一个开发者在开发 Enterprise Bean 时要做出的设计决策。确定应该使用本地编程模型还是远程编程模式时,都应该考虑以下事实:

有关其他信息,请参阅 Enterprise JavaBeans Specification 2.0。

远程接口或本地接口准则

在所有面向对象的开发中,您都必须确定您的业务逻辑和数据处理所需的粒度水平。粒度水平指把一个应用程序分为多少块。

访问 Sun ONE 应用服务器功能

您可以开发严格遵守 Enterprise JavaBeans Specification 2.0 的实体 Bean,您也可以开发利用该规范以及附加的 Sun ONE 应用服务器增值功能的实体 Bean。

Sun ONE 应用服务器具有许多只能在 Sun ONE 应用服务器中使用的多种功能。Sun ONE 应用服务器 API 使应用程序能够有计划地利用特定 Sun ONE 应用服务器环境功能。



请仅在您计划只在 Sun ONE 应用服务器环境中使用这些 Bean 的情况下才使用这些 API。



关于 EJB 组装和部署


在 Sun ONE 应用服务器中组装模块和应用程序的过程符合所有 J2EE 定义的通常规范,但是,您可以把 Sun ONE 应用服务器特有的部署描述符包含在内,这些部署描述符可增强 J2EE 规范之外的 Sun ONE 应用服务器的功能。

J2EE 模块是一个或多个 J2EE 组件(包含两个此类型部署描述符)的集合。一个描述符是 J2EE 标准文件,另一个为 Sun ONE 应用服务器所特有的文件。对于 Enterprise Bean,以下部署描述符文件适用:

有关 EJB DTD 和 XML 文件的信息包含在“组装和部署 Enterprise Bean”

所有与 EJB 相关的元素的字母顺序列表包含在“元素列表”

关于组装和部署的一般信息包含在 Sun ONE 应用服务器开发指南中。

部署过程包含在 Sun ONE 应用服务器管理员指南以及管理界面联机帮助中。


上一部分 | 目录 | 索引 | 下一部分
Copyright 2002 Sun Microsystems, Inc. All rights reserved.