FeaturesPluginsDocs & SupportCommunityPartners

开发一个简单的同步 BPEL 进程

本教程提供样例项目 SynchronousSample 的概述,并用图解来说明如何使用 NetBeans IDE 6.0(带有所必需的全部行时)来部署、执行和测试一个同步 BPEL 进程。

该同步 BPEL 进程代表一个简单的同步工作流。该进程取走输入消息,并同步地把消息送回。客户端通过调用一个请求-响应操作来启动该同步进程。调用同步进程后,客户端被阻塞,直到进程结束并返回结果。

在本教程中,您将使用一个简单的 BPEL 项目 SynchronousSample 和一个复合应用程序 SynchronousSampleApplication。项目包括 WSDL 和 XML 方案文件、一个部署描述符和用来测试的输入文件。该进程的 Web 服务接口是一个简单的同步操作。

预计持续时间:30 分钟

页首

教程需求

在开始前,请确保您重新检查了本节中的需求。

先决条件

本教程假设您具有 Java 语言和平台、NetBeans IDE 的一些基本知识或编程经验。

系统需求

本教程假设您的系统符合在 NetBeans IDE 6.0 发行说明系统需求话题中所规定的需求。

本教程所需的软件

在开始前,您需要在计算机上安装以下软件:带 SOA 的 NetBeans IDE 6.0 和 GlassFish 应用程序服务器,可从 NetBeans IDE 6.0 下载里面的“全部”下载得到。

页首

配置和启动 GlassFish 应用程序服务器

在您安装完全版的 6.0 时,就已经包括了 GlassFish 应用程序服务器。NetBeans IDE 将在需要的时候自动启动应用程序服务器。

要启动 GlassFish 应用程序服务器:

  1. 如果看不到“服务”窗口,请选择“窗口”>“服务”。
  2. 在“服务”窗口中,展开“服务器”节点。
    “服务器”节点应该包含有 GlassFish 应用程序服务器的子节点。如果 GlassFish 应用程序服务器没有出现,请转到要配置 GlassFish 应用程序服务器

  1. 右键单击 GlassFish 应用程序服务器节点,选择“启动”。
    “输出”窗口会显示应用程序启动的日志信息。如果看不到“输出”窗口,请选择“窗口”>“输出”>“输出”。
    当消息 Application server startup complete 显示到“输出”窗口时,应用程序服务器就正在运行了。
    注意:如果 GlassFish 应用程序服务器节点上出现一个绿箭头标记,服务器就在运行。

注意:把应用程序部署到 GlassFish 应用程序服务器时,将自动启动服务器。这样,您就不必手动启动应用程序服务器。

注意:以下过程展示如何配置 IDE 以使用另一个版本的 GlassFish V2 应用程序服务器。

要配置 GlassFish V2 应用程序服务器:

您可能想使用不同版本的应用程序服务器,而不是随 NetBeans 6.0 提供的那个。例如,您也许想从 GlassFish 社区网站下载并安装更新版本的 GlassFish V2 应用程序服务器。

以下过程展示如何配置 NetBeans 6.0 IDE 以使用另一个版本的 GlassFish V2 应用程序服务器。假设您已经下载并安装了另一个版本的应用程序服务器。

  1. 在“服务”窗口,右键单击“服务器”节点,并从弹出菜单选择“添加服务器”。
    将打开“添加服务器实例”对话框。
  2. 在“选择服务器”页,从列表选择“GlassFish V2”。
  3. 单击“下一步”。
    将打开“平台文件夹位置”页。
  4. 在“平台位置”字段,使用“浏览”按钮来导航并选择应用程序服务器的安装位置。

    如果您把 GlassFish 应用程序服务器安装到了缺省位置,请参考表 1 来找到安装位置。否则,请导航到您安装 GlassFish V2 应用程序服务器的位置。

    表 1:应用程序服务器的缺省安装目录

    平台 安装为... SOA 的安装位置 工具集的安装位置
    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:\Program Files\glassfish-v2-b58g C:\Sun\AppServer
  5. 选中“注册本地缺省域”单选按钮并单击“下一步”。
  6. 输入域管理员的用户名和口令。
    如果您在安装过程中接受了缺省值,用户名是 admin,口令是 adminadmin
  7. 单击“完成”。

页首

