开发一个简单的同步 BPEL 流程
本教程概述示例项目 SynchronousSample,演示如何使用 NetBeans IDE 6.0 以及所有必要的运行时部署、执行、测试同步 BPEL 流程。
同步 BPEL 流程表示简单的同步流程。此过程接收输入消息并将此消息同步发回。客户机通过调用请求-响应操作启动同步过程。调用同步过程之后,客户机被阻塞,直到此过程完成并返回结果为止。
在本教程中,将使用一个简单的 BPEL 项目(名为 SynchronousSample)和一个复合应用程序(名为 SynchronousSampleApplication)。项目包括 WSDL 和 XML 模式文件、部署描述符和用于测试的输入文件。此过程的 web 服务接口是单个同步操作。
预计时间:30 分钟
教程要求
在开始之前,确保对本节的系统要求有所了解。
前提条件
本教程假设您已经具备 Java 语言、平台以及 NetBeans IDE 的基础知识或编程经验。
系统要求
本教程假定您的系统满足 NetBeans IDE 6.0 发行说明 的“系统要求”部分所指定的要求。
本教程所需的软件
开始之前,需要在您的计算机中安装以下软件:附带 SOA 及 GlassFish 应用服务器的 NetBeans IDE 6.0,可通过 NetBeans IDE 6.0 下载页面 获得,需选中 All 选项。
回到顶部
配置和启动 GlassFish 应用服务器。
安装完整的 NetBeans 6.0 下载时,GlassFish 应用服务器将一并安装。NetBeans IDE 将根据需要自动启动应用服务器。
启动 GlassFish 应用服务器:
- 如果“服务”窗口不可见,则选择“窗口”>“服务”选项。
- 在“服务”窗口中,展开“服务器”节点。
“服务器”节点中应该包含 GlassFish Application Server 子节点。如果未出现 GlassFish Application Server 节点,请参阅 配置 GlassFish 应用服务器。

- 右键单击 GlassFish 应用服务器节点并选择“启动”。
“输出”窗口将显示关于应用程序启动的日志信息:如果“输出”窗口不可见,请选择“窗口” > “输出” > “输出”选项。
如果 Application server startup complete 消息出现在输出窗口中,则表示应用服务器正在运行。
注意: 如果 GlassFish 应用服务器节点上出现了一个绿色的箭头标志,则表示服务器正在运行。
注意:在 GlassFish 应用服务器中部署应用程序将自动启动 GlassFish 应用服务器。这样,我们就不需要手动启动该应用服务器。
注意:以下步骤将演示如何配置 NetBeans 6.0 IDE 使用另一个版本的(GlassFish V2)应用服务器。
配置 GlassFish V2 应用服务器:
您可能希望使用不同版本的应用服务器,而不是 NetBeans 6.0 所提供的版本。比如说,您可以从 GlassFish 社区 站点下载并安装一个更新版本的 GlassFish V2。
以下步骤将演示如何配置 NetBeans 6.0 IDE 使用另一个版本的(GlassFish V2)应用服务器。假定您已经下载并安装了另一个版本的应用服务器。
- 在“服务”窗口中,右键单击“服务器”节点并从弹出菜单中选择“添加服务器”选项。
此时将打开“添加服务器实例”对话框。
- 在“选择服务器”页面中,从拉列表中选择 GlassFish V2。
- 单击“下一步”。
此时将打开“平台文件夹位置”页面。
- 在“平台位置”字段中,使用“浏览”按钮导航到应用服务器的安装位置并选择该位置。
如果将 GlassFish 应用服务器安装在默认位置,那么可以使用 表 1 作为查找安装位置的向导。否则,导航到 GlassFish V2 应用服务器的安装位置。
表 1:应用服务器的默认安装目录
Solaris OS
Linux |
root |
/opt/glassfish-v2 |
/opt/SUNWappserver |
Solaris OS
Linux |
user |
~/glassfish-v2 |
~/SUNWappserver |
| Mac OS X |
N/A |
/Applications/NetBeans/glassfish-v2b58g |
/Applications/NetBeans/NetBeans 6.0 |
| Windows |
N/A |
C:\Sun\AppServer |
C:\Sun\AppServer |
- 选中“注册本地域”单选按钮,然后单击“下一步”。
- 输入域管理员的用户名和口令。
如果在安装时接受了默认值,则用户名和口令分别为 admin 和 adminadmin。
- 单击“完成”。
回到顶部
打开 SynchronousSample 项目
- 从 IDE 的主菜单中,选择“文件”>“新建项目”。
此时将打开“新建项目”向导。
- 在“类别”列表中,选择 Samples > SOA。
- 在“项目”列表中,选择 Synchronous BPEL Process。

