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

developerWorks 中国  >  WebSphere  >

介绍 WebSphere Process Server 中的打包

developerWorks
文档选项

未显示需要 JavaScript 的文档选项


级别: 中级

Eric Herness (herness@us.ibm.com), WebSphere Business Integration 首席工程师, IBM
Anh-Khoa Phan (anhkhoa@us.ibm.com), 软件工程师, IBM

2006 年 3 月 29 日

IBM WebSphere Process Server V6.0 和 IBM WebSphere Integration Developer V6.0 对 WebSphere Application Server 和 Rational Application Developer 底层的核心 J2EE 和 Java 概念进行了增强和扩展。这篇较短的文章重点介绍 V6.0.0 产品中的应用程序构件和可执行文件的打包。

引言

在本文中,我们介绍关于打包模型的基本知识,该模型用于创建和执行您使用 IBM® WebSphere® Integration Developer 和 IBM WebSphere Process Server 开发和执行的应用程序。虽然我们的简单示例重点介绍 POJO, 但是您可以了解到如何利用这一基本格式来使用WebSphere Integration Developer 创建的所有组件类型,并在 WebSphere Process Server 上进行执行。

本文用一个简单的 HelloWorld 示例来阐释 V6.0.0 的打包过程。将该打包模型与纯 J2EE 模型进行比较和对比,在其中描述关键变量并列出解决方案的汇编程序具有的可能选择。

本文假定您熟悉服务组件体系结构(Service Component Architecture,SCA),包括服务组件定义语言(Service Component Definition Language,SCDL)、模块、导入、导出和绑定等概念。这些概念和其他一些概念都与该物理打包模型中提供的构件相关联。

Hello World 示例

为了阐释我们将在本文中介绍的概念,我们首先描述一个简单的 Hello World 示例。

在该示例中有一个单一的 SCA 模块,它只包含一个用 Java™ 实现的组件,名为 HWComponent。此组件包含一个名为 HWComponentExport 的导出组件,它具有 Web 服务绑定。请参见图 1 中此模块的装配图视图。


图 1. 装配图视图
装配图视图

此外,该单一 SCA 模块依赖于一个名为 HWLibrary 的库项目,它包含此简单 Hello World 示例的共享构件。

该 HWComponent 公开了一个由 Web 服务描述语言 (WSDL) 类型化的接口,并传递由 XML 模式定义语言 (XSD) 描述的数据。请参见图 2 中该 WSDL 的接口编辑器(名为 HelloWorld)。


图 2. 接口编辑器视图
接口编辑器视图

下面显示用于 XSD 的 Business Object (BO) 编辑器,名为 HWMessage:


图 3. 用于 XSD 的 Business Object 编辑器
用于 XSD 的 Business Object 编辑器

接口 (WSDL) 和 Business Object (XSD) 都位于 HWLibrary 项目中。HWModule 项目依赖于 HWLibrary 项目。如果此示例有多个模块项目(例如 HWModule2),则其他的模块项目也可以利用该库项目 (HWLibrary) 以及其中的内容。

本文将在以下几部分的适当地方更为详细地介绍此示例。

创建的 WebSphere Integration Developer 项目

创建的项目有两种类型:库和模块。WebSphere Integration Developer 的缺省透视图将使用 Business Integration 视图来显示这些项目:


图 4. Hello World 示例的 Business Integration 视图
Hello World 示例的 Business Integration 视图

库项目

库项目存放其他模块和库项目中的组件和构件使用的公共构件。

您可以存放到库项目中的构件仅限以下类型:BO Maps1、Relationships、Roles、Interfaces 和 BO。

在我们的示例中,我们有一个库项目 (HWLibrary),它包含一个 BO (HWMessage) 和一个接口 (HelloWorld):


图 5. 可以包含在库项目中的构件
可以包含在库项目中的构件

模块项目

模块项目存放组件以及这些组件所使用的构件。模块项目无法依赖其他模块项目,而只能依赖库项目。

可以存放到模块项目中的构件类型有以下几种:Business Object Maps、Relationships、Roles、Interfaces、Business Objects、Interface Maps、Processes、State Machines、Rule Groups、Rules、Human Tasks、Selectors、Java (POJO) 和 Exports/Imports。

在我们的示例中,我们有一个模块项目 (HWModule),它包含一个 POJO 组件 (HWComponent) 和一个带有 Web 服务绑定的导出组件 (HWComponentExport):


图 6. 显示 HWModule 项目的 Business Integration 视图
显示 HWModule 项目的 Business Integration 视图

声明项目依赖关系

创建的项目可以使用 Dependency 编辑器来声明与其他项目的依赖关系。依赖关系可以是以下类型:项目、Java 项目和 J2EE 项目。

以下是我们的 HelloWorld 示例的 Dependency 编辑器屏幕截图:


图 7. HWModule 项目的 Dependency 编辑器
HWModule 项目的 Dependency 编辑器

