IBM®
跳转到主要内容
    中国 [选择]    使用条款
 
 
Select a scope: Search for:    
    首页    产品    服务与解决方案     支持与下载    个性化服务    
跳转到主要内容

developerWorks 中国  >  WebSphere  >

WebSphere Application Server V7 的系统管理,第 5 部分: 业务级应用程序

developerWorks
文档选项

未显示需要 JavaScript 的文档选项

英文原文

英文原文


级别: 中级

Will Edwards, 顾问软件工程师, IBM
Cindy Schneider, 顾问软件工程师, IBM
Ray Clement, 软件工程师, IBM

2009 年 7 月 20 日

Journal icon IBM® WebSphere® Application Server V7.0 中引入的业务级应用程序提供比单独的 Java™ EE 应用程序更好的管理和操作功能。业务级应用程序是一个逻辑应用程序,可以把 Java EE 应用程序分组为业务级应用程序,这样业务级的启动或停止操作就会触发组中所有成员应用程序的启动或停止操作。业务级应用程序还可以更好地管理共享库:可以把 Java EE 应用程序存档中未包含的共享库导入 WebSphere Application Server 配置中并添加到业务级应用程序中,然后通过配置同一业务级应用程序中的 Java EE 应用程序,声明对这些共享库的运行时依赖关系。本文讨论业务级应用程序的一般构造,解释如何使用这个新功能。

来自 IBM WebSphere Developer Technical Journal

简介

促使业务级应用程序出现的一个因素是,Java EE 打包模型中有一个限制。Java EE 应用程序与 EAR 文件等打包结构紧密关联。也就是说,一个 EAR 的内容对应于一个应用程序。不存在跨多个 EAR 的 Java EE 应用程序构造,但是应用程序往往非常大,把整个应用程序打包为一个 EAR 是不现实的。因此,开发人员希望有某种更高层的构造,可以把多个 EAR 组合成一个逻辑实体。

业务级应用程序就是这样的高层构造。可以使用业务级应用程序把多个 Java EE 应用程序组合在一起,还可以用单一启动或停止命令启动和停止整个应用程序集合。图 1 说明业务级应用程序的复合结构。


图 1. 业务级应用程序的概念视图
图 1. 业务级应用程序的概念视图

那么,业务级应用程序有什么好处呢?

本系列文章 主要向您介绍了 WebSphere Application Server(WAS)V7 中几个重要的系统管理功能。下面我们分别对其进行简要介绍:

  • 可以把 Java EE 存档等可部署工件组合成一个复合实体,也就是业务级应用程序。注意,在图 1 中,二进制代码与部署二进制代码所需的元数据是分离的。这就允许多次部署二进制代码,每次部署由不同的元数据集组成。还要注意,一个业务级应用程序可以包含另一个业务级应用程序,这进一步增强了复合模型的灵活性。后面 会详细讨论复合元素、复合单元和资产。

  • 可能遇到的另一个限制是对库的处理。库类可以打包在 EAR 文件中,但是如果这样做,在多个 EAR 之间共享的库就难以管理了。另外,这种打包方案不支持共享库类装载器(共享库类装载器支持在多个应用程序之间共享单实例库 java.lang.Class 对象和共享单实例库对象)。在 V7.0 之前,WebSphere Application Server 允许共享库(包括单实例对象),但是必须把这些库手工部署到目标节点。理想情况下,应该能够按照与部署应用程序相似的方式把共享库部署到 WebSphere Application Server 单元(cell),并通过配置依赖应用程序,让应用程序的类装载器能够解析它依赖的共享库类。

    业务级应用程序能够改进对共享库的处理。现在,可以把共享库导入 WebSphere cell,然后与 Java EE 应用程序一起添加到业务级应用程序中。在 WebSphere Application Server V7.0 中的 Java EE 应用程序配置步骤中,可以声明对导入的共享库的依赖关系,然后把共享库二进制代码与依赖应用程序一起部署到目标节点。

  • Java EE 编程模型没有为 Web 应用程序提供共享 HTTP 会话数据的方法。业务级应用程序功能允许 Web 模块访问共享的会话对象,同时每个模块还维护单独的非共享的 HTTPSession 对象。IBMApplicationSession 是一个新对象,可以由一个业务级应用程序中的所有 Web 模块共享。

  • 除了克服与 Java EE 应用程序相关的限制之外,业务级应用程序还可以满足另一个内部需求。随着 WebSphere Application Server 功能的扩展,也必须扩展能够部署到 WebSphere cell 中的工件(内容)类型,不能只限于 Java EE 工件。另外,必须以可扩展的方式支持可部署内容,这样就不必事先了解特定的内容类型。

    业务级应用程序功能可以以可扩展的方式部署非 Java EE 工件。WebSphere Application Server 通过一个可插入的 “内容处理器” 实现此功能。利用业务级应用程序可扩展性的内容处理器的示例是 IBM WebSphere Application Server V7.0 Feature Pack for Service Component Architecture (SCA) 1.0,它支持把 SCA 贡献包部署到 WebSphere Application Server cell 中。一个 SCA 贡献包可以由多个复合体组成。在部署要运行的 SCA 贡献包时,选择复合体之一。可以多次部署同一个贡献包,每次选择不同的复合体。

    WebSphere Application Server 产品本身也利用了业务级应用程序的可扩展性。7.0 版使用业务级应用程序支持作为附加件部署用户编写的定制代理筛选器,从而扩展基本代理功能。通过把代理筛选器安装为业务级应用程序资产,产品可以在运行时把代理筛选器部署到远程代理服务器,这样用户就不需要把代理筛选器 JAR 手工复制到远程节点。另外,在运行时,可以通过管理控制台或脚本停止或重新启动父业务级应用程序,从而简便地停止和重新启动代理筛选器。

  • 业务级应用程序功能允许把支持的不同类型的工件配置为同一逻辑应用程序(也就是同一业务级应用程序)的组件。