- 单击“下一步”。
- 在“项目名称”字段中,键入 SynchronousSample。

- (可选)在“项目位置”字段中,使用“浏览”按钮导航到 IDE 将要存储 EJB 项目文件的位置并选择它。
- 单击“完成”。
“项目”窗口现在包含两个项目节点:一个对应于 BPEL 项目(名为 SynchronousSample);另一个对应于复合应用程序(名为 SynchronousSampleApplication)。
回到顶部
在“项目”窗口中浏览 BPEL 项目
- 在“项目”窗口中,展开 SynchronousSample 节点,然后再展开流程文件节点。
流程文件节点包含以下项:
- SynchronousSample.bpel,BPEL 流程
- SynchronousSample.wsdl,过程 web 服务接口
- SynchronousSample.xsd,模式文件

- 双击 SynchronousSample.bpel 节点。
请注意以下内容:
- BPEL 设计器包含 SynchronousSample.bpel 的选项卡。
- SynchronousSample 图显示在设计视图中。
“设计”视图是业务流程的可视设计器。在此视图中,您可以按可视方式对业务流程进行建模。BPEL 设计器将自动生成对应于可视化设计的 BPEL 代码。
- BPEL 元素设计视图 Palette 在右边打开。
- “导航”窗口显示了 BPEL 流程的 BPEL 逻辑视图。

单击查看大图
回到顶部
在“源代码编辑器”中浏览 WSDL 编辑器
在 WSDL 编辑器中,可以创建并编辑 Web Services Description Language (WSDL) 文件。WSDL 编辑器包括“设计”视图、“源”视图和“合作伙伴”视图。
查看 WSDL 视图:
- 在“项目”窗口中,双击 SynchronousSample.wsdl 文件。
此 WSDL 文件在 WSDL 视图中打开。
- 在 WSDL 视图中,WSDL 文件显示为树组件,在其中可以配置文件的元素和属性。

单击查看大图
查看“源”视图:
- 单击“源”按钮。
底层 XML 源码显示在“源”视图中。

单击查看大图
查看“合作伙伴”视图:
- 单击“合作伙伴”按钮。
WSDL 文件中表示合作伙伴之间交互的抽象元素显示在“合作伙伴”视图中。

单击查看大图
回到顶部
将 If 活动添加到 Design 视图中
- 在“项目”窗口中,展开 SynchronousSample 节点、流程文件 节点,并双击 SynchronousSample.bpel 节点。
IDE 在“设计”视图中显示 SynchronousSample.bpel 图。
- 在 Palette 的“结构化活动”部分中,选择 If 图标,并将您的选择拖至 Start 和 Assign 活动之间的设计区域中。
IDE 提供了可视化的提示来告诉您选项的放置位置。
此操作将名为 If1 的 If 活动放在设计视图中。

- 在“设计”视图中,单击 If1 活动。
“BPEL 映射器”窗口显示在 IDE 底部。
如果 BPEL 窗口不可见,则选择“窗口”>“BPEL 映射器”选项。使用 BPEL 映射器定义布尔条件。注意,BPEL 映射器顶部的部分组成菜单栏。

- 在菜单栏上,单击“运算符”并选择 ==EQUAL 方法
。
== Equal 方法显示在 BPEL 映射器的中部,叫做映射窗格。
- 在菜单栏上,单击“字符串”方法并从“字符串”下拉列表中选择 String Literal
。
String Literal 框显示在“映射器”的映射窗格中。
- 在 string literal 方法中键入Hello World 并按下回车键。
- 将 string literal 框和 == Equal 框移动到映射窗格的中部。