J2EE 分段项目

创建的项目存放包含组件的源构件。这些构件可以在整个 SCA 实现中移植,但是没有附加生成步骤是无法执行的。这一生成步骤创建特定于平台的构件,它们是要在给定平台上进行操作所必需的。对于 WebSphere Process Server,运行时平台是 WebSphere 和 J2EE,因此,生成的是 WebSphere J2EE 构件和资源。

对于任何给定的模块项目,都将以基于模块项目名称的命名约定生成四个 J2EE 分段项目:

  • 一个企业应用程序项目
  • 一个 EJB 项目
  • 一个 EJB 客户端项目
  • 一个动态 Web 项目

您在 Business Integration 视图中无法看到这些项目。要查看这些项目,需要更改透视图,例如 Java 透视图。

如果您打开 Java 透视图并使用 Package Explorer 视图,则将看到生成的 J2EE 项目,如图 8 所示。


图 8. 将透视图更改为 Package Explorer 视图以查看 J2EE 生成的项目
企业应用程序分段项目

企业应用程序项目存放整个企业应用程序的构件和元数据,例如 EAR。它们保存的一些信息类型包括:

  • 该 EAR 中包含哪些 EJB 项目?
  • Web 模块的上下文根是什么?

在我们的示例中,生成的企业应用程序项目名为 HWModuleApp,它是基于如下约定命名的:模块名 + "App"。


图 9. HWModuleApp 分段项目
HWModuleApp 分段项目
SCA 模块和企业应用程序之间的关系
SCA v1.0 的打包模型基本上认为 SCA 模块和企业应用程序之间的关系是一一对应的。虽然曾经考虑过其他模型,但这是我们今天所支持的。当确定要将许多 SCA 组件和相关构件放入单一模块时,您应该考虑这一模型。

EJB 分段项目

EJB 存放 Enterprise Java Bean 的构件和元数据。此项目存放生成的 EJB,它们表示实现组件的运行时构件。例如,SCA 导出组件会带来一个生成的无状态会话 EJB。

在我们的示例中,生成的 EJB 项目名为 HWModuleEJB,它是基于如下约定命名的:模块名 + "EJB"。


图 10. HWModuleEJB 分段项目
HWModuleEJB 分段项目

EJB 客户端分段项目

EJB 客户端项目为该 EJB 项目中的 EJB 存放表示客户端构件的构件(例如,远程和 Home 接口的存根),以便 EJB 的客户端可以与 EJB 进行交互。

在我们的示例中,生成的 EJB 项目名为 HWModuleEJBClient,它是基于如下约定命名的:模块名 +'EJBClient'。


图 11. HWModuleEJBClient 分段项目
HWModuleEJBClient 分段项目

动态 Web 分段项目

动态 Web 项目存放表示 Web 组件的构件,例如 Servlet 和 JSP。在我们的示例中有一个 Web 服务导出组件,这带来了一个 Servlet,表示用于入站 http 通信的 http 路由器。动态 Web 项目将在必需时生成。

在我们的示例中,生成的动态 Web 项目名为 HWModuleWeb,它是基于如下约定命名的:模块名 + "Web"。


图 12. HWModuleWeb 分段项目
HWModuleWeb 分段项目




回页首


最终结果

分段项目保存模块项目的 J2EE 运行时构件。这些分段项目依赖于模块项目,而模块项目本身可能依赖于库项目。

将所有这些项目打成包创建了一个可执行的 J2EE 企业存档,可以将它部署在 WebSphere Process Server 上。下面是表示我们的 HelloWorld J2EE EAR 的项目的屏幕截图:


图 13. 包含 Hello World 示例的项目
包含 Hello World 示例的项目

正如您在上面的屏幕截图中可以看到的,该 EAR 文件不仅包含刚才描述的所有 J2EE 项目,还包含原始模块项目(在本例中为 HWModule)和名为 HWLibrary 的库的副本,这样才组成一个完整的包。从 J2EE 透视图来看,HWLibrary 和 HWModule 都是实用工具 jar,而不是特殊的存档类型。

在 WebSphere Integration Developer 外部使用构件

通过 WebSphere Integration Developer,可以在没有帮助的条件下创建包含构件的源项目,但这不在本文的讨论范围内。这里要解决的问题是在使用 WebSphere Integration Developer 创建了项目之后,如何使它们能够在开发相同解决方案的其他开发人员之间共享(引入项目互换存档的概念),以及如何用命令行将此存档部署到可执行的、特定于平台的构件上,例如 J2EE EAR。

项目互换存档

项目互换存档 (project interchange archive) 是一个压缩存档,它包含您的源项目,并且还可能包含分段项目(如果您选择包含它们,但是建议您不要包含这些项目)。您可以通过选择 WebSphere Integration Developer 中的 Export => Project Interchange 功能来创建此存档:


图 14. 导出项目互换文件
导出项目互换文件

图 15. 选择在项目互换中包含哪些项目
选择在项目互换中包含哪些项目

您可以将这些项目导入一个新的工作区,也可以使用 Import => Project Interchange

ServiceDeploy:命令行部署器

ServiceDeploy 是 WebSphere Process Server V6.0 附带的一个命令行实用工具。它处理 .jar(表示压缩模块)、.zip(表示项目互换存档)和 .ear(表示需要重新生成的 EAR),并生成可以安装到 WebSphere Process Server 的 .ear 文件。

结束语

这篇较短的文章介绍了打包模型的基本知识,该模型用于创建和执行由 WebSphere Integration Developer 开发且针对 WebSphere Process Server 的应用程序。虽然我们的示例重点介绍 POJO 并且非常简单,但是您可以跨能够使用 WebSphere Integration Developer 创建的所有组件类型持续利用这一基本格式,并在 WebSphere Process Server 上加以执行。

附录:ServiceDeploy 语法

语法

serviceDeploy inputarchive [<-workingDirectory temppath> <-outputAppliation outputpathname.ear> <-noJ2eeDeploy true|false> <-freeform true|false > <-cleanStagingModules true|false> <-keep true|false> <-ignoreErrors true|false> <-classpath jarpathname;rarpathname;warpathname;...-help]

参数

-inputarchive
一个必需的定位参数,它指定包含要部署的应用程序的 .jar、.zip 或 .ear 文件。如果文件所在路径没有发出该命令,则此参数必须是该文件的完整路径。该 .zip 文件既可以是嵌套的存档,也可以是 Eclipse ProjectInterchange 格式的文件。
-classpath
一个可选的参数,指定所需资源文件(.ear、.jar、.rar 和 .war)的位置。每个文件的路径都应该是完全限定的路径,它们由分号 (;) 分隔,之间没有空格。省略此参数会导致 serviceDeploy 只搜索输入命令的路径。
-freeform
一个可选参数,它指明应该将 service.jar 中的 J2EE 子目录看作自由格式的项目。缺省值是 false。
-help
一个可选参数,用于显示此命令的参数。
-ignoreErrors
一个可选参数,指明 serviceDeploy 构建一个 .ear 文件,在构建或验证该应用程序时不管是否存在错误。此参数的缺省值是 false。
-cleanStagingModules
一个可选参数,指明在部署前是否删除输入的 .ear 文件中的分段模块。此参数的缺省值是 false。
-keep
一个可选参数,指明在部署后是否保存生成的任何临时文件。此参数的缺省值是 false。
-noJ2eeDeploy
一个可选参数,指明在生成 .ear 文件后,应用程序是否需要 EJB 部署。此参数的缺省值是 false。
-outputApplication
一个可选参数,指明 serviceDeploy 创建的 .ear 文件的名称。缺省值是 inputjarfile.ear,其中 inputjarfile 是文件名除去为输入的 .jar 文件指定的扩展名。
-workingDirectory
一个可选参数,指明用于编写临时文件的目录 serviceDeploy。

输出

当 serviceDeploy 完成处理时,它会在运行命令的目录中创建一个 .ear 文件,除非指定 -outputApplication 参数。

异常

这是不适用的。

serviceDeploy 命令示例

以下的命令示例:

  • 从 MyValueModule.jar 文件创建一个称为 MyValueModule.ear 的应用程序文件。
  • 指定驻留在目录 c:\java\myvaluemoduleres.rar、c:\java\commonres.ear 和 c:\java\myvaluemodweb.war 中的资源。
  • 允许 .jar 文件中的 J2EE 子目录为自由格式。
  • 在部署过程中保留生成的临时文件。

清单 1. serviceDeploy 命令示例
				
servicedeploy MyValueModule.jar 
-classpath c:\java\myvaluemoduleres.rar;c:\java\commonres.ear;c:\java\myvaluemodweb.war
-noj2eedeploy true -freeform true -keep






回页首


下载

描述名字大小下载方法
code sample0512PI.zip8 KB  FTP|HTTP
关于下载方法的信息


参考资料



作者简介

Eric Herness 目前是 Websphere Business Integration 的首席架构师,他来自 IBM Rochester(位于 MN 的 USA 开发实验室)。他是 WebSphere Foundation Architecture Board 的高级成员和 Software Group Architecture Board 的核心成员。Eric 研究对象技术和分布式计算中的产品体系结构和产品开发已超过 15 年。


Anh-Khoa Phan 是 IBM Rochester 的一名软件工程师,目前从事 WebSphere Business Integration 方面的研究工作。




对本文的评价

太差! (1)
需提高 (2)
一般;尚可 (3)
好文章 (4)
真棒!(5)

建议?




回页首


这是商标归属权的第一条声明。 这是商标归属权的第二条声明。 其他公司、产品或服务的名称可能是其他公司的商标或服务标志。

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