通过一组 AdminTask 命令管理与业务级应用程序相关的对象,可以通过 wsadmin 脚本工具执行这些命令。管理控制台也包含业务级应用程序管理面板,这些面板也基于这些命令。业务级应用程序命令的详细文档请参见 WebSphere Application Server V7.0 Information Center





回页首


理解业务级应用程序概念

下面介绍在使用业务级应用程序时需要理解的一些重要构造:

  • 资产

    资产是业务级应用程序体系结构中应用程序内容的最小管理单元。它是实现业务逻辑的物理二进制代码,而且已经导入到 WebSphere Application Server cell 中了。通过把资产添加到业务级应用程序中,把它们部署到目标服务器和集群。只在系统能够识别文件的内容并支持作为业务级应用程序的组成部分部署此内容的情况下,才可以作为资产导入文件。

    从概念上说,文件格式与实际内容是不同的。资产可以是单一文件、文件的存档(比如 .zip 或 JAR 文件)或存档的存档(比如 Java EE EAR)。业务级应用程序设计允许 WebSphere 产品和特性包扩展可识别的内容类型。业务级应用程序功能包括支持作为共享库使用 Java EE 应用程序存档和一般 Java 存档文件 (JAR)。

    尽管资产可以是组合的,但是资产总是作为单一实体进行管理,执行资产中嵌入的业务逻辑的每个运行时环境(比如 WebSphere Application Server)应该能够访问它们。

  • 可部署单元

    可部署单元是资产中可单独选择部署(也就是创建复合单元)的最小部分。每个可部署单元可以独立地部署到服务器或集群。

    在默认情况下,一个资产中只有一个可部署单元,它代表整个资产。内容处理器可以改变这种默认行为,在导入操作期间为资产指定更细粒度的可部署单元。例如,EAR 文件中的可部署单元对应于 EAR 中的模块。对于作为资产导入的 SCA 贡献包,每个复合体映射到一个可部署单元。

    可部署单元是命名的实体,在 WebSphere Application Server 配置存储库中导入资产时创建和保存的元数据中包含它们。资产是可部署内容的最小管理单元,资产并不是在部署时或发布到服务器时划分为可部署单元的。

  • 业务级应用程序

    业务级应用程序是零个或更多复合单元的集合。通过把组件组合成单一逻辑应用程序,就可以通过在业务级应用程序上执行的操作对所有组件进行一致的操作控制。例如,启动或停止业务级应用程序,即可启动或停止这个业务级应用程序的所有复合单元。复合单元是针对特定的业务级应用程序配置的,因此不能在多个业务级应用程序之间共享。业务级应用程序结构是层次化的,可以在一个业务级应用程序中添加另一个业务级应用程序。

  • 复合单元

    为了把资产添加到业务级应用程序复合体中以部署资产,需要配置资产,让它的内容可以与其他业务级应用程序组件和运行资产业务逻辑的运行时环境交互。业务级应用程序中添加的资产由复合单元表示。基于资产的复合单元包含配置元数据,元数据把资产的内容与特定的运行时环境关联起来,并添加运行时环境装载和执行资产所需的 IT 层配置。

    只能从一个资产创建复合单元。但是,多个复合单元可以共享同一个资产。如果使用相同的应用程序二进制代码,但是希望使用不同的配置提供不同的运行时行为,这个特性尤其有意义。应用于复合单元的规则如下:

    • 因为复合单元包含与应用程序相关的配置数据,所以不能在多个业务级应用程序之间共享。
    • 如果没有业务级应用程序,就不能创建复合单元。复合单元总是在业务级应用程序中创建的。

    除了在业务级应用程序中添加资产之外,还有创建复合单元的其他方法。一种方法是在一个业务级应用程序中添加另一个业务级应用程序。这会创建一个基于嵌套的业务级应用程序的复合单元。另一种方法是使用遗留应用程序管理界面安装 Java EE 应用程序。这些遗留的界面已经经过修改,它们会隐式地创建一个业务级应用程序和复合单元,但是应用程序存档并不作为资产导入。(可以通过一个新的可选参数指定业务级应用程序名。如果指定的业务级应用程序不存在,就创建它)。生成的复合单元代表配置存储库中实际的 Java EE 应用程序安装结构,而不是作为资产导入的 Java EE 存档。

    在部署 Java EE 应用程序时,无论是作为导入的资产部署,还是通过遗留应用程序管理界面部署,仍然使用遗留的应用程序安装结构。也就是说,在 cell 级应用程序目录下创建配置结构,并使用遗留的目标目录(默认的根是 profileRootDIR/installedApps)。

  • 控制操作

    控制操作存在于业务级应用程序级和复合单元级上。控制操作与配置操作的不同之处在于,控制操作并不影响业务级应用程序或复合单元的配置。它们通常用来修改或查询业务级应用程序或复合单元的运行时状态。

    在业务级应用程序上定义的控制操作执行某些在业务级应用程序的上下文中有意义的操作。为了执行控制操作,一些业务级应用程序控制操作会驱动这个业务级应用程序的复合单元上的控制操作。启动和停止是预定义的惟一的业务级应用程序控制操作,也是当前支持的惟一的业务级应用程序控制操作。这些操作会驱动这个业务级应用程序的所有复合单元上的启动和停止操作。如果复合单元代表嵌套的业务级应用程序,那么会向下递归地驱动嵌套的业务级应用程序的复合单元上的控制操作。

    复合单元控制操作映射到低级 IT 操作,比如启动和停止。IT 管理员可以通过控制操作在运行时环境中控制复合单元。业务级应用程序控制操作一般应该驱动复合单元控制操作,进而影响运行时状态。直接在复合单元上调用这些操作的做法应该只用于特殊情况(例如紧急停止),因为可能无法了解操作对整个应用程序复合体上下文的影响。与业务级应用程序一样,启动和停止是预定义的惟一的复合单元控制操作。为了支持业务级应用程序启动和停止操作,每个复合单元必须至少支持启动和停止操作。

  • 目标目录

    运行资产中嵌入的业务逻辑的运行时环境常常需要把资产的内容提取到文件系统中的某一位置,并采用运行时环境可访问的格式。目标目录以运行时环境所需的形式包含资产。目标目录是资产的配置属性之一,要在包含目标服务器或集群成员的每个节点上创建目标目录。默认的目标目录名是 profileRootDir/installedAssets/assetName/BASE。基于 Java EE 应用程序的复合单元的目标目录是应用程序配置中指定的遗留目标目录。默认的遗留目标目录路径是 profileRootDir/installedApps/cellName/applicationArchiveName

  • 共享库

    可以把资产作为共享库添加到业务级应用程序中,可以配置同一个业务级应用程序中的非共享库复合单元,让它们依赖于共享库复合单元。共享库复合单元不能依赖于另一个共享库复合单元。

    共享库是作为资产导入的 Java 存档。共享库通常包含应用程序业务逻辑在运行时引用的类。一些 JAR 只用作共享库。在处理 JAR 时,任何内容处理器都不处理这样的 JAR 文件。业务级应用程序运行时定义一个默认的可部署单元,预定义的名称为 DEFAULT。但是,即使某些内容处理器支持 JAR 的内容,也可以把 JAR 部署为共享库。

    一般情况下,在把 JAR 文件资产添加到业务级应用程序中时,要指定在哪个可部署单元中添加应用程序。如果指定可部署单元 DEFAULT,那么根据定义,生成的复合单元就是共享库复合单元。无论资产实际上是否包含名为 DEFAULT 的可部署单元,都是如此。

    Java EE 应用程序配置可以包含共享库依赖声明。共享库依赖表示为非共享库复合单元对共享库复合单元的引用。在用来创建复合单元的 AdminTask 命令中,可以指定对资产或共享库复合单元的依赖。如果依赖表示为对共享库资产的引用,系统就会自动地使用这个资产的现有的共享库复合单元;如果这个共享库还没有复合单元,就创建它。

    依赖关系只能在同一个业务级应用程序中的复合单元之间存在。复合单元不能依赖于另一个业务级应用程序中的复合单元。

    共享库复合单元必须先于依赖于它的其他复合单元启动。因此,应该把依赖复合单元的启动权值设置为比共享库复合单元更高的数值(见下面的讨论)。如果不这么做,就会在运行时出现类装载错误。

    对共享库的依赖关系是在可部署单元级上指定的。但是,也可以指定一个复合单元依赖于一个共享库。这样做的效果等同于为复合单元中的所有可部署单元指定依赖关系。

    在指定依赖关系时,可以选择是否匹配目标。如果选择匹配目标,那么会在共享库复合单元的目标列表中添加依赖复合单元的所有目标。“match targets” 选项不是持久的。也就是说,这个选项的设置并不存储在配置中。只在最初配置关系时使用这个选项。如果以后要修改依赖复合单元的目标,就必须相应地修改共享库复合单元目标。

    当一个业务级应用程序中的两个 Java EE 应用程序依赖于同一个复合单元时,它们使用相同的类装载器从共享库装载类。这常常是合适的。例如,这两个应用程序会 “看到” 相同的静态库变量值。另外,从理论上说,可以把对共享库对象的引用从一个应用程序传递给另一个应用程序。另一种方法是为同一个库配置两个复合单元,用不同的复合单元配置每个 Java EE 应用程序的依赖关系。通过以这种方式配置应用程序,每个应用程序就会用单独的类装载器装载库类。这会隔离两个应用程序,让一个应用程序与库的交互对于另一个应用程序不可见。在这种配置中,库二进制代码本身仍然是共享的。

    图 2 给出一个配置,其中有三个应用程序依赖于同一个共享库二进制文件:Enterprise Application 1 使用与 Enterprise Applications 2 和 3 不同的共享库类装载器。Enterprise Applications 2 和 3 使用相同的共享库类装载器装载共享库类。



    图 2. 共享库关系
    图 2. 共享库关系

  • 启动权值

    启动权值是复合单元的一个属性。在业务级应用程序启动或停止时,启动权值控制复合单元启动或停止的次序。在应用服务器启动或停止时,根据启动权值决定所有复合单元的次序,而不考虑它们的父业务级应用程序。部署的 Java EE 应用程序的启动权值与它映射到的复合单元的启动权值相同。





