BPEL

时间:2024-04-13 17:00:29

(说明:原载于IBM中国公司网站!)做了部分修改。

在此部分中,我们将创建一个简单的 BPEL 流程并尝试在 ODE 中运行它。此流程仅执行简单的字符串处理。记住,它只是一个简单示例,而且您可以使用 WS-BPEL V2.0 规范创建更加复杂的流程。

 

 

Eclipse BPEL 编辑器

要创建一个简单的 BPEL 流程,请运行 Eclipse 并单击 File > New > Other 菜单项,选择 BPEL 2.0 -> BPEL Project 选项并创建一个名为 HelloWorld 的新 BPEL 项目。创建了项目后,您就可以创建第一个 BPEL 流程了。再次单击 File > New > Other 菜单项并选择 BPEL 2.0 > New BPEL Process File 选项来启动 BPEL 流程创建向导。


图 1. 创建 BPEL 流程文件
BPEL

让我们创建一个同样名为 HelloWorld 的同步流程。在向导的下一页中,您应当选择 BPEL 流程文件位置 —— 只需选择先前创建的项目并单击 Finish。系统将创建样例流程。


图 2. 创建一个同步流程
BPEL

如示,新建流程有两个内部 BPEL 变量 —— inputoutput —— 以及带有一个接收元素和一个应答元素的序列。接收块负责接收输入的 BPEL 流程数据和变量输入的初始化。类似地,应答块旨在使用输出变量输出 BPEL 流程数据。

同样在创建 BPEL 流程期间,向导创建了一个 WSDL 文件。此文件将描述输入和输出数据类型以及表示 BPEL 流程的端口类型。输入和输出数据类型都只包含单个字符串字段。

我们已经准备好把一些数据处理添加到流程中。为此,请在 receiveInput 块和 replyOutput 块之间拖放一个 Assign 块。


图 3. 拖放 Assign 块
BPEL

在放置了赋值块后,右键单击 Assign 块并选择 Show In Properties 上下文菜单项以显示 Properties 视图并选择 Details 选项卡。Assign 块应当会用一个初始的 XML 标记结构来初始化输出变量。它是大多数 BPEL 处理引擎必需的常用程序。单击 Detail 选项卡中的 New 按钮以开始创建第一个赋值程序。在 From 选择框中选择 Fixed Value 元素并在文本区域中输入下列行:

<tns:HelloWorldResponse xmlns:tns="http://www.ibm.com/wd2/ode/HelloWorld">
     <tns:result/>
     </tns:HelloWorldResponse>

 

接下来,在 To 选择框中选择 Variable 元素并在变量树中选择 output/payload 变量,如下所示:


图 4. 初始化输出变量
BPEL

在初始化了输出变量后,我们可以创建一个新的赋值程序。对于样例流程,此程序将从输入变量中获取一个字符串值,把它与 “Hello” 问候语连接起来并把结果赋给输出变量字符串字段。为此,单击 New 按钮并在 From 选择框中选择 Expression 值。在下面显示的文本框中,输入以下表达式:concat("Hello ", $input.payload/tns:input)。在 To 部分中,选择 output/payload/tns:result 变量,如下所示:


图 5. 选择 output/payload/tns:result
BPEL

Assign 块已经就绪。正如您所见,Eclipse BPEL 插件将提供 XPath V1.0 突出显示功能和代码完成功能来简化 XPath 查询的创建操作(要了解关于 XPath 的更多信息,请参阅 参考资料)。

WSDL 文件更改

BPEL 流程的 WSDL 文件应当描述 BPEL 流程中使用的类型以及端口类型、绑定和流程的服务。由向导自动创建的 WSDL 已经包含一个端口类型,而且为了使流程可以运行,我们需要为它创建绑定和服务。

在单独的编辑器中打开 WSDL 文件并查看端口类型图形化定义。


图 6. 查看端口类型图形化定义
BPEL

要创建 Web 服务绑定,请右键单击 WSDL 编辑器中的任意空白区域并选择 Add Binding 选项。在 Properties 视图中,把新建绑定重命名为 HelloWorldBinding 并选择 HelloWorld 作为新绑定的端口类型。单击 Generate Binding Content 按钮将显示 Binding Wizard 对话框。


