业务流程执行语言 (BPEL) 用于 Web 服务 - 第 5 章:Oracle BPEL Process Manager 和 BPEL Designer:概述






3.53/5 (5投票s)
2006年1月18日
39分钟阅读

80504
在本章中,我们将熟悉 Oracle BPEL Process Manager 10g 第 2 版,这是一个用于部署、执行和管理以 BPEL 定义的业务流程的服务器。
|
引言
在本章中,我们将熟悉 Oracle BPEL Process Manager 10g 第 2 版,这是一个用于部署、执行和管理以 BPEL 定义的业务流程的服务器。Oracle BPEL Process Manager 提供了多项特性,使其成为本书编写时功能最强大的 BPEL 服务器之一。我们将探讨 BPEL 服务器、命令行实用程序和 BPEL 控制台。我们还将探讨 BPEL 设计器,这是一个集成的图形化开发环境。BPEL 设计器可集成到 JDeveloper 中,也可作为 Eclipse 插件使用。BPEL 设计器支持使用图形编辑器进行 BPEL 流程开发,而无需手动编写 BPEL 代码。它支持调试,提供了多个向导,能够自动部署 BPEL 流程,并极大地简化了 BPEL 流程的开发和维护。
在本章中,我们将讨论以下内容
- BPEL Process Manager 的架构
- 主要特性
- 流程部署
- 使用 BPEL 控制台管理和调试流程
- 使用 JDeveloper BPEL 设计器进行图形化开发
- 使用 Eclipse BPEL 设计器进行图形化开发
概述与架构
Oracle BPEL Process Manager 是 BPEL 流程的运行时环境。BPEL Process Manager 10g 第 2 版 (10.1.2) 完全支持 BPEL 1.1 版本,并为 BPEL 流程的部署、监控和管理提供了额外的工具。在本书编写时,Oracle BPEL Process Manager 是市面上最完善的 BPEL 服务器之一。
BPEL Process Manager 使用 Java 开发,运行在符合 Java 企业版规范的应用服务器上,例如 Oracle Application Server 10g 或 OC4J (Oracle Containers for Java)。Oracle 还为开源的 JBoss 和 BEA WebLogic Server 提供了相应版本。通过手动安装,Oracle BPEL Process Manager 也可以与 IBM 和 Sun 的应用服务器配合使用。
让我们看一下 BPEL Process Manager 的架构,如下图所示
Oracle BPEL Process Manager 有四个主要部分
- BPEL 服务器
- BPEL 控制台
- BPEL 设计器(JDeveloper 或 Eclipse)
- 数据库
BPEL 服务器
BPEL 服务器运行在符合 Java 企业版规范的应用服务器中。它包含以下主要部分
- 核心 BPEL 引擎
- WSDL 绑定
- 集成服务
核心 BPEL 引擎
核心 BPEL 引擎是部署和执行 BPEL 流程的运行时环境。除了完全支持 BPEL 1.1 外,该引擎还为关键的 Web 服务编排栈技术提供支持,特别是 WS-Addressing、WS-Reliable Messaging、WS-Security 以及 BPEL 补偿事务模型。
BPEL 引擎还提供版本控制支持。这使得可以开发业务流程的多个版本,并让它们并排部署。在实际场景中,业务流程会随时间演变,因此这一特性非常重要。有效的版本控制支持简化了管理工作。
另一个非常重要的特性是“脱水”(dehydration)。在前面的章节中,我们已经解释过,业务流程可能是长时间运行的,因为所涉及的合作伙伴可能无法即时响应请求。这在异步场景中尤其常见,即业务流程调用一个合作伙伴 Web 服务(使用 <invoke> 活动),然后等待响应(使用 <receive> 或 <pick> 活动)。在等待响应期间,Oracle 引擎可以将流程(及其状态)存储到数据库中,从而释放服务器资源。这被称为脱水。当引擎收到响应时,它首先从数据库中恢复流程及其状态(水合,hydration),然后继续执行流程。在许多业务流程可能并行运行的实际场景中,脱水能力非常重要,因为它降低了对硬件性能的要求。
Oracle BPEL 引擎还支持集群。集群通过在引擎上配置故障转移来提高服务器的可靠性。集群还通过负载均衡来提高可伸缩性。这些特性在产品的实际使用中非常重要。
WSDL 绑定
WSDL 绑定框架负责与部署在服务器上的 BPEL 流程进行通信。这包括希望访问 BPEL 流程的客户端,以及希望访问其他 Web 服务(合作伙伴链接)的 BPEL 流程。尽管 BPEL 规范只提到了 Web 服务,但 Oracle BPEL Process Manager 允许使用除 SOAP 之外的其他协议进行连接。这在实际应用场景中特别有用,因为业务流程通常需要连接到现有的应用程序或系统。通过 WSDL 绑定框架,BPEL 的应用范围扩展到了这些系统,而无需将它们转换为 Web 服务。
这里特别值得关注的是与 Java EE 制品的连接性,例如 EJB(企业 Java Bean)、RMI(远程方法调用)、JMS(Java 消息服务)、JCA(Java 连接器架构),以及与电子邮件、HTTP GET 和 POST、套接字的连接。这种集成是通过 WSIF(Web 服务调用框架)实现的。所有这些都使得与后端系统,特别是那些无法简单地暴露为 Web 服务的现有和遗留系统的集成变得相对容易和高效。通过 WSDL 绑定,BPEL Process Manager 提供了一些通常由 ESB(企业服务总线)提供的功能(更多 ESB 功能请参考 Oracle Fusion)。
集成服务
在 BPEL 中描述的业务流程与 Web 服务通信并交换 XML 文档。集成服务为这些 XML 文档的转换提供了支持,其功能超出了 XPath 的支持范围。Oracle BPEL Server 支持 XSLT(可扩展样式表语言转换)转换和 XSQL。它提供了引擎和 XSLT 映射器,简化了样式表的开发。
XSLT 支持 XML 词汇的复杂转换,也可以用于将 XML 转换为其他标记格式,如 HTML、WML 或 VoiceXML,以用于表示。有关 XSLT 的更多信息,请参考此网站。XSQL 和 XQuery 也可以使用,它们是 XML 查询语言,其功能超出了简单的 XPath 查询。有关 XSQL 的更多信息,请参考 Oracle 文档。有关 XQuery 的更多信息,请参考网站。
通过工作流服务,BPEL 服务器支持人与 BPEL 流程的交互。流程中经常需要人工交互——典型的例子包括在执行后续步骤前的人工审查、确认或决策——但这部分内容并未被 BPEL 规范所涵盖。工作流服务提供了一个 WSDL 接口,通过该接口,人工交互被建模为合作伙伴链接。工作流服务是对先前版本 BPEL Process Manager 中已知的用户任务服务的增强。
通知服务提供了一个相对易于使用的接口,BPEL 流程可以通过该接口使用不同的(大多数是异步的)渠道向客户端发送通知,例如电子邮件、短消息服务(SMS)、语音消息、传真等。通知服务增强了先前版本 BPEL Process Manager 中已知的邮件和 JMS 服务。
身份服务通过 Web 服务层提供了对应用服务器安全基础设施的访问,并支持用户认证、授权以及对各种已使用属性的访问。通知、工作流和身份服务通常会一起使用。
BPEL 服务器还提供了传感器,通过传感器可以访问活动、变量和故障。这些可以在 BPEL 流程执行期间进行监控。传感器对于报告、与其他流程集成以及调试非常有用。
为了将 BPEL 流程与文件、FTP 服务器、数据库表和队列、JMS 或 Oracle Applications 的访问集成起来,BPEL Server 提供了对技术适配器的支持。适配器通过 WSDL 接口提供对这些资源的访问。它们基于 JCA 1.5 资源适配器和 WSIF。
BPEL 控制台
通过 BPEL 控制台,我们可以部署、管理、维护和调试 BPEL 流程。BPEL 控制台最重要的功能包括
- 可视化流程流
- 审计追踪
- 流程的调试视图
- 流程历史
- 管理 BPEL 域及其配置
Oracle BPEL 控制台使用基于 Web 的界面,该界面基本上是一组调用 BPEL 服务器 API(Java 语言)的 JSP(Java Server Pages)和 servlet。通过该 API,我们可以扩展控制台的功能,甚至在我们对 BPEL 流程有特定处理需求时开发自己的控制台。
BPEL 设计器
BPEL 设计器支持在图形化环境中开发 BPEL 流程,而无需手动编写 BPEL 代码。我们可以通过拖放活动来构建流程,而不是编写代码。我们可以添加合作伙伴链接并定位服务。我们还可以使用函数和复制向导、XPath 表达式构建器以及 XSLT 映射器。BPEL 设计器可以将开发完成的流程直接部署到 BPEL 服务器。这极大地简化了 BPEL 流程的开发和维护。BPEL 设计器内部使用 BPEL 作为其原生格式。由于它使用标准的 BPEL,只要我们不使用 Oracle 产品特有的功能,用 BPEL 设计器开发的流程就可以与其他 BPEL 服务器(反之亦然)一起使用。
BPEL 设计器有两个版本。它可以集成到 JDeveloper 中(称为 JDeveloper BPEL 设计器),也可以作为 Eclipse 平台的插件(Eclipse BPEL 设计器)。JDeveloper 和 Eclipse BPEL 设计器提供类似的功能。然而,JDeveloper BPEL 设计器还支持一些高级的 Oracle 功能,例如传感器和适配器。我们将在本章后面讨论 BPEL 设计器。
数据库
数据库被 BPEL 服务器用来存储 BPEL 模式,并为额外的功能提供支持,特别是“脱水”功能,它将流程状态存储在数据库中。BPEL Process Manager 支持不同的数据库。通常会使用 Oracle 数据库或其他生产质量的数据库管理系统,如 IBM DB2 或 Microsoft SQL Server。可以从 Oracle 网站下载的试用版捆绑了 Oracle Database Lite,它不适合生产使用,因为它性能较差且不支持所有功能。
流程部署示例
现在让我们看看如何在 Oracle BPEL 服务器上部署一个 BPEL 流程。我们将假设 Oracle BPEL Process Manager 已根据安装说明成功安装,并使用默认端口 9700。如果在安装过程中选择了其他端口,则需要相应地修改示例。
我们将使用我们在第 3 章和第 4 章中开发的“商务差旅”BPEL 流程示例。该差旅示例是一个简化的业务流程,用于选择最佳的机票报价。为了唤起我们的记忆,让我们看一下流程活动图
在前面的章节中,我们为该示例开发了 BPEL 代码;它包含一个带有源代码的 *Travel.bpel* 文件和一个存储 WSDL 定义的 *Travel.wsdl* 文件。我们不会在这里展示这些文件的源代码,因为它们已在前面的章节中展示过。它们也可以从此处下载。
流程描述符
我们部署到 Oracle BPEL Process Manager 的每个 BPEL 流程都需要一个流程描述符。这个流程描述符不包含在 BPEL 标准中,是 BPEL 服务器特有的。
部署流程描述符是在给定平台上实现流程时唯一必须重写的部分,以便在不同的 BPEL 服务器上运行该流程。
Oracle 流程描述符是一个 XML 文件,指定了关于 BPEL 流程的以下详细信息
- BPEL 源文件名
- BPEL 流程名称 (ID)
- 所有合作伙伴链接 Web 服务的 WSDL 位置
- 可选的配置属性
流程描述符的默认文件名是 *bpel.xml*,但我们可以使用任何其他名称。现在让我们为我们的流程编写流程描述符。首先,我们必须指定 XML 头部和 <BPELSuitcase>
根元素。在 <BPELProcess>
元素中,我们指定两个属性,src
表示 BPEL 源文件名 (*Travel.bpel*),而 ID
(id
) 表示 BPEL 流程在 BPEL 控制台中显示的名称(我们将使用 TravelProcessCh5
ID)
<?xml version="1.0" encoding="UTF-8"?>
<BPELSuitcase>
<BPELProcess src="Travel.bpel" id="TravelProcessCh5">
....
接下来,我们为流程中使用的每个合作伙伴链接指定 WSDL 位置的绑定属性。在我们的差旅示例流程中,我们使用以下合作伙伴链接
client
:用于客户端与流程的交互employeeTravelStatus
:到员工 Web 服务的链接AmericanAirlines
:到美国航空公司 Web 服务的链接DeltaAirlines
:到达美航空公司 Web 服务的链接
客户端合作伙伴链接的 WSDL 存储在本地的 *Travel.wsdl* 文件中。对于其他三个合作伙伴 Web 服务的 WSDL 位置,我们必须指定相应的 URL。这里我们提供了所有三个 Web 服务的简化实现,这些实现也可以下载并部署到 Oracle BPEL 服务器上。流程描述符的其余部分以及 WSDL 的位置如下所示
...
<partnerLinkBindings>
<partnerLinkBinding name="client">
<property name="wsdlLocation">
Travel.wsdl
</property>
</partnerLinkBinding>
<partnerLinkBinding name="employeeTravelStatus">
<property name="wsdlLocation">
https://:9700/orabpel/default/Employee/Employee?wsdl
</property>
</partnerLinkBinding>
<partnerLinkBinding name="AmericanAirlines">
<property name="wsdlLocation">
https://:9700/orabpel/default/
AmericanAirline/AmericanAirline?wsdl
</property>
</partnerLinkBinding>
<partnerLinkBinding name="DeltaAirlines">
<property name="wsdlLocation">
https://:9700/orabpel/default/
DeltaAirline/DeltaAirline?wsdl
</property>
</partnerLinkBinding>
</partnerLinkBindings>
...
唯一必需的合作伙伴链接绑定属性是 wsdlLocation
。我们还可以选择性地添加其他合作伙伴链接绑定属性。下表中列出了最重要的属性(完整列表请参考 Oracle 文档)
合作伙伴链接绑定属性 |
描述 |
|
指定合作伙伴链接服务的运行时 WSDL 位置(如果与 |
|
指定使用的关联类型(关联在第 4 章中讨论)
|
|
指定合作伙伴链接调用调用的超时时间。 |
|
指定用于 HTTP 认证的用户名和密码。 |
配置属性
我们还可以选择性地向部署描述符添加配置属性,例如 BPEL 控制台在启动流程时输出的介绍性文本和默认输入数据。介绍性文本应包含在 <property>
元素内,其属性名称设置为 testIntroduction
...
<configurations>
<property name="testIntroduction">
The Business Travel Process example.
</property>
....
要添加默认输入数据(也是可选的),我们必须定义一个属性名称设置为 defaultInput
的 <property>
元素,并将输入 XML 消息作为 CDATA
提供
...
<property name="defaultInput">
<![CDATA[
<TravelRequest xmlns="http://packtpub.com/bpel/travel/">
<employee xmlns="http://packtpub.com/service/employee/">
<FirstName>Matjaz B.</FirstName>
<LastName>Juric</LastName>
<Departement>University</Departement>
</employee>
<flightData xmlns="http://packtpub.com/service/airline/">
<OriginFrom>Ptuj</OriginFrom>
<DestinationTo>London</DestinationTo>
<DesiredDepartureDate>2004-04-20</DesiredDepartureDate>
<DesiredReturnDate>2004-04-24</DesiredReturnDate>
</flightData>
</TravelRequest>
]]>
</property>
</configurations>
</BPELProcess>
</BPELSuitcase>
下表列出了其他重要的可选配置属性(完整列表请参考 Oracle 文档)
配置属性 |
描述 |
|
如果此项设置为 |
|
如果此项设置为 |
|
如果设置为 |
|
如果设置为 |
|
如果设置为 participate,未被故障处理器处理的故障将导致其执行所在的事务回滚。 |
设置环境
我们现在可以启动 BPEL Process Manager 了。我们可以从“开始”菜单(如果使用 Windows)执行此操作,或者通过执行 startOraBPEL 脚本,该脚本位于 *C:\OraBPELPM_1\integration\orabpel\bin* 目录中(假设 Oracle BPEL Process Manager 已安装在默认目录中)。建议将此目录添加到路径中以便于访问。
接下来,我们需要一个命令提示符,并在其中设置环境变量。我们可以从“开始”菜单选择“开发者提示符”,或在 *C:\OraBPELPM_1\integration\orabpel\bin* 目录中执行 obsetenv 脚本。该脚本设置了多个环境变量——我们在此列出最重要的几个
设置环境变量对于成功部署 BPEL 流程至关重要。
OB_HOME
指定了 Oracle BPEL 安装目录的路径。OB_PLATFORM
指定了应用服务器(如果使用 Oracle OC4J,则为 oc4j_10g)。MY_CLASSPATH
和MY_CLASSES_DIR
指定了 Oracle BPEL 服务器的类路径。JAVA_HOME
指向 Java SDK 的主目录。J2EE_APPLICATIONS
指定了应用服务器目录,J2EE 应用程序可以部署到该目录。
BPEL 编译器和修订号
在我们编写了流程描述符并设置好环境之后,我们就可以部署 BPEL 流程了。为此,Oracle BPEL Process Manager 提供了 BPEL 编译器,可以通过命令行中的 bpelc 命令启动。*bpelc* 编译 BPEL 流程源文件并创建 BPEL 流程归档 JAR 文件。它还可以自动将流程部署到 Oracle BPEL 服务器。这将在下一节中讨论。
BPEL 编译器的语法如下
> bpelc [options] process_descriptor_name.xml
*process_descriptor_name.xml* 的默认值为 *bpel.xml*。最重要的选项是
- -rev <revision_tag>:这指定了已部署 BPEL 流程的修订(版本)号。
- -force:这指示编译器不要检查 *.bpel*、*.wsdl* 和 *.xml* 文件的时间戳。
修订号用于在 Oracle BPEL Process Manager 上部署同一 BPEL 流程的不同版本,并让它们同时运行。
修订号在生产环境中最为有用,在生产环境中,部署一个具有新修订号的新版本流程比覆盖现有修订号更为合适。在后一种情况下,所有现有的流程实例都会被停滞,无法再访问。如果我们使用新的修订号,我们可以将旧的流程修订标记为已停用,但仍然可以访问已创建的实例。我们将在本章后面解释如何将流程标记为已停用。
我们可以使用以下命令为我们的差旅示例生成修订号为 1.0 的 BPEL 流程 JAR 归档
> bpelc –rev 1.0
此命令生成 *bpel_TravelProcessCh5_1.0.jar* 归档文件,如下所示
生成的归档文件包括 BPEL 源代码以及相关的 WSDL 和 XML 文件。它还包括流程模型文件(在我们的示例中称为 *TravelModel.xml*),这是一个规范化的 BPEL 表示,为每个活动添加了 ID。
部署和域
要部署我们的差旅流程,我们有几个选项
- 手动将 BPEL 归档复制到服务器域
- 使用 *bpelc* 部署流程
- 使用 *obant* 工具进行部署
- 使用 BPEL 控制台部署 BPEL 流程归档
在我们部署之前,让我们先讨论一下 Oracle BPEL 服务器的架构。每个 Oracle BPEL 服务器安装都可以逻辑上划分为多个域。默认域由安装程序自动创建(称为 default)。可以使用 BPEL 控制台创建额外的域;这将在本章后面讨论。这些域位于 *C:\OraBPELPM_1\integration\orabpel\domains* 目录中。
要手动部署 BPEL 流程,我们只需将 JAR 归档文件复制到相应的目录。在我们的例子中,这个目录是 *C:\OraBPELPM_1\integration\orabpel\domains\default\deploy*。BPEL 服务器会自动检测并加载该流程。
使用 *bpelc* 部署流程需要我们使用 -deploy <domain_id> 选项,该选项指示编译器自动将归档部署到指定的域。部署目标域必须可以通过文件系统访问。要使用 *bpelc* 部署我们的差旅示例,我们需要使用以下命令
> bpelc –rev 1.0 –deploy default
以下截图显示了输出结果
Ant 实用工具
Oracle BPEL Process Manager 提供了名为 *obant* 的 Ant 实用工具。这可用于配置复杂的编译和部署场景。*obant* 只是标准 Ant 的一个包装器。
Ant,它会设置环境然后调用标准的 Ant Java 任务。要使用它,我们必须准备相应的项目文件,通常称为 *build.xml*。我们的差旅示例流程的项目文件如下所示
<?xml version="1.0"?>
<project name="TravelProcessCh5" default="main" basedir=".">
<property name="deploy" value="default"/>
<property name="rev" value="1.0"/>
<target name="main">
<bpelc home="${home}" rev="${rev}" deploy="${deploy}"/>
</target>
</project>
有关 Ant 的更多信息,请访问 Apache 网站。
要编译和部署我们的 BPEL 流程,我们只需从命令行启动 *obant*。输出如下截图所示
使用 BPEL 控制台进行流程管理
现在我们已经成功地在 Oracle BPEL 服务器上部署了一个 BPEL 流程,让我们来执行它。在第 3 章中,我们提到每个 BPEL 流程都是一个 Web 服务。因此,要启动 BPEL 流程,我们需要像调用任何其他 Web 服务一样调用它。这需要基于 WSDL 编写一个 Web 服务客户端。由于 Web 服务不绑定于特定的平台或编程语言,我们可以使用大多数语言(Java、C#、VB.NET、Delphi 等)、应用程序(SAP、Navision,甚至 Microsoft Office)、工具(XML Spy)或其他 BPEL 流程来完成此操作。
除了这些选项外,Oracle BPEL Process Manager 还提供了一个 BPEL 控制台,通过它我们可以在 BPEL 服务器域上执行、监控、管理和调试 BPEL 流程。BPEL 控制台可以通过 *https://:9700/BPELConsole/* 访问。当然,我们可以用有效的计算机名 URL 替换 localhost。一旦我们输入了域密码,我们就可以在 BPEL 控制台仪表板上点击流程名称 (`TravelProcessCh5`) 来启动我们的差旅流程并创建一个新的流程实例,如下面的截图所示
请注意,除了差旅流程之外,员工、美国航空和达美航空的 Web 服务也必须部署好。点击 *TravelProcessCh5* 后,我们必须输入输入的 XML 消息(显示的是来自流程描述符的默认值),然后点击 Post XML Message 按钮
我们也可以切换到 HTML 表单并输入必要的字段
接下来,我们会看到一个屏幕通知我们流程实例正在异步处理,因为这是一个异步流程。如果这是一个同步流程,我们会立即看到最终结果(通过 <reply> 活动返回)。屏幕如下所示
可视化流程
在下一步中,我们可以选择执行的可视化流程、实例审计或实例调试。实例的可视化流程以图形方式显示 BPEL 流程实例的执行情况。我们可以监控流程的执行及其状态(运行中、已完成、已取消或过时)
重要的是,我们可以点击每个活动符号(如 <receive>、<assign> 等),然后我们会看到相应的 XML 输入和输出。这使我们能够验证每个活动的处理过程。点击第一个 <receive> 活动 (client TravelApproval) 会打开这个屏幕,显示收到的消息 TravelRequest
实例审计
流程实例的审计视图,我们可以通过选择审计标签来激活它,显示了完整的 BPEL 流程以及接收和发送的消息。点击“更多…”链接可以显示交换消息的完整 XML。这个视图对于审计流程交换的消息以及其他活动(特别是那些操作数据的活动,如 <assign>)的执行非常有用。以下截图显示了我们差旅示例流程的审计追踪
调试
流程实例的调试视图(可通过调试标签访问)显示了 BPEL 源代码。点击带下划线的变量名可以访问变量内容。我们可以调试已完成的实例或仍在运行的实例;这称为飞行中调试。调试视图显示了实例的当前状态。如果我们使用飞行中调试,执行暂停的点会高亮显示。下图显示了我们的流程实例完成后的调试视图
例如,点击 TravelResponse
变量,我们会得到以下输出
其他 BPEL 控制台功能概述
使用“BPEL 流程”选项卡,我们可以管理流程生命周期和流程状态。流程的状态可以是“开启”或“关闭”。当流程状态为“关闭”时,无法创建新实例,并且对现有实例的访问也被阻止。流程的生命周期可以是“活动”或“已停用”。当流程被停用时,无法创建新实例。然而,现有实例可以正常完成。已停用状态通常用于已被较新版本取代的流程修订版
从此视图中,我们可以导航到以下内容
- 启动:启动流程的新实例(上一节已描述)。
- 描述符:查看在 BPEL 流程描述符 (*bpel.xml*) 中定义的属性。
- WSDL:获取 WSDL 位置和 BPEL 流程端点位置。
- 传感器:获取为流程定义的传感器的概览。
- 源代码:查看流程的源代码。
在“实例”选项卡下,我们可以概览流程实例。我们可以归档和清除实例,移除已完成的流程实例,并监督那些尚未完成的实例。一个 BPEL 流程实例可以有以下状态
- 运行
- Completed
- 已取消
- 过时
对于我们的例子,我们可以看到有四个实例已成功完成
在“活动”选项卡下,我们可以按名称定位活动,并查找与实例和流程的关系。一个活动也可以有四种状态:开放、完成、取消或过时
部署流程
我们已经提到,可以使用 BPEL 控制台部署新流程。为此,我们首先必须生成流程 JAR 归档文件(使用 *bpelc* 或 *obant*)。然后我们点击“仪表板”或“BPEL 流程”选项卡上的“部署新流程”链接。我们指定流程 JAR 归档文件的完整路径,然后按“部署”按钮,如下所示
管理
BPEL 控制台还提供了 BPEL 域管理工具。可以通过按下屏幕右上角的“管理 BPEL 域”链接来访问这些工具,这将我们带到以下屏幕
管理控制台有以下重要选项
- 配置描述符(配置)
- 设置密码(密码)
- 域的 XPath 扩展函数列表(XPath 库)
- 设置日志记录配置(日志记录)
- 线程分配统计(线程)
- 运行时性能统计(统计)
- 适配器统计(适配器统计)
配置描述符使我们能够设置影响 BPEL 服务器操作的各种重要参数。这些参数包括
- 流程实例过时检查间隔(以秒为单位指定)
- 调用线程的分配和负载因子
- 实例缓存大小(最小值和最大值)
- 持久化和数据库参数
- 大型 XML 文档的管理
- 恢复代理设置
- 审计追踪和其他设置
我们还可以设置一个参数来定义服务器在执行 <assign> 活动时的行为。这个参数叫做“放宽 BPEL4WS 1.1 规范的 assign 规则”。BPEL 规范为赋值设定了某些规则(在第 4 章中讨论过)。例如,默认情况下不允许空赋值。如果这些规则对我们来说过于严格,我们可以通过将此参数设置为 true 来改变其行为。然而,不建议这样做,因为它可能会妨碍 BPEL 流程的可移植性。此参数的默认值为 false
。
性能调优
上述关于过时检查、线程和负载因子、缓存大小等的参数会影响 Oracle BPEL 服务器的性能。结合运行时性能统计(“统计”选项卡)和线程分配统计(“线程”选项卡),它们可以用来调整性能。运行时性能统计提供了关于流程执行时间的全面数据,以及按活动划分的时间明细,如下截图所示
线程分配统计信息提供了有关线程使用情况及其分配,以及 BPEL 流程请求数量的信息,如下一个截图所示
在创建 BPEL 流程测试实例时,Oracle BPEL 服务器提供了一个选项,通过该选项我们可以执行压力测试。压力测试使我们能够监控性能并对流程进行负载测试。通过性能统计数据,我们可以识别可能的瓶颈并优化性能。要执行压力测试,我们只需在“BPEL 流程/启动”选项卡中选择“执行压力测试”选项,如下截图所示。然后,我们必须指定分配给流程的并发线程数、测试的循环次数以及调用之间的延迟。我们还必须选择是否在运行压力测试前清除统计数据。通过这种方式,我们可以确定最合适的线程数
请注意,在 Windows 平台上,Oracle BPEL Process Manager 的默认下载版本捆绑了 Oracle Lite 作为数据库,这对于压力测试不会产生有意义的结果。在进行压力测试之前,BPEL 服务器应配置为使用生产级数据库(Oracle、SQL Server 或 DB2)。有关如何为除 Oracle Lite 之外的数据库服务器配置 Oracle BPEL Process Manager 的说明,请参阅 Oracle 文档和此链接。
域和管理
BPEL 控制台也可以用于服务器管理。我们可以通过点击主登录页面上的“转到 BPEL 管理”链接或访问此URL来访问 BPEL 管理。我们必须提供管理密码,初始密码为 oracle。BPEL 管理有三个主要功能
- 管理服务器相关参数和管理密码(服务器)
- 管理 BPEL 域(BPEL 域)
- 线程统计(线程)
服务器相关参数的管理
服务器相关参数的管理包括四个选项卡:配置、密码、日志记录和 WSIF
在“配置”中,我们可以修改各种服务器参数,包括 WSDL 的位置、通过 Connect 访问的旧服务器端口、J2EE 容器平台(OC4J、JBoss 或 WebLogic)、工作流模式(指定如何归档人工交互)、身份验证参数、数据源、BPEL SOAP 服务器 URL 以及 WSIF 提供商列表。我们还可以指定用户登录 BPEL 域时是否需要提供密码,以及他们是否可以看到可用域的列表。
在这里我们还可以将 BPEL 服务器模式从生产模式更改为开发模式。在生产模式下,如果我们尝试重新部署一个具有相同名称和修订标签的流程,服务器会询问我们是想替换现有版本还是使用不同的修订号。在开发模式下,流程会直接重新部署,不会有任何提示。可以通过修改 productionServer
属性来更改服务器模式。默认值为 true,用于生产模式。对于开发模式,应将其更改为 false。
在“密码”选项卡下,我们可以更改管理员密码。这应该在安装后立即完成。
日志记录选项卡使我们能够为各种服务器组件(如基础设施、服务、WSIF 等)设置日志记录级别。有多个日志记录级别可用,如 off、fatal、error、warn、info、debug 和 all。
WSIF 选项卡显示了支持的 WSIF 绑定。我们将在第 6 章中更多地讨论 WSIF 绑定。
管理 BPEL 域
我们已经提到 Oracle BPEL 服务器是按域组织的。由于域使我们能够逻辑地组织业务流程,因此在实际场景中推荐使用多个域。安装后,会自动创建默认域。可以在“BPEL 域”选项卡下创建其他域,如下截图所示
如果我们点击“创建新的 BPEL 域”链接,就可以创建新的域。我们必须指定域 ID、密码以及常规和事务性数据源的 JNDI(Java 命名和目录接口)地址
到此,我们结束了对 BPEL 控制台的介绍。在下一节中,我们将探讨 BPEL 设计器。
使用 BPEL 设计器进行图形化开发
像我们在前几章那样手动编写 BPEL 流程可能会变得耗时且复杂。因此,Oracle 开发了 BPEL 设计器,它支持 BPEL 流程的图形化开发。我们可以通过在图形环境中拖放活动来开发流程,而无需编写 BPEL 代码。BPEL 设计器简化了开发过程,并使其更快。除了拖放建模,它还提供了一个浏览器,我们可以通过它定位 Web 服务。它还提供了复制助手、XPath 编辑器、一键编译和部署流程到 BPEL 服务器的能力,以及其他一些有用的工具。Oracle BPEL 设计器原生支持 BPEL 1.1 版本,因此我们也可以用它来开发将部署到任何其他 BPEL 服务器的 BPEL 流程。
BPEL 设计器适用于两种环境
- JDeveloper BPEL 设计器,与 Oracle JDeveloper 集成
- Eclipse BPEL 设计器,Eclipse 平台的一个插件
两个版本的 BPEL 设计器功能相当,但在一些细节上有所不同。部分差异源于它们各自的宿主环境——JDeveloper 和 Eclipse。JDeveloper BPEL 设计器还为 Oracle 特有的功能提供支持,特别是传感器和适配器(文件、FTP、数据库等)。现在让我们来看看这两个版本的 BPEL 设计器,首先是 JDeveloper,然后是 Eclipse。
JDeveloper BPEL 设计器
与 JDeveloper 集成的 BPEL 设计器对于那些使用 JDeveloper 作为主要开发环境或计划这样做的开发人员特别有用。在开始使用 JDeveloper BPEL 设计器之前,请先熟悉 JDeveloper。更多信息请参考 Oracle 关于 JDeveloper 的文档或访问 Oracle。
创建新的 BPEL 流程项目,或加载、导入现有项目后,我们会看到 JDeveloper BPEL 设计器窗口。它显示了流程和合作伙伴链接的图形化结构
BPEL 设计器还提供了源代码视图,我们可以在其中直接编辑 BPEL 代码。在源代码视图中所做的更改会立即反映在 BPEL 设计器的可视化表示中,反之亦然。
请注意,本节的目的不是提供使用 JDeveloper BPEL Designer 的深入说明。相反,我们将重点介绍最重要的功能,包括导入现有 BPEL 流程、添加合作伙伴链接、创建变量、添加活动、复制变量、输入 XPath 函数以及使用 XSLT 映射器和验证浏览器。有关使用 JDeveloper 的详细说明,请参阅 Oracle 文档。
导入现有 BPEL 流程
首先,让我们看看如何将现有的 BPEL 流程导入到 JDeveloper 中。在“应用程序-导航器”中选择工作区后,我们从“文件”菜单中选择“导入”。在“导入”对话框窗口中,我们选择“BPEL 流程”。接下来,我们必须输入源文件名和路径以及项目名称。我们也可以选择性地选择项目目录
点击“确定”后,项目将被导入到选定的工作区并进行验证。JDeveloper BPEL 设计器 10.1.2 版本要求 <process>
根元素的 name 属性中指定的流程名称与存储源代码的文件名相同。如果名称不相同,我们必须手动将 BPEL 和 WSDL 文件添加到项目中。
合作伙伴链接和 Web 服务
要添加合作伙伴链接,我们必须在组件面板(屏幕右上角)中选择“流程活动”。然后我们选择 PartnerLink 并将其拖放到主设计窗口的“合作伙伴链接”部分。或者,我们可以在主设计窗口中右键单击并使用上下文菜单。一个对话框窗口会打开,我们必须在其中输入合作伙伴链接名称和详细信息,包括 WSDL 位置、合作伙伴链接类型和两个角色
如果我们不知道 WSDL 的确切位置,我们可以通过点击手电筒图标(左起第二个)来使用 WSDL 选择器。WSDL 选择器使用 UDDI 和 WSIL(Web 服务检测语言)来定位 Web 服务。以下截图显示了在本地 BPEL 服务器上选定的 Web 服务
变量
要向 BPEL 流程添加变量,我们有两种选择。我们可以手动添加,正如本节将要展示的,或者我们可以使用自动变量创建,我们将在下一节中看到。让我们看看如何手动添加或编辑现有变量。在 BPEL 结构导航器窗口(屏幕左下方),我们导航到变量。然后,我们或者点击一个现有变量,或者右键创建一个新变量。一个对话框窗口会打开,我们必须在其中指定变量名称和类型
要选择变量类型,我们可以通过点击手电筒图标来使用类型选择器。在这里,我们可以在合作伙伴链接或项目 WSDL 文件中浏览消息类型,并选择适当的类型
如果我们使用的是简单类型,我们可以从预定义的 XML 类型中选择
流程活动
添加流程活动非常直接。我们从“流程活动组件面板”中选择一个活动,并将其拖放到流程中。双击该活动后,会打开一个对话框窗口,我们在其中输入活动参数。“流程活动组件面板”提供了对标准 BPEL 活动的访问,如 <assign>、<compensate>、<empty> 等。它还提供了对 Oracle 特定活动的访问
- <flowN> 活动:提供对并行执行的支持
- Java 嵌入:允许将 Java 代码包含到 BPEL 中
- 通知:用于使用通知服务的向导
- 转换:允许访问 XSLT 引擎和 XSLT 映射器
- 用户任务:用于使用工作流服务的向导
我们将在第 6 章解释这些 Oracle 特有的活动。
现在,我们将演示如何添加一个 <assign> 活动。首先,我们从组件面板中选择“分配”流程活动,并将其拖放到流程中。然后会打开一个对话框窗口,我们必须在其中指定复制规则,如对面截图所示。在这里,我们可以编辑现有的复制规则或添加新规则
复制规则编辑器
为了在 <assign> 活动中添加新的复制规则或编辑现有规则,我们可以使用复制规则编辑器,它简化了该过程。使用此编辑器,我们可以通过在变量树中导航来创建 <from> 和 <to> 表达式。复制规则编辑器支持所有形式的 <assign>,其中变量、表达式、XML 片段或合作伙伴链接可以是赋值的源和/或目标。在复制变量时,我们可以浏览变量树,如背面截图所示。我们还可以使用 XPath 表达式构建器(在下一节中显示)输入表达式,输入 XML,或编辑/创建一个新的合作伙伴链接
XPath 表达式构建器
为了简化 XPath 表达式的创建或编辑,JDeveloper BPEL 设计器提供了 XPath 表达式构建器。通过按下 XPath 表达式构建器图标,可以从所有需要输入 XPath 表达式的对话框中访问它。在左上部分,我们可以浏览 BPEL 变量。在左下部分,我们可以选择各种函数。XPath 表达式构建器支持 XPath 1.0、XPath 2.0 和 Oracle 特定的 XPath 扩展函数,这些将在第 6 章中介绍。在右下部分,我们可以访问操作符。在表达式正文窗口中按下 Ctrl-Space,我们可以获得上下文敏感的帮助。对面的截图显示了我们如何使用构建器创建 XPath 表达式
XSLT 映射器
在 BPEL 流程中,我们经常需要转换 XML(存储在变量中)。例如,我们必须修改词汇表以使一个服务的输出适应另一个服务的输入。我们也可能希望将 XML 转换为其他标记语言。Oracle BPEL Process Manager 提供了一个内置的 XSLT 引擎,而不是使用 XPath。为了编写 XSLT 样式表,JDeveloper BPEL Designer 提供了一个内置的 XSLT 映射器,它极大地简化了映射定义。
要从 BPEL 流程中激活 XSLT 引擎,我们需要向流程中添加转换活动。我们可以通过从“流程活动组件面板”中拖放“转换”活动到流程中来完成此操作。此活动只是调用内置的 XSLT 引擎,这在第 6 章的“扩展函数和活动”部分有解释。
双击该活动后,会弹出一个转换窗口。在这里,我们选择源变量和目标变量的名称以及相应的部件。然后我们输入 XSLT 文件名
按下创建映射的图标后(左起第二个),XSLT 映射器窗口会打开。我们可以将元素从左侧拖放到右侧。我们还可以使用 XPath 函数,这些函数可以从窗口右上角的组件面板中选择(Oracle 支持 XPath 1.0、部分 XPath 2.0 和 Oracle 特定的函数)。最终会生成一个 XSLT 样式表,负责进行转换
通过 XSLT 映射器,我们使用多个函数来影响映射并转换源数据。我们还可以使用自动映射功能,该功能会尝试自动映射属性。通过这种方式,我们可以轻松开发 XSLT 转换,而无需熟悉 XSLT 语言。有关 XSLT 的更多信息,请参阅此链接。有关 XSLT 映射器的更多信息,请参阅 Oracle 文档。
BPEL 验证浏览器
为了简化查找和纠正错误及警告,JDeveloper 提供了一个 BPEL 验证浏览器。我们可以通过点击主设计窗口中的工具图标(左起第二个)来访问它。BPEL 验证浏览器窗口会打开。在截图中,我们可以看到 BPEL 流程中存在一个错误,与 assign 活动有关,其中没有指定复制规则。浏览器还建议了解决方案
构建和部署
BPEL 流程可以直接从 JDeveloper 构建和部署。要部署 BPEL 流程,我们必须在“系统 - 导航器”窗口中右键单击“集成内容”,然后选择“部署”。接下来,我们会看到一个连接到 BPEL 服务器的列表——在我们的例子中,我们使用默认连接 LocalBPELServer。然后我们可以选择我们想要部署的域,如下面的截图所示。要开始部署,我们必须输入该域的密码
或者,我们可以选择“调用部署工具”。然后会出现一个对话框窗口,我们必须在其中选择服务器连接、地址、域名和密码以及版本
从 JDeveloper 中,我们可以访问“部署描述符属性”窗口,在这里我们可以设置各种部署属性,这通常比手动编辑 *bpel.xml* 更容易。有关 *bpel.xml* 的更多信息,请参阅本章的“流程描述符”部分。要访问“部署描述符属性”窗口,我们必须点击图标(主设计窗口中从左数第一个)
Eclipse BPEL 设计器
Eclipse BPEL 设计器是一个 Eclipse 插件。因此,我们应该熟悉 Eclipse 平台的基础知识。有关详细的安装说明,请参考 Oracle 文档和教程,可以从此处下载。
以下截图显示了 Eclipse BPEL 设计器的主屏幕,其中打开了差旅流程。主窗口显示了流程的概览,包括合作伙伴链接和暴露的全局 XML 变量。此视图是 Eclipse 特有的,在 JDeveloper 中找不到
在此视图中,我们可以向流程添加合作伙伴链接和变量。BPEL 设计器还提供了源代码视图,我们可以在其中直接编辑 BPEL 代码。在源代码视图中所做的更改会立即反映在 BPEL 设计器的可视化表示中,反之亦然。
合作伙伴链接和 Web 服务
要向流程添加合作伙伴链接,我们只需点击主窗口右下角的“添加合作伙伴链接”。输入合作伙伴链接名称和 WSDL 位置后,设计器将帮助我们选择合作伙伴链接类型和角色。如下面的截图所示
如果我们不知道 WSDL 的确切位置,我们可以使用 UDDI 浏览器,通过它可以定位并选择合适的 Web 服务。这些 Web 服务可以位于本地 BPEL 服务器或远程 BPEL 服务器上。我们可以使用 WSIL 接口或使用内置服务,我们稍后会讨论。以下截图显示了根 WSIL 文档的视图
变量
通过点击“添加 XML 变量”链接,我们可以向流程添加一个全局变量。BPEL 流程中的变量可以在全局或作用域内定义。使用变量向导添加它们需要我们填写以下表单
我们必须输入变量名称和类型,类型可以是消息类型、元素或 XML 模式类型。我们可以从下拉列表中选择可用的类型。
XML 类型浏览器
从概览流程窗口中,我们可以通过点击“查看 XML 类型”链接来访问 XML 模式类型浏览器。XML 模式类型浏览器允许我们浏览不同命名空间中的模式。它还显示了 XPath 表达式,这对于 <assign> 活动和复杂模式特别有用
流程图
现在让我们从“概览”切换到“流程图”视图。BPEL 设计器将显示流程的图形表示,类似于我们在 BPEL 控制台中看到的内容。我们可以展开活动以查看更多详细信息。我们也可以点击每个活动,在右侧窗口——BPEL 检查器中查看详细信息。
要向流程添加新活动,我们可以从左下窗口的 BPEL 面板中拖放它们。在 Eclipse 中,BPEL 面板不会在一个窗格中显示所有活动。相反,它们被组织成五个组
- 核心 BPEL:包含标准的 BPEL 活动
- BPEL 扩展:包含 Oracle 扩展活动,如 <flowN> 和 <exec>
- 通知:提供对通知服务的访问
- 实验:提供对其他扩展活动的访问,例如 XSLT 转换
- 用户交互:提供对工作流服务的访问
流程图视图允许我们控制是开发标准 BPEL 流程还是包含特定扩展。下面的截图显示了打开了 BPEL 面板的流程图视图
复制规则编辑器
与 JDeveloper 类似,Eclipse 也提供了复制规则编辑器,它简化了在 <assign> 活动中添加新复制规则或编辑现有规则的过程。使用该编辑器,我们可以通过在变量树中导航来创建 <from> 和 <to> 表达式。复制规则编辑器支持源为变量、表达式或 XML 片段的 <assign>。我们可以使用变量和查询选择器来导航到变量、部分和查询
函数向导
要输入表达式,我们可以打开 BPEL 函数向导。该向导帮助我们编写 XPath 表达式。在第一步中,我们必须从可用函数列表中选择一个函数。请注意,它还提供了一些 Oracle 特定的函数(命名空间前缀不是 *bpws*),这些将在第 6 章中讨论
选择函数后,我们必须填写所需的参数。在我们的例子中,我们选择了 bpws:getVariableData()
函数,并且必须在第二步中指定变量、部分和查询
构建和部署
Eclipse BPEL 设计器提供了在 Oracle BPEL 服务器上直接编译和部署的功能。这可以从工具栏或 BPEL 菜单中完成。除了构建和部署,我们还可以验证我们的项目并打开 BPEL 控制台
有关 Eclipse 和 JDeveloper BPEL 设计器的更多信息,请参考 Oracle 和 Eclipse 文档。
摘要
在本章中,我们熟悉了 Oracle BPEL Process Manager 10g。我们看到 Oracle BPEL Process Manager 是一个基于 Java 的 BPEL 服务器,为 BPEL 提供了全面的支持。我们概述了 BPEL Process Manager 的架构,并回顾了主要特性,如脱水、版本控制和集群。我们熟悉了如何部署流程、部署描述符以及 BPEL 控制台。使用 BPEL 控制台,我们可以部署、测试、管理和调试 BPEL 流程。我们还熟悉了域。
为了进行 BPEL 开发,Oracle 提供了一个名为 BPEL 设计器的集成图形化开发环境,它有两个版本:JDeveloper BPEL 设计器和 Eclipse BPEL 设计器。BPEL 设计器提供了多个简化开发的工具,例如复制规则编辑器、XPath 表达式构建器、XSLT 映射器和 BPEL 验证浏览器。
在下一章中,我们将讨论 Oracle BPEL Process Manager 10g 第 2 版提供的高级功能。我们将概述 BPEL Process Manager 提供的扩展函数和活动。我们将详细介绍动态并行流和动态合作伙伴链接。我们将解释并演示如何使用 Web 服务调用框架将 BPEL 流程与 Web 服务之外的资源集成。我们还将探讨 Java 嵌入。最后,我们将概述 Oracle BPEL Process Manager 提供的三个重要服务:用于通过电子邮件和其他渠道发送和接收异步通知的通知服务,用于将人工交互纳入 BPEL 流程的工作流服务,以及用于用户认证和授权的身份服务。