回页首


使用业务级应用程序构造把 Java EE 应用程序部署到 cell

本节讨论如何对 Java EE 应用程序使用业务级应用程序功能。这个示例介绍如何作为业务级应用程序的组成部分部署两个 EAR 文件,ShoppingCart.ear 和 UserProfile.ear。在这个示例中:

  • 每个 EAR 文件依赖于两个共享库。第一个共享库 CommonUtilities.jar 只部署一次,产生一个复合单元。第二个共享库 AppScopedUtilities.jar 部署两次,产生两个复合单元。
  • 每个应用程序被配置为依赖于 CommonUtilities.jar 的惟一复合单元和 AppScopedUtilities.jar 的两个复合单元之一。另外,这两个应用程序整体依赖于 CommonUtilities.jar,但是每个应用程序中只有一个模块依赖于 AppScopedUtilities.jar。
  • 正如前面解释的,这两个应用程序将使用相同的库类装载器从 CommonUtilities.jar 装载类。但是,它们使用不同的库类装载器从 AppScopedUtilities.jar 装载类。
  • 这两个 EAR 文件有一个运行时依赖,所以 ShoppingCart.ear 必须先于 UserProfile.ear 启动。必须通过设置两个应用程序的启动权值让 ShoppingCart.ear 先于 UserProfile.ear 启动,并让两个共享库先于两个应用程序启动。

