BPEL 设计器开发人员指南
由
维护
最后更新:2008 年 4 月
本文适用于 NetBeans IDE 6.1 发行版
目录
对部署的业务流程应用程序进行测试时,涉及使用作为远程合作伙伴服务的测试用例,这些服务会将 SOAP 消息发送到 BPEL 服务引擎运行时。
简言之,交互流程如下:BPEL 服务引擎运行时接收 SOAP 消息,创建一个 BPEL 流程实例并开始执行该实例。一个 BPEL 流程可以包含多个运行实例。BPEL 服务引擎运行时接收消息,并使用关联将其传送到相应的流程实例。如果尚未建立实例,则新建实例。
要测试和运行部署的业务流程应用程序,需配置测试用例,作为远程合作伙伴服务,将 SOAP 消息发送到 BPEL 服务引擎运行时。
创建和运行测试用例
要获得测试结果,必须执行以下操作:
- 添加测试用例并将其绑定到 BPEL 操作。
- 设置测试属性。
- 定制测试输入。
- 运行测试程序。
在执行本节上述所有步骤之前,假定已经完成以下操作:
添加/绑定测试用例
添加测试用例并将其绑定到 BPEL 操作:
- 在 IDE 的“项目”窗口中,打开复合应用程序项目,显示其 Test 文件夹。
- 右键单击 Test,然后选择弹出式菜单项“新建测试用例”。
启动“新建测试用例”向导。
- 在“请输入测试用例名称”步骤中,输入测试用例名称,然后单击“下一步”按钮。
- 在“选择 WSDL 文档”步骤中,打开 BPEL 模块项目,选择包含要测试的操作的 .wsdl 文件,然后单击“下一步”按钮。
- 在下一步中,选择要测试的操作,单击“完成”按钮。
在项目树中的 Test 文件夹下新建一个文件夹(以大写字母 T 的形式),其包含两个文件:Input.xml 和 Output.xml。Input.xml and Output.xml.
注意:如果在“文件”窗口中查看该测试用例,会看到另一个文件 Concurrent.properties。
设置测试属性
设置测试属性:
- 在“项目”窗口的 Composite Application 项目节点下面,右键单击测试用例节点,从弹出菜单中选择“属性”。
- 请按照以下方式设置测试用例的属性:
- 描述:string
用户输入的文本可帮助用户了解该测试的相关信息。
- 目标:URL( .wsdl 文件的 <soap:address location="THIS"> 标记)
标识要测试的 Web 服务的位置。
- SoapAction(默认值:空)
- 输入文件(只读;由系统生成)
输入文件名称。该文件包含测试用例的输入数据。
- 输出文件(只读;由系统生成)
输出文件名称。该文件包含测试用例的输出数据。
- 并发线程:integer;默认值为 1
每个线程可以多次调用测试用例(请参阅以下属性)。因此,如果 conc=2 和 inv=3,那么将运行 6 次测试用例(两个线程,每个线程运行 3 次)。
- 每个线程调用测试用例的次数:integer;默认值为 1
每个线程调用测试用例的次数。
- 测试超时(秒):integer;默认值为 30
每个线程必须完成的时间。如果线程没有在分配时间内完成,则抛出异常。
- 计算吞吐量:boolean
如果选中此复选框,则会计算吞吐量的统计信息。示例:假如在测试中指定了2个线程,每个线程调用3次测试用例,并且假如15秒调用了 6 次测试用例,那么统计信息将报告调用一次测试用例所花费的时间平均为 2.5 秒。
- 比较类型:下拉列表包括以下选项:
-
- identical:将输出和实际输出视为字符流。
- binary:将输出和实际输出视为字节流。
- equals:将输出和实际输出视为 XML 文档。
- 功能状态:下拉列表包括以下选项:
-
- progress:将测试完成标记为 "success",不考虑实际结果。
- done:记录测试的实际结果。
定制测试输入
定制测试输入:
- 在“项目”窗口中,展开 Test 节点和表示特定测试用例的节点。
- 右键单击 Input.xml,然后单击“编辑”选项。
- 根据需要修改内容。例如,无论在何处看到 <value>?string?</value> ,在 ?string? 内单击,并并将其替换为任意长度的字符串。但是,在这些替换字符串内,不要包含字符 <(小于号)或 &(与号),除非在 XML 语义中使用这些字符。
- 如果满意,请单击“保存”按钮。
- 右键单击 Output.xml,然后单击“编辑”,检查内容:
- 它是一个空文件。这是一种特殊状态,在测试运行时触发特殊操作。
- 每次运行测试时,将当前输出和 Output.xml 的内容进行比较。如果检测到任何不同,将保存在测试用例文件夹下的 Actual_yymmddhhmmss .xml 文件中。但在特殊情况下,当 Output.xml 为空时,输出内容会写入到 Output.xml 中。
- 在首次运行后的每次运行中(假定 Output.xml 不再为空),将会保留其内容。换句话说,新结果不会覆盖以前的输出结果。
运行测试用例
运行单个测试用例:
- 在“项目”窗口,展开 Composite Application 项目 > Test ,右键单击特定测试用例的节点,从弹出菜单中选择“运行”。
运行项目中的所有测试用例:
- 右键单击 Composite Application 项目节点,从弹出菜单中选择“测试项目”。
查看测试用例结果
- 第一次运行时正确地报告:测试失败。因为输出结果与空的 Output.xml 文件不匹配,该文件的空内容将被替换为第一次运行的输出结果。
- 在 JUnit 测试结果窗口中显示测试结果,该窗口在运行测试用例时会自动打开。
- 如果在不改变输入的情况下再次运行测试,则第二次和后续运行都会报告测试成功,因为输出结果与 Output.xml 的内容相匹配。
- 如果改变 Input.xml 中的值并重新运行测试,那么:
- 如果将 “feature-status” 属性设置为 progress,那么即使出现不匹配,也会指示测试成功。
- 如果将 “feature-status” 属性设置为 done,那么出现不匹配时将指示测试失败。
- 如果右键单击测试用例节点,在弹出菜单中单击“比较”,窗口将显示最新输出和 Output.xml 内容之间的不同。
调试 BPEL 流程和调试 Java 应用程序遵循相同的一般原则。调试 BPEL 流程通常采用以下方法:在源代码中设置断点,然后在调试会话中分步执行流程。BPEL 调试器将显示 BPEL 流程的执行,并可以查看和更改变量,监控执行表达式的结果,以及使用故障断点监控抛出故障之前的变量状态。
调试 BPEL 流程的步骤
调试 BPEL 流程的主要步骤是:
- 确认启动了 GlassFish 应用服务器。
- 创建测试用例。
对于示例流程,测试用例是自动创建的;对于新项目,则需要创建至少一个测试用例。
- 在“源”视图或“设计”视图中打开 BPEL 流程文件。
- 在代码或关系图中设置断点。(可选)在流程中为 XPath 表达式添加监视,或者添加故障的断点。
- 启动调试会话。观察“BPEL 调试器控制台”窗口,确认调试会话已启动。
- 在调试会话内,运行一个或几个测试用例。
- 在“设计”视图的关系图或“BPEL流程执行”窗口中查看 BPEL 流程的执行情况,在“BPEL 流程实例”窗口中查看 BPEL 流程实例的运行情况。
- 当实例在断点处停止时,逐步执行代码或关系图,在“局部变量”窗口中检查变量值,或在“监视”窗口中观察 XPath 表达式的值。
- 完成调试会话。
启动和完成 BPEL 调试会话
在将 BPEL 调试器连接至 BPEL 服务引擎时,会启动调试会话。在指定时间内使用 BPEL 服务引擎上只能运行一个调试会话。
调试会话启动后,可以分步执行流程实例,监视在“局部变量” 和 “监视”窗口中的 BPEL 变量值和 XPath 表达式值。可以在“设计”视图关系图区域监控调试器会话内 BPEL 流程的执行情况。正在执行的活动作为当前的执行位置在关系图中高亮显示。“BPEL 流程执行” 窗口也显示 BPEL 流程的执行情况。
准备调试环境:
- 在“服务”窗口中,确保 GlassFish V2 应用服务器正在运行。如果应用服务器包含子节点,且其标有绿色三角形,表明应用服务器正在运行。
如果服务器未启动,右键单击它并从弹出菜单中选择“启动”。有关如何启动应用服务器的详细信息,请参阅 BPEL 服务引擎 部分。
- 在 IDE 的“源”视图或“设计”视图中,打开 BPEL 流程。
- 在 BPEL 流程中设置断点。
- 要在“源”视图中设置断点,请在要设置断点的行旁边单击鼠标左键。