打开 SynchronousSample 项目

  1. 从 IDE 的主菜单选择“文件”>“新建项目”。
    将打开“新建项目”向导。
  2. 在“类别”列表中,选择“样例”>“SOA”。
  3. 在“项目”列表中,选择 Synchronous BPEL Process

    选中样例 BPEL 模块项目

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

    键入项目名称Typing project name

  6. (可选)在“项目位置”字段中,使用“浏览”按钮来导航并选择一个不同的文件夹来用作 IDE 保存项目文件的位置。
  7. 单击“完成”。
    “项目”窗口现在包含两个项目节点:一个是 BPEL 项目 SynchronousSample,另一个是复合应用程序项目 SynchronousSampleApplication

页首

在“项目”窗口中浏览 BPEL 项目

  1. 在“项目”窗口中,展开 SynchronousSample 节点,再展开 Process Files 节点。
    Process Files 节点包含这些项:
    • SynchronousSample.bpel,BPEL 进程。
    • SynchronousSample.wsdl,进程的 Web 服务接口。
    • SynchronousSample.xsd,方案文件。

    SynchronousSample 项目视图

  2. 双击 AsynchronousSample.bpel 节点。
    注意以下几点:
    • BPEL 设计器包含一个 SynchronousSample.bpel 的选项卡。
    • SynchronousSample 图显示在“设计”视图中。
      “设计”视图是业务过程的可视化设计器。在这个视图中,您可以可视化地为业务过程建模。BPEL 设计器会自动生成与可视化设计相对应的 BPEL 代码。
    • BPEL 元素的调板将在“源代码编辑器”右侧打开。
    • “导航器”窗口将显示 BPEL 进程的 BPEL 逻辑视图。

    SynchronousSample BPEL 设计视图
    单击以放大

页首

在“源代码”编辑器中浏览 WSDL 编辑器

Editor, you can create and edit Web Services Description Language (WSDL) files. The WSDL Editor includes the Design view, Source view, and the Partner view.在 WSDL 编辑器中,您可以创建和编辑 Web 服务描述语言(WSDL)文件。WSDL 编辑器包括“设计”视图、“源代码”视图和“伙伴”视图。

要查看 WSDL 视图:

  1. 在“项目”窗口中,双击 SynchronousSample.wsdl 文件。
    WSDL 文件会在 WSDL 视图中打开。
  2. 在 WSDL 视图中,WSDL 文件显示为树形图,您可以配置文件的元素和属性。

    SynchronousSample WSDL
    单击以放大

要查看“源代码”视图:

  • 单击“源代码”按钮。
    底层的 XML 源代码会出现在“源代码”视图中。

    SynchronousSample WSDL 的“源代码”视图
    单击以放大

要查看“伙伴”视图:

  • 一个体现伙伴间的互动的 WSDL 文件的抽象元素会出现在“伙伴”视图中。

    SynchronousSample WSDL 的“伙伴”视图
    单击以放大

页首

把 If 活动添加到“设计”视图

  1. 在“项目”窗口中,依次展开 SynchronousSample 节点和 Process Files 节点,双击 SynchronousSample.bpel 节点。
    IDE 会在“设计”视图中显示 SynchronousSample.bpel 图。
  2. 在调板的“结构化活动”段中,选中“If”图标,拖到“Start”和“Assign”之间的设计区域。
    IDE 会给您提供可视化的线索,显示您可以放下所选项的位置。
    本操作会把一个 If 活动 If1 放到“设计”视图中。

    已添加 If 活动

  3. 在“设计”视图中,单击 If1 活动。
    “BPEL 映射器”窗口会显示在 IDE 底部。
    如果看不到“BPEL 映射器”,请选择“窗口”>“BPEL 映射器”。您使用“BPEL 映射器”来定义 Boolean 条件。注意“BPEL”顶部的各个段组成了菜单栏。

    BPEL 映射器

  4. 在菜单栏上,单击“操作符”并选择“== EQUAL”方法Equal
    “== EQUAL”方法会出现在“BPEL 映射器”的中间部分(叫做“映射”面板)。
  5. 在菜单栏上,单击“String”方法并从 String 下拉菜单上选择“String Literal”String Literal
    “String Literal”框会出现在映射器的“映射”面板上。
  6. 在 String Literal 方法中键入“Hello World”,再按下 Enter 键。
  7. 把“String Literal”框和“== Equal”框移动到映射面板的中间。

    已插入 Equal 和 String Literal

  8. 在“BPEL 映射器”的“源树”面板中的 Variables 下,展开“inputVar”>“inputType”。
    paramA 会出现在 inputType 下面。
  9. paramA 拖到“== Equal”方法的“any1”部位。
  10. 选中“String Literal”框的右边的小方块。当看见把手鼠标时,把一条连接线拖到“== Equal”方法的“any2”部位。
  11. From the == Equal method, drag the return boolean onto the Result.从“== Equal”方法中,把“return boolean”拖到“结果”上。

    映射