使用 管理控制台wsadmin 脚本实用程序 显示业务级应用程序的配置。

控制台示例

本节讨论如何使用管理控制台面板部署上面描述的示例应用程序。

  1. 导入资产

    要做的第一件事是导入所需的资产,包括上面描述的两个 EAR 文件和两个共享库。(为了简单,图中只显示一个资产的控制台面板;其他资产以相似的方式导入)。

    在导航面板中选择 Applications => Application Types => Assets,即可显示导入的资产的列表。资产列表最初是空的,因为还没有导入资产。导入资产是非常简单的。在资产列表面板中单击 Import 按钮就会显示导入资产面板,后面详细讨论。(显示导入资产列表的资产列表面板示例见图 7)。

    在资产列表面板中单击 Import 按钮就会显示图 3 这样的面板。在这里,可以从本地文件系统或管理控制台连接的主机的文件系统中选择资产文件。在这个示例中,从本地文件系统中选择。



    图 3. 资产上传面板
    图 3. 资产上传面板

    在上传资产之后,要指定资产导入选项(图 4):

    • Asset name。指定一个与导入的文件不同的名称。如果导入 x.jar 并把名称改为 y.jar,那么这个文件将作为 y.jar 保存在配置存储库中。在这个示例中,使用资产文件原来的名称。
    • Asset description。资产配置包含对资产的描述。可以指定任意的描述。
    • Asset binaries destination URL。在默认情况下,部署的资产展开为配置文件 root 目录下的 installedAssets 目录。如果希望把资产展开为其他目录,可以指定资产二进制目标目录。
    • File permissions。当部署的资产展开为二进制目标目录时,根据这个配置值设置文件权限。默认值见图 4;可以根据自己的需求修改。通常情况下,资产的内容处理器会设置适合资产类型的默认值。
    • Asset relationships。可以为资产配置对其他资产的依赖。通常情况下,由资产的内容处理器声明依赖。可以修改声明的默认依赖关系。在这个示例中,在资产级没有声明依赖,不需要添加。
    • Validate asset。如果设置了 Validate asset 标志,资产的内容处理器会分析资产内容,确保它们是有效的。提供这个标志是因为检验花费的时间相当长,如果已经知道资产是有效的,用户可能选择不运行检验。有时候,即使知道一个资产不是有效的,仍然可能希望导入它。在大多数情况下,在部署资产之前,资产是否有效并不太重要。以后可以更新无效的资产,当它有效时部署它。在导入共享库资产或 Java EE 资产时不执行检验,所以这个示例不需要检验。


    图 4. 资产导入选项面板
    图 4. 资产导入选项面板

    在下一个面板(图 5)上,可以检查前面做出的选择,然后返回去修改设置或者完成导入操作。



    图 5. 资产导入汇总面板
    图 5. 资产导入汇总面板

    在单击 Finish 之后,显示状态面板(图 6)。图中只显示进度条目,因为服务器跟踪已经启用了,但是如果需要,内容处理器可以显示进度消息。操作完成之后,可以把修改保存到配置存储库。



    图 6. 资产导入状态面板
    图 6. 资产导入状态面板

    导入资产之后,它们会出现在资产列表面板中(图 7)。



    图 7. 资产列表面板
    图 7. 资产列表面板

  2. 创建业务级应用程序

    导入将组成业务级应用程序的所有资产之后,就要创建应用程序本身了。图 8 所示的面板只包含 name 和 description 框。与其他控制台面板一样,在操作完成时,可以把修改保存到配置存储库。



    图 8. 新业务级应用程序创建面板
    图 8. 新业务级应用程序创建面板

  3. 创建复合单元

    接下来,在刚才创建的业务级应用程序中添加资产。在业务级应用程序中添加资产会创建复合单元,复合单元会成为业务级应用程序的成员。

    下面是在业务级应用程序中添加共享库所用的一系列面板。(这个示例中有两个共享库,但是下面只给出添加 AppScopedUtilities.jar 的过程。以相似方式创建另一个共享库复合单元)。

    为了在业务级应用程序中添加资产,在导航面板中选择 Applications => Application Types => Business-level applications,进入业务级应用程序列表面板。单击要在其中添加资产的业务级应用程序的名称。在这个示例中,单击 OnlineStore,然后单击 Add 按钮(图 9)。

    如图所示,这里有添加非共享库资产和共享库资产的选项。因为包含非库类的资产也可以作为共享库添加到业务级应用程序中,所以需要明确地选择。注意,如果选择了 Add Shared Library,资产就不配置为作为服务器组件运行;如果选择 Add Asset,情况正好相反。在这个示例中,资产是共享库。



    图 9. 添加共享库资产面板
    图 9. 添加共享库资产面板

    注意,图 9 显示业务级应用程序中已经添加的复合单元的列表。如果希望嵌套业务级应用程序,可以选择 Add 按钮,在这个业务级应用程序中添加另一个业务级应用程序。这么做会创建一个复合单元,它把父业务级应用程序链接到嵌套的业务级应用程序。在这个示例中,不需要嵌套业务级应用程序。

    在图 10 中,显示供选择的资产列表。在这里,选择 AppScopedUtilites.jar 并单击 Continue 按钮。



    图 10. 选择共享库资产
    图 10. 选择共享库资产

    下面的一系列面板因添加的资产类型而异。因为这里要添加共享库资产,只需要很少的配置。配置选项如下:

    • Name。系统会替您生成一个复合单元名,但是如果需要,可以修改它。
    • Description。复合单元配置数据包含描述。
    • Starting weight。启动权值控制这个复合单元相对于其他复合单元的启动时间。这里有两个上下文:业务级应用程序启动和服务器进程启动。在业务级应用程序启动时,它的复合单元按照启动权值的升序启动。在服务器进程启动时,所有复合单元按照启动权值启动,而不考虑它们所属的业务级应用程序。在停止业务级应用程序和停止服务器进程时,采用相反的次序。
    • Start composition unit upon distribution。在默认情况下,在把复合单元保存到配置存储库时,并不启动它。设置这个标志会导致在把复合单元保存到配置存储库之后马上启动它。需要注意,共享库也会启动。在启动共享库时,会为它创建类装载器。
    • Restart behavior on update。在默认情况下,在更新资产或修改复合单元配置数据时,如果需要的话,会重新启动资产的复合单元。可以通过选择 NONE 改变这种默认行为,这样就不会执行重新启动。


    图 11. 共享库复合单元选项面板
    图 11. 共享库复合单元选项面板

    在运行复合单元之前,它必须有一个目标。在图 12 所示的面板上,可以指定复合单元的目标。在这个示例中,使用一个单独的配置文件,所以只有一个目标可供选择。



    图 12. 复合单元目标选择面板
    图 12. 复合单元目标选择面板

    在完成复合单元配置数据输入之后,会看到汇总面板(图 13)。在这里,可以返回去修改选项或者完成操作。



    图 13. 添加复合单元汇总面板
    图 13. 添加复合单元汇总面板

    在单击 Finish 之后,会看到图 14 所示的进度面板。在这个面板中只显示以时间戳开头的进度条目,因为已经启用了服务器跟踪。否则,不显示它们。如果需要,内容处理器可以显示进度消息。操作成功完成之后,可以把修改保存到配置存储库。



    图 14. 添加复合单元状态面板
    图 14. 添加复合单元状态面板

    对于这个示例,需要在 OnlineStore 业务级应用程序中添加 AppScopedUtilities.jar 和 CommonUtilities.jar。这里没有给出执行这些任务的面板,因为它们与前面所示的面板相似。

    接下来,需要在业务级应用程序中添加 Java EE 应用程序资产,首先是 UserProfile.ear。启动这个过程的方法与添加共享库资产基本相同,只是要选择 Add Asset 而不是 Add Shared Library。然后,从资产列表中选择 ShoppingCart.ear,见图 15。



    图 15. 选择 Java EE 资产
    图 15. 选择 Java EE 资产

    后面的面板与添加共享库资产的面板很不一样。这是因为 Java EE 内容处理器必须从用户那里获得许多应用程序配置选项。如果您熟悉以前 WebSphere Application Server 版本中的 Java EE 应用程序安装面板,就会非常熟悉这些面板。如图 16 所示,选择显示所有安装选项和参数。



    图 16. 快速路径 / 详细选择面板
    图 16. 快速路径 / 详细选择面板

    其中许多面板处理与业务级应用程序无关的企业应用程序选项和参数。因此,这里只给出包含与业务级应用程序相关的选项的面板。

    图 17 包含一个与业务级应用程序相关的选项。注意接近面板底部的 Business-level application name 框。您会注意到这个框是不可编辑的。这是因为已经选择了要添加应用程序的业务级应用程序。如果使用遗留安装面板安装应用程序(Applications => Application Types => WebSphere enterprise applications),会看到一组完全相同的面板。但是,通过遗留界面添加的应用程序并不添加到任何业务级应用程序的上下文中。因此,这个框是可编辑的。如果指定一个名称,就会把它添加到指定的业务级应用程序中(如果它存在的话)。如果指定的业务级应用程序不存在,就创建它。在默认情况下,系统会创建一个与应用程序同名的业务级应用程序,并把应用程序添加到这个业务级应用程序中。在通过遗留面板安装应用程序时,并不导入 Java EE 资产。配置存储库中应用程序二进制代码的惟一拷贝位于用于部署的应用程序的区域,在以前的 WebSphere Application Server 版本中有这个区域,7.0 版仍然使用这个区域。



    图 17. 业务级应用程序名选项
    图 17. 业务级应用程序名选项

    图 18 中的面板是 WebSphere Application Server V7.0 中新增的。在这个面板中,可以指定对同一个业务级应用程序中共享库复合单元的依赖关系。在这个示例中,需要配置对 CommonUtilities.jar 和 AppScopedUtilities.jar 的复合单元的依赖关系。对于需要配置的每个依赖关系,选择应用程序(或具有依赖的特定模块)并单击 Reference shared libraries 按钮。



    图 18. 映射共享库关系面板
    图 18. 映射共享库关系面板

    注意图 18 显示的表中的 Match target 列。如果选中这个框,就会把相应模块或应用程序的目标添加到通过 Reference shared libraries 按钮选择的共享库中。一定要注意,Match target 并不是所选共享库的配置属性。这个选项用于在最初声明关系时添加共享库目标。如果以后修改一个模块的目标,那么不会相应地更新它依赖的共享库复合单元的目标。您需要自己更新共享库目标。

    单击图 18 中的 Reference shared libraries 按钮时会显示图 19。选择要作为依赖添加的共享库复合单元。



    图 19. 共享库选择面板
    图 19. 共享库选择面板

    配置对复合单元 CommonUtilities_0001.jar(这是在业务级应用程序中添加 CommonUtilites.jar 时创建的复合单元)的依赖关系之后,映射共享库关系面板如图 20 所示。根据前面的应用程序描述,需要选择 User Shopping Cart 并添加对 AppScopedUtilities.jar 的复合单元之一的依赖。(这里没有给出这些面板,因为可以以相似的方式指定共享库依赖关系)。



    图 20. 模块到共享库映射列表面板
    图 20. 模块到共享库映射列表面板

    为了设置启动权值,返回去编辑复合单元并选择 Startup behavior,这会显示图 21。对于 ShoppingCart.ear,启动权值设置为 2。



    图 21. Java EE 启动次序设置面板
    图 21. Java EE 启动次序设置面板

    选择 Applications => Application Types => WebSphere enterprise applications 会显示企业应用程序列表,其中列出所有 Java EE 应用程序,包括通过这个面板部署的应用程序和在业务级应用程序中导入的 Java EE 资产。还可以通过这个路径设置应用程序的启动权值,会看到与编辑复合单元时相同的面板和链接。

    为了在业务级应用程序中添加 UserProfile.ear,再次执行在业务级应用程序中添加 ShoppingCart.ear 时的步骤。有两处差异:

    • 在配置共享库依赖关系时,必须选择 AppScopedUtilities.jar 的另一个复合单元。
    • 需要把启动权值设置为 3,让它在 ShoppingCart.ear 之后启动。
  4. 启动业务级应用程序

    现在已经创建了业务级应用程序,需要把它保存到配置存储库中(如果还没有这么做的话)。必须保存业务级应用程序,否则无法启动它。另外,如果 cell 是分布式 cell,还需要确保把所有修改分布到所有目标节点。同样,在启动业务级应用程序时,只会启动已经保存的复合单元。

    业务级应用程序列表面板见图 22。为了启动一个业务级应用程序,选择与它相关联的复选框并单击 Start 按钮。这会启动一个 Web 应用程序,所以过程是相同的;这个应用程序是一个业务级应用程序的组成部分,但是这一点并不影响应用程序的对外表现。



    图 22. 业务级应用程序启动面板
    图 22. 业务级应用程序启动面板

    关于业务级应用程序控制台的使用方法的更多信息,请参见 WebSphere Application Server V7.0 Information Center