单击查看大图
- 要在关系图中设置断点,请切换到“设计”视图,右键单击元素,然后从弹出式菜单中选择“切换断点”。在设置了断点的元素上方将显示一个红色方块。
- “导航器 BPEL 逻辑视图”中的元素也可以使用“切换断点”弹出式菜单命令。对于设置了断点的元素,“导航器”将显示一个小红色方框(ReceiveItinerary):
- (可选)可以对 XPath 表达式添加监视。要添加监视,请复制要监视的 XPath 表达式,在主菜单中选择“运行”>“添加监视”选项,然后将该表达式粘贴到“监视表达式”字段中。单击“确定”按钮。
注意:也可以添加代码中不存在但从调试角度来看非常有价值的 XPath 表达式。
在 BPEL 引擎上启动和完成调试会话:
- 在“项目”窗口中,右键单击要调试的复合应用程序节点,从弹出式菜单中选择“调试项目(BPEL)”。
IDE 将在 BPEL 服务引擎上建立调试会话。观察“BPEL 调试器控制台”窗口进行确认。连接可能需要一段时间才能完成。当连接成功完成时,在“会话””窗口中包含新会话,并且在“BPEL 调试器控制台”中将显示以下消息:
11:35:17 Connecting to localhost:3343
11:36:19 Debug session started
注意:“调试项目(BPEL)”命令将执行以下操作:
- 支持使用 BPEL 服务引擎进行调试(将 BPEL 服务引擎的 DebugEnabled 属性设置为 true)。
- 编译复合应用程序项目和添加到该项目中的所有 JBI 模块。
- 将复合应用程序项目部署到 BPEL 服务引擎。
- 通过将 BPEL 调试器连接到 BPEL 服务引擎来启动调试会话。
因此,无论何时启动调试会话,都可以确定在BPEL 服务引擎中部署了 BPEL 流程的最新版本。
现在,可以运行测试用例并监控 BPEL 流程的执行情况,直到它停止或到达断点。当流程执行时,在关系图和“BPEL流程执行窗口”中都显示当前的上下文。
如果存在几个调试会话(您可能同时运行了一个 Java 调试会话),且要改变当前会话,请在“会话”窗口中双击该会话的名称。或者,右键单击要设置为当前会话的会话,然后选择“设置为当前会话”选项。此会话将成为当前会话,同时“BPEL 流程实例”、“监视”和“局部变量”窗口也改为显示与新当前会话有关的数据。
当要完成调试会话时,可以打开要停止的会话的弹出菜单,在“会话”窗口选择“完成”,或者选择工具栏上的“完成调试器会话”图标。在“BPEL 调试器控制台”中将显示调试会话已完成的消息。
-
要结束所有的调试会话,请在“会话”窗口中右键单击任何会话,然后选择“全部完成”。
使用断点调试 BPEL 流程
断点用于命令 BPEL 调试器在 BPEL 流程的指定地方停止执行。当 BPEL 流程到达断点时,将暂停执行,此时可以进入代码,“BPEL 流程实例”窗口中改变当前流程,在“BPEL 流程执行” 窗口和“设计”视图中跟踪流程实例的执行情况,在“局部变量”窗口中检查变量值,在“合作伙伴链接”窗口中检查合作伙伴链接,在“监视” 窗口中查看 XPath 表达式的值。
在抛出错误之前,也可以使用故障断点检查变量值。
要查看和组织当前在 IDE 中设置的所有断点,请选择“窗口”>“调试”> “断点”(Alt-Shift-5) ,打开“断点”窗口。可以看到每个断点所在的文件名称和所在的行。在“断点”窗口,可以通过选择或者删除“Enable”栏中的复选框来启用或者禁用断点。
在 BPEL 流程中设置断点:
- 在 IDE 的“源”视图或“设计”视图中,打开 BPEL 流程。
- 执行以下操作之一:
- 在“源”视图中,单击要插入断点的行的左边区域。
- 在“设计”视图中,右键单击要插入断点的元素,选择“切换断点”(Ctrl-F8)。
在“设计”视图中,设置了断点的元素顶部将显示一个小红色方块。在“源”视图中,设置了断点的代码行的左边区域将显示一个红色方块。
- 还有一种方法,可以在“导航器”窗口的“BPEL 逻辑”视图设置和删除断点,具体方法是在弹出菜单中选择“切换断点”。在“导航器”窗口中设置了断点的元素附近显示有一个红色方块。
一旦项目运行到断点处将暂停执行。可以使用“运行”菜单命令或者工具栏中的按钮管理后面的执行情况。
在调试会话中可以使用以下命令:
要使用这些命令,必须启动调试会话和运行测试用例。
- Pause。 一旦用户激活这个动作,流程将继续执行直到到达可以停止的第一个元素。如果没有当前流程实例,调试器将等待任意流程实例的第一个执行事件。
- Continue (Ctrl-F5)。 当流程到达断点或者暂停时,可以使用 Continue 命令。该动作可以使当前流程实例继续运行,直至遇到下一个断点或者实例执行结束为止。实例状态将变为“正在运行”。
- Step Into (F7)。执行下一个 BPEL 活动。使用此命令时,当前行的指示符将向前移动,关系图中将高亮显示当前位置,并且“BPEL 调试”窗口也将相应地改变内容。如果当前活动中有任何封闭元素,流程将执行第一个封闭元素。有时在关系图上不可见,但是在“BPEL 流程执行”窗口中可以看到。例如,如果“赋值”活动内包含 <copy> 元素,那么在赋值活动中,流程将执行 Copy。
- Step Over (F8)。 执行与当前活动相同级别的下一个 BPEL 活动。如果当前活动有任何封闭元素,它们将会一起执行,而不会暂停。
- Step Out (Ctrl-F7)。执行比当前流程更高级别的活动。例如,“赋值”活动内部有几个 Copy 元素。如果 Copy 元素中的一个元素是当前活动,那么执行 Step Out 将直接移动到“赋值”级别的下一个元素,而无需执行全部 Copy 元素。
- 运行到光标(F4)。运行 BPEL 流程到“导航器”窗口(BPEL 逻辑视图)或关系图(“设计”视图)中的所选位置,或者在“源”视图中的光标位置。当流程实例到达光标位置时,将暂停运行。
要在 BPEL 流程中删除断点,请执行以下操作之一:
- 在“源”视图中,单击包含断点行的左边区域。
- 在“断点”窗口,右键单击要删除的断点,选择“删除”选项。在弹出菜单中选择“删除全部”将删除在 IDE 中当前设置的所有断点。
- 在“设计”视图,右键单击标有红色断点的元素,在弹出菜单中选择“切换断点选项”。
要禁用断点,请执行以下操作之一:
- 在关系图中,单击指示断点的红色方块标记。这样只是禁用了断点,而没有完全删除断点。
- 在“断点”窗口,清除要禁用断点的“Enabled ”复选框。
对断点执行组操作:
工具栏中包含三个对断点执行组操作的按钮。
监控 BPEL 流程的执行情况
当运行流程到达断点时,“设计”视图将高亮显示调试器的当前位置,并使用颜色区分 BPEL 活动的不同状态。在流程执行时,关系图中活动的颜色和图标都会实时更新以反映执行的进度。
在关系图中,使用以下符号:
- 绿色(发光)此断点用于设置到达的活动。
- 灰色(淡出效果)从未执行过的活动。
- 绿色三角。正在执行的活动。
- 蓝色三角。已经成功完成的活动。