- 在 BPEL 映射器的“源”树窗格中,在 Variables 下展开 inputVar > inputType。
paramA 出现在 inputType 下。
- 将 paramA 拖至 == Equal 方法的 any1 部分上。
- 选择 string literal 框右边的小方块。当手形鼠标出现时,将连线拖至 == Equal 方法的 any2 部分。
- 从 == Equal 方法中,将返回的布尔值拖至 Result 中。

回到顶部
将 Assign 活动添加到“设计”视图中
- 在“设计”视图中,将现有 Assign1 活动拖至 If1 活动中。将此 Assign 活动放置在 If1 活动区域的两个 X 图标之间。

- 从 Palette 的 Basic Activities 部分中,将 Assign 活动拖至“设计”视图中,并将其放置在现有 Assign 元素的右边。

- 选择新的 Assign2 活动。
- 从映射器的菜单栏中,单击“字符串”方法并从“字符串”下拉列表中选择 concat
。
concat 方法显示在 BPEL 映射器的映射窗格中。
- 右键单击 concat 框中的第一个字段,并从弹出菜单中选择 Add Literal。
- 在第一个字符串中键入 Hello 和空格,并按 Enter。
- 从 BPEL 映射器的“源”树窗格中,展开 inputVar > inputType。
- 将 paramA 拖至 concat 的 string2 部分中,即第二个字段。
- 从 BPEL 映射器的“目标”树窗格中,展开 outputVar > resultType。
- 将 concat 方法的返回字符串拖至 outputVar > resultType 下的 paramA 上。
这将字符串 Hello 连接到输入中,并将语句复制到输出中。

- 按 Ctrl-S 保存编辑。
回到顶部
将项目部署到应用服务器中
部署项目将使应用服务器可以使用服务组装功能,从而允许服务单元运行。
部署复合应用程序:
- 如果未显示“输出”窗口,请选择“窗口”>“输出”。
- 右键单击 SynchronousSampleApplication 项目节点,然后选择“部署项目”。
- 在警告对话框中,请确保选择了 GlassFish V2 服务器,然后单击“确定”。
注意,一个与下列消息相似的消息会出现在“输出”窗口:
BUILD SUCCESSFUL。

回到顶部
创建测试驱动器
要增强复合应用程序的功能,我们可以添加一些测试用例并绑定到操作,然后提供输入并使用测试程序。
- 在“项目”窗口中,展开 SynchronousSampleApplication 项目节点,右键单击测试节点,然后从弹出菜单中选择“新建测试用例”。
此时将打开“新建测试用例”向导。
- 在“名称”中输入:MyTestCase 并单击“下一步”。
- 展开 SynchronousSample - Process Files,选择 SynchronousSample.wsdl 并单击“下一步”。
- 选择 operation1 并单击“完成”。
注意,在项目树中,在测试下创建了新文件夹 MyTestCase,其中包括两个文件:Input 和 Output。

- 双击 Input 并将其内容修改如下:
- 在 Body 内容中查找下列行:
<syn:paramA>?string?<syn:paramA> 。
- 将 ?string? 替换为 Sherry。
此行应如下:
<syn:paramA>Sherry<syn:paramA>。
- 要保存更改,从 IDE 的主菜单中,选择“文件”>“保存”。
- 双击 Output.xml 检查其内容。
注意,运行测试之前,此文件为空。
每次运行测试时,当前输入与 Output 的内容进行比较。当 Output 为空时,Input 复制到 Output 中。
回到顶部
测试 SynchronousSampleApplication
- 在“项目”窗口中,导航至 SynchronousSampleApplication > 测试 > TestCase0 目录。
TestCase0 节点包含两个 XML 文件:Input 用于输入,Output 用于输出。
每次运行测试时,当前输入与 Output 的内容进行比较。
- 右键单击 TestCase0 项目节点,并从上下文菜单中选择“运行”。
注意,“单元测试结果”窗口中的此消息:

- 右键单击 MyTestCase 节点,并从弹出菜单中选择“运行”。
这是一种特殊情况:即 Output 文件为空,且输出写入到 Output。
“覆盖空输出”对话框打开,以便可以确认要覆盖 Output.xml。

- 单击“确定”。
注意失败消息:

- 重复步骤 3。
第一次运行之后,Output.xml 文件不再为空;其内容被保留,且不会被新结果覆盖。

更多信息
回到顶部