脚本示例

现在,我们来看看如何使用 wsadmin 脚本实用程序部署同一个应用程序。

所有业务级应用程序功能都可以通过一组 AdminTask 命令执行。在这个示例中,以批模式执行所有命令,所需的所有输入都在命令调用中提供。可以以交互模式运行任何命令,在这种模式中会提示输入所有选项。在开始执行命令之前,显示命令的批模式版本。这是学习命令的批模式形式的好方法,因为有的命令相当复杂。

需要执行的步骤与通过控制台执行的步骤基本相同。

  1. 导入资产

    图 23 显示导入 ShoppingCart.ear 的命令。以相同方式导入这个示例中的所有其他文件。只能从本地文件导入文件;不能像使用控制台时那样从服务器的文件系统导入文件。



    图 23. importAsset 脚本命令
    图 23. importAsset 脚本命令

  2. 创建业务级应用程序

    在导入资产之后,创建业务级应用程序,见图 24。



    图 24. 创建业务级应用程序脚本命令
    图 24. 创建业务级应用程序脚本命令

  3. 创建复合单元

    在这里,脚本过程与控制台步骤不一样,因为要使用控制台没有提供的功能。在声明共享库依赖关系时,脚本界面提供指定共享库资产的选项,而不是指定共享库复合单元。如果已经在业务级应用程序中添加了共享库资产,就会对依赖关系使用它的复合单元。如果共享库的复合单元还不存在,就会创建它。对 CommonUtilities.jar 使用这个功能。因此,不会看到显式地把 CommonUtilities.jar 添加到业务级应用程序中的步骤。希望每个 EAR 依赖于不同的 AppScopedUtilities.jar 复合单元,所以要先为它创建复合单元,见图 25 到图 28 所示的命令。



    图 25. 从共享库资产创建第一个复合单元
    图 25. 从共享库资产创建第一个复合单元



    图 26. 从共享库资产创建第二个复合单元
    图 26. 从共享库资产创建第二个复合单元



    图 27. 用于 ShoppingCart.ear 的 addCompUnit 脚本命令
    图 27. 用于 ShoppingCart.ear 的 addCompUnit 脚本命令



    图 28. 用于 UserProfile.ear 的 addCompUnit 脚本命令
    图 28. 用于 UserProfile.ear 的 addCompUnit 脚本命令

    与使用控制台时一样,在业务级应用程序中添加 Java EE 资产时,不能设置启动权值。启动权值必须单独设置(图 29 和图 30)。



    图 29. 为 ShoppingCart.ear 设置启动权值的脚本命令
    图 29. 为 ShoppingCart.ear 设置启动权值的脚本命令



    图 30. 为 UserProfile.ear 设置启动权值的脚本命令
    图 30. 为 UserProfile.ear 设置启动权值的脚本命令

  4. 保存到配置存储库

    与前面一样,必须把业务级应用程序保存到配置存储库,然后才能启动它(图 31)。



    图 31. 把修改保存到配置存储库的脚本命令
    图 31. 把修改保存到配置存储库的脚本命令

  5. 把配置修改分布到目标节点

    如果 cell 是分布式 cell,就必须把配置修改分布到所有目标节点。对每个目标节点运行图 32 所示的命令。



    图 32. 把配置修改分布到目标节点的脚本命令
    图 32. 把配置修改分布到目标节点的脚本命令

  6. 启动业务级应用程序

    保存配置修改之后,可以启动业务级应用程序(图 33)。



    图 33. 启动业务级应用程序脚本命令
    图 33. 启动业务级应用程序脚本命令