单击查看大图 还可以在“BPEL 流程执行” 窗口监控当前 BPEL 流程实例的执行情况(如下所示)。
当调试会话启动时,IDE 将在编辑区域下面显示调试器窗口。“会话”、“BPEL 流程实例”、“BPEL 变量”和“BPEL 流程执行”窗口均包含在当前调试会话中运行的 BPEL 流程的相关信息。
如果未显示调试器窗口,请选择“窗口”>“调试”> “BPEL”>“窗口名称”(例如,“窗口”>“调试”> “BPEL”>“BPEL 变量”)。
“断点”和“监视”是标准的 IDE 调试器窗口。它们显示了在 IDE 中设置的所有断点和监视。
“会话”窗口列出了当前打开的所有调试会话,包括 Java 和 BPEL 调试会话。对于 BPEL 服务引擎,只能启动一个会话。但是,“会话”窗口还显示了其他打开的调试会话,如 Java 会话。在所有打开的调试会话中,只能有一个调试会话是当前会话,并且以粗体显示。其他调试器窗口,如“BPEL 流程实例”、“BPEL 流程执行”和“BPEL 变量”,仅显示与当前调试会话相关的数据。
为每个会话提供的信息包括:
- 名称。会话名称。
- 状态。会话的当前状态。会话可能正在启动或正在运行。
- 语言。在此会话中调试的应用程序语言。
可以在弹出式菜单中对会话执行以下操作:
- 设置为当前会话。将选定会话设置为当前会话。
- 完成。完成选定会话。
- 全部完成。完成所有调试会话。
“BPEL 流程实例”窗口列出了在 BPEL 服务引擎上部署的所有 BPEL 流程实例和它们的当前运行实例。对于每个流程实例的关联设置和故障也作为子结点列了出来。
如果当前会话不是 BPEL 调试器会话,则此窗口为空。当在 BPEL 服务引擎上启动调试会话,或者 BPEL 调试器会话是当前会话时,会填充“BPEL 流程实例”窗口。
对于每个流程实例,显示的信息包括实例名称、唯一的实例 ID 和它的状态。流程实例可以处于以下某种状态:
- 正在运行。实例当前正在 BPEL 引擎上执行。
- 暂停。由于某种原因实例暂停执行。例如,流程实例执行到一个断点。
- 未知。此实例状态是未知的。
当前流程实例以粗体显示。当流程实例执行到断点或者手动将其设置为当前流程实例时,它称为当前流程实例。
要使流程实例成为当前流程实例,请执行以下操作之一:
- 双击该流程实例。
- 右键单击该流程实例,从弹出菜单中选择“设置为当前流程实例”选项。
要终止流程实例,请执行以下操作:
- 右键单击该流程实例,从弹出菜单中选择“终止”选项。
将终止该流程实例并从列表中删除。
关联设置和故障信息
对于关联设置节点,在流程执行期间出现的信息。
对于每个流程实例的关联设置,显示了它包括的属性列表。显示了这些属性的类型和值信息。查找关于关联设置、属性和属性别名的更多信息,请参阅 理解关联。
在流程执行期间,还会填充故障节点。当在流程中抛出一个故障时,将添加一个该故障名称的子节点。如果有的话,提供故障数据。
“局部变量”窗口显示局部变量结构,以及当前流程实例和当前位置的值。当前位置是指当前流程实例暂停时所在的位置。当改变当前流程实例时,“局部变量”窗口中的记录将会更新,反映新的当前流程实例和新的当前位置。
局部变量显示为树型结构。对于每个变量,提供的信息包括变量名称和值。
在“局部变量”窗口中,可以执行以下操作:
- 查看变量结构。方法是展开树中的变量节点。
- 查看和编辑变量值。要编辑变量值,单击省略号按钮 (...)并在编辑器窗口中输入新值。
- 查看和修改变量的XML数据方法是单击变量的省略号(...) 按钮,在“值”栏中 XML 数据输入项。
“监视”窗口显示要监视的 XPath 表达式的列表。可以在调试会话之前或期间显式地添加监视。“监视”窗口显示表达式及其值。根据流程逻辑,随着流程的执行,表达式的值可能改变。
要在 BPEL 流程中设置监视,请执行以下操作:
- (可选)确保“监视”窗口可见,否则,选择“窗口”>“调试”>“监视”(Alt-Shift-2) 来打开“监视”窗口。
- 如果要在 BPEL 流程中输入 XPath 表达式,请使用以下一种方法复制它:
- 在“源”视图,复制要监视的 XPath 表达式。XPath 表达式位于 <condition>标签内。
- 在“设计”视图,选择包含表达式的元素,在“属性”窗口的“条件”行上赋值表达式。
- 在“监视”窗口内右键单击,选择“新建监视”。
- 在“新建监视”对话框中的“监视表达式”字段,执行以下操作:
- 粘贴已经复制的 XPath 表达式。
- 输入符合 XPath 1.1 规则的任何有效表达式。
- (可选)如果需要,添加更多的监视。
- 确保监视会话正在运行,且在执行测试。
- 当流程实例执行到断点,变成暂停状态时,在“监视”窗口的“值”栏中检查被监视的表达式值。
“BPEL 流程执行”窗口将显示 BPEL 调试器中的当前 BPEL 流程的执行进度。当改变当前流程实例时,将更新“BPEL 流程执行”窗口中的流程树,以反映新的当前流程实例和新的当前位置。
在“BPEL流程执行”窗口中,显示 BPEL 活动的状态用到以下颜色。
- 绿色。活动此刻正在执行。
- 灰色。活动尚未执行。
- 黑色。活动已经执行。
“BPEL 流程执行”窗口显示以下信息:
- 名称。活动名称。
- 线程。 执行活动的线程。对于尚未执行的节点,不提供线程信息。
- 行。包含文件路径和文件中活动的行号。
- XPath。 显示指向活动的 XPath 表达式。
注意:在“BPEL流程执行”窗口中,只能查看执行 BPEL 流程的执行进度。在此窗口中不能执行任何操作。
“BPEL 合作伙伴链接”窗口列出了在 BPEL 流程中定义的所有合作伙伴链接。
对于合作伙伴链接,提供的信息包括:
- 角色
- 合作伙伴角色(只限于两种方法操作)
- 断点。只可以在合作伙伴链接动态地定义端点信息。有关更多信息,请参阅 动态寻址。

BPEL 调试器控制台消息
在 BPEL 调试器控制台中将显示以下消息:
- Connecting to <host>:<port>
调试器正在尝试连接 BPEL 服务引擎。
- Debug session started
调试器已成功连接 BPEL 服务引擎,并且已启动调试会话。
- Unable to start a debug session :Unable to connect to <host>:<port> :Connection timed out:connect
如果显示此消息,请确保:
- GlassFish V2 应用服务器正在运行。
- BPEL 服务引擎已启动。
- BPEL 服务引擎的 DebugEnabled 属性设置为 true。
- 主机名是运行要建立连接的 GlassFish V2 应用服务器的计算机的主机名(默认为 localhost)。
- 端口值与要建立连接的 BPEL 服务引擎的 DebugPort 属性相同(默认为 3343)。
- Unable to start a debug session :Already connected to <host>:<port>
已在运行一个与此特殊服务引擎连接的调试会话。
- Debug session terminated :Target disconnected
调试器与服务器的连接中断。请检查服务器是否正在运行以及网络是否正常。
- Stop connecting
在调试会话进行连接时显式地将其终止。
- Debug session finished
在调试会话运行时显式地将其终止。
返回顶部