图 7. Binding Wizard 对话框
BPEL

Protocol 选择框中选择 SOAP 协议,在 SOAP Binding Options 部分中选中 document-literal 选项并单击 Finish


图 8. 绑定选项
BPEL

创建了绑定后,右键单击 WSDL 编辑器中的空白区域并选择 Add Service 菜单项来创建一个名为 HelloWorldService 的新绑定。然后把 HelloWorldPort 指定为绑定的端口名称并把 URL http://localhost:8080/ode/processes/HelloWorld 指定为绑定的地址。同时选择 HelloWorldBinding 作为新建服务的绑定。


图 9. HelloWorldBinding
BPEL

WSDL 文件已经准备好被部署到 ODE 应用程序中。

部署描述符

在准备好部署流程之前需要做的最后一件事是创建 ODE 描述符。描述符必须名为 deploy.xml 且必须放在存储 BPEL 和 WSDL 文件的目录中。只需创建一个新的 deploy.xml 文本文件并把以下内容放置在该文件中。

(下面是本人做实验时的截图,配置一项即可!)


<!--StartFragment --> 

                
>?xml version="1.0" encoding="UTF-8"?>
>deploy xmlns="http://ode.fivesight.com/schemas/2006/06/27/dd"
    xmlns:pns="http://www.ibm.com/wd2/ode/HelloWorld" 
    xmlns:wns="http://www.ibm.com/wd2/ode/HelloWorld">
  >process name="pns:HelloWorld">
    >active>true>/active>
    >provide partnerLink="client">
      >service name="wns:HelloWorldService" port="HelloWorldPort"/>
    >/provide>
  >/process>
  >/deploy>

 

描述符将为可部署单元指定流程和服务列表。

 

BPEL
BPEL
BPEL
BPEL
回页首

 

使用 BPEL 流程

现在,当 HelloWorld BPEL 流程就绪时,我们可以把它部署到 ODE 应用程序中并测试该流程。

把 BPEL 流程部署到 ODE 中

ODE 支持热部署 BPEL 流程。要部署在先前部分中创建的流程,只需把包含流程的所有文件的文件夹复制到部署了 ODE 的 Apache Tomcat 的 webapps/ode/WEB-INF/processes 目录中。要监视部署流程,可以查看 Tomcat 根目录中的日志文件 logs/catalina.out,查找所有新输入。

测试已部署流程的一种简单方法是使用 Eclipse Web Services Explorer 工具。右键单击 HelloWorld WSDL 文件并选择 Web Services > Test with Web Services Explorer 弹出式菜单项。Eclipse 将启动 Web Services Explorer 测试工具。使用此工具,把一些文本输入到输入参数中并调用 Process 操作。如图 10 所示,Web 服务将向您刚输入的文本返回问候语。


图 10. 调用 WSDL 操作
BPEL

创建 BPEL 流程客户机

在拥有了执行 BPEL 流程的 Web 服务后,我们可以把此流程集成到客户机应用程序中。让我们使用 Eclipse WTP 插件来生成基于 Axis 的 Web 服务客户机。在生成客户机代码之前,需要把 Tomcat 服务器添加到 Eclipse 服务器的列表中。单击 File > New > Other 菜单项并从列表中选择 Server 选项。然后,执行向导步骤来为 Eclipse 工作空间创建新 Tomcat 服务器。

 

测试Web Service:

1.新建web Service Project;(我使用Xfire)

2.利用myEclipse工具生成相应的类文件;

<!--StartFragment --> 

4.  编写客户端执行文件。(main函数中编写如下内容)

  public static void main(String[] args) {
       

        HelloWorldBPELServiceClient client = new HelloWorldBPELServiceClient();
       
  //create a default service endpoint
        HelloWorldBPEL service = client.getHelloWorldBPELPort();
        HelloWorldBPELRequest helloworldinput=new HelloWorldBPELRequest();
        helloworldinput.setInput("caiqm");
        String result=service.process(helloworldinput).getResult();
  
        System.out.println(result);
       
        System.out.println("test client completed");
          System.exit(0);
    }

 

5.启动tomcat,后运行文件。

结果:

Hello, caiqm
test client completed