关于业务级应用程序脚本命令的更多信息,请参见 WebSphere Application Server V7.0 Information Center





回页首


遗留应用程序管理安装界面

部署到 cell 的所有 Java EE 应用程序都必须是业务级应用程序的成员。V7.0 之前的 WebSphere Application Server 版本中的界面在 V7.0 中作用仍然与以前一样,但是会为应用程序隐式地创建业务级应用程序和复合单元。但是,应用程序并不作为资产隐式地导入。还增加了新选项,允许指定业务级应用程序名称和声明对共享库复合单元的依赖,这样就可以使用业务级应用程序功能。

遗留安装界面中增加的新选项包括:

  • blaname:要添加应用程序的业务级应用程序的名称。如果指定的业务级应用程序不存在,就创建它。
  • SharedLibRelationship:共享库资产 ID 或共享库复合单元 ID 的列表。如果指定了资产 ID,就使用此资产的现有共享库复合单元。否则,创建共享库复合单元。每个 ID 由一个加号 (+) 字符分隔。资产 ID 的格式是 WebSphere:assetname=<asset name>。复合单元 ID 的格式是 WebSphere:cuname=<composition unit name>

下面的示例演示如何使用这些新选项:假设已经创建了名为 “Mybusiness-level application” 的业务级应用程序,在这个业务级应用程序中添加了两个共享库 SL1.jar 和 SL2.jar,这生成了复合单元 SL1_0001.jar 和 SL2_0001.jar。假设您希望安装一个 Java EE 应用程序并把它添加到 Mybusiness-level application 中。这个 Java EE 应用程序依赖于业务级应用程序中的两个共享库。这个 Java EE 应用程序中的所有模块都依赖于 SL1_0001.jar。因此,要声明对 SL1_0001.jar 的应用程序范围的依赖。另外,Web 模块 MyWebApplication.war 依赖于 SL2_0001.jar,所以需要声明 MyWebApplication.war 对 SL2_0001.jar 的依赖。下面的 AdminApp 命令包含指定业务级应用程序和共享库依赖关系所需的选项。为了简化,这里只给出新选项。