页首

把 Assign 活动添加到“设计”视图

  1. 在“设计”视图中,把现有的 Assign1 活动拖到 If1 活动上。把这个 Assign 活动放到 If1 活动区域的两个大 X 图标之间。

    已添加 Assign 活动

  2. 从调板的“基本活动”段中,把 Assign 活动拖到“设计”视图上,放到现有的 Assign 元素右边。

    已添加第二个 Assign 活动

  3. 选中新的 Assign2 活动。
  4. 在映射器的菜单栏上,单击“String ”方法并从“String”下拉列表中选择“Concat”Concat
    “Concat”方法会出现在“BPEL 映射器”的“映射”面板上。
  5. 右键单击“Concat”框上的第一个字段,从弹出菜单中选择“添加字面”。
  6. 紧随第一个字符串中的键入 Hello,再按下 Enter。
  7. 在“BPEL 映射器”的“源树”面板中,展开“inputVar”>“inputType”。
  8. paramA 拖到“Concat”方法的“string2”部位上(第二个字段)。
  9.  在“BPEL 映射器”的“目标树”面板中,展开“outputVar”>“outputType”。
  10. This concatenates the string Hello to the input and copies the statement into the output.
    把“Concat”方法中的“return string”拖到“outputVar”>“resultType”下的 paramA 上。
    这会把字符串“Hello”串接到输入中,并把语句复制到输出中。

    已串接字符串 Hello

  11. 按下 Ctrl-S 已保存您进行的编辑。

页首

把项目部署到应用程序服务器

部署项目使得应用程序服务器能够取得服务组合件,进而允许运行它的服务单元。

要部署该复合应用程序:

  1. 如果看不到“输出”窗口,请选择“窗口”>“输出”。
  2. 右键单击 SynchronousSampleApplication 项目节点,选择“部署项目”。
  3. 在“警告”对话框中,确保 GlassFish V2 被选中,单击“确定”。
    注意在“输出”窗口中会出现类似于下面的消息:
    BUILD SUCCESSFUL.

    “输出”窗口

页首

创建测试驱动

通过添加测试用例、绑定到操作、提供输入然后使用测试程序,您可以增强符合应用程序项目。

  1. 在“项目”窗口,展开 SynchronousSampleApplication 项目节点,右键单击“测试”节点,从弹出菜单选择“新建测试用例”。
    “新建测试用例”向导会打开。
  2. 输入名称 MyTestCase,单击“下一步”。
  3. 展开“SynchronousSample”>“Process Files”,选择 SynchronousSample.wsdl,单击“下一步”。
  4. 选择 operation1,单击“完成”。
    注意在项目树形图的“测试”下,新建了一个文件夹 MyTestCase,包含 InputOutput两个文件。

    MyTestcase

  5. 双击“Input”,如下修改其内容:

    1. 定位到 Body 内容的如下行:
      <syn:paramA>?string?<syn:paramA> .
    2. ?string? 替换为 Sherry
      该行应该变成这样:
      <syn:paramA>Sherry<syn:paramA> .
    3. 要保存您的更改,请在 IDE 的主菜单上选择“文件”>“保存”。
  6. 双击 Output.xml 以检查其内容。
    注意在测试运行前,该文件是空的。
    每当测试运行时,当前的输出就和 Output 的内容比较。如果 Output 为空,就会把 Input 复制到 Output 中。

页首

测试 SynchronousSampleApplication

  1. 在“项目”窗口中,导航到“SynchronousSampleApplication”>“测试”>“TestCase0”目录。
    TestCase0 节点包含两个 XML 文件:用作输入的 Input 和用作输出的 Output
    每当测试运行时,当前的输出就和 Output 的内容比较。
  2. 右键单击 TestCase0 项目节点,从上下文菜单中选择“运行”。
    注意在“JUnit 测试结果”窗口中的这条消息:

    测试通过

  3. 右键单击 MyTestCase 节点,从弹出菜单选择“运行”。
    这是一个特殊情况,Output 文件为空,输出就被写到 Output 中。
    这会打开“覆盖空输出”对话框,以便让您确认您想覆盖 Output.xml

    覆盖空输出?

  4. 单击“是”。
    注意失败消息:

    MyTestcase 失败

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

    MyTestcase 通过

参见

页首

Bookmark this page

del.icio.us furl simpy slashdot technorati digg
Companion
Projects:
MySQL Database Server   Open JDK: an Open SourceJDK   GlassFish Community: an Open Source Application Server    Mobile & Embedded Community    Open Solaris   java.net - The Source for Java Technology Collaboration   Open ESB - The Open Enterprise Service Bus Powered by