AdminApp.install('MyApp.ear', '[ ... -blaname WebSphere:blaname=Mybusiness-level 
application -SharedLibRelationship [[ MyApp.ear META-INF/application.xml WebSphere:cuname
=SL1_0001.jar "" AppDeploymentOption.Yes ][ "My Web Application" MyWebApplication.war,
WEB-INF/web.xml WebSphere:cuname=SL2_0001.jar "" AppDeploymentOption.Yes ]]]' )

“AppDeploymentOption.Yes” 表示 match targets 选项为 TRUE 值。共享库名称后面的空字符串是共享库的复合单元名称。只在指定的库是资产时应用这个值。如果需要创建复合单元,这个值指定要使用的复合单元名称。如果指定空名称,系统会替您构造复合单元名称。如果指定的库是复合单元,就不使用这个值。





回页首


结束语

WebSphere Application Server V7.0 中的业务级应用程序功能改进了对 Java EE 应用程序和代理筛选器的管理。WebSphere Application Server V7.0 Feature Pack for Service Component Architecture (SCA) 1.0 利用了通过业务级应用程序提供的可部署内容的可扩展性。SCA 贡献包也由业务级应用程序构造部署到 WebSphere cell 中。希望本文中的信息能够帮助您使用这种新技术。





回页首


致谢

感谢 Ajay Apte、Chuck Lucier、Annie Nguyen 和 Lavena Chan 审阅了本文并提出意见。



参考资料

学习

获得产品和技术

讨论


作者简介

Will Edwards 是德克萨斯 Austin IBM 实验室的顾问软件工程师。Will 已经从事 WebSphere Application Server 产品九年了,过去两年从事应用程序管理。


Cindy Schneider 是德克萨斯 Austin IBM 实验室的顾问软件工程师。Cindy 从 6.0 版开始从事 WebSphere Application Server 管理控制台。


Ray Clement 是德克萨斯 Austin IBM 实验室的软件工程师。过去两年,Ray 在 WebSphere Application Server 系统管理测试团队工作。他领导对 WebSphere Application Server Version 7.0 中的业务级应用程序进行功能性测试。




对本文的评价










回页首


IBM 公司保留在 developerWorks 网站上发表的内容的著作权。未经IBM公司或原始作者的书面明确许可,请勿转载。如果您希望转载,请通过 提交转载请求表单 联系我们的编辑团队。
    关于 IBM 隐私条约 联系 IBM 使用条款