(说明:原载于IBM中国公司网站!)做了部分修改。
在此部分中,我们将创建一个简单的 BPEL 流程并尝试在 ODE 中运行它。此流程仅执行简单的字符串处理。记住,它只是一个简单示例,而且您可以使用 WS-BPEL V2.0 规范创建更加复杂的流程。
要创建一个简单的 BPEL 流程,请运行 Eclipse 并单击 File > New > Other 菜单项,选择 BPEL 2.0 -> BPEL Project 选项并创建一个名为 HelloWorld 的新 BPEL 项目。创建了项目后,您就可以创建第一个 BPEL 流程了。再次单击 File > New > Other 菜单项并选择 BPEL 2.0 > New BPEL Process File 选项来启动 BPEL 流程创建向导。
让我们创建一个同样名为 HelloWorld 的同步流程。在向导的下一页中,您应当选择 BPEL 流程文件位置 —— 只需选择先前创建的项目并单击 Finish。系统将创建样例流程。
如示,新建流程有两个内部 BPEL 变量 —— input 和 output —— 以及带有一个接收元素和一个应答元素的序列。接收块负责接收输入的 BPEL 流程数据和变量输入的初始化。类似地,应答块旨在使用输出变量输出 BPEL 流程数据。
同样在创建 BPEL 流程期间,向导创建了一个 WSDL 文件。此文件将描述输入和输出数据类型以及表示 BPEL 流程的端口类型。输入和输出数据类型都只包含单个字符串字段。
我们已经准备好把一些数据处理添加到流程中。为此,请在 receiveInput
块和 replyOutput
块之间拖放一个 Assign 块。
在放置了赋值块后,右键单击 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 变量,如下所示:
在初始化了输出变量后,我们可以创建一个新的赋值程序。对于样例流程,此程序将从输入变量中获取一个字符串值,把它与 “Hello” 问候语连接起来并把结果赋给输出变量字符串字段。为此,单击 New 按钮并在 From 选择框中选择 Expression 值。在下面显示的文本框中,输入以下表达式:concat("Hello ", $input.payload/tns:input)
。在 To 部分中,选择 output/payload/tns:result 变量,如下所示:
图 5. 选择 output/payload/tns:result
Assign 块已经就绪。正如您所见,Eclipse BPEL 插件将提供 XPath V1.0 突出显示功能和代码完成功能来简化 XPath 查询的创建操作(要了解关于 XPath 的更多信息,请参阅 参考资料)。
BPEL 流程的 WSDL 文件应当描述 BPEL 流程中使用的类型以及端口类型、绑定和流程的服务。由向导自动创建的 WSDL 已经包含一个端口类型,而且为了使流程可以运行,我们需要为它创建绑定和服务。
在单独的编辑器中打开 WSDL 文件并查看端口类型图形化定义。
要创建 Web 服务绑定,请右键单击 WSDL 编辑器中的任意空白区域并选择 Add Binding 选项。在 Properties 视图中,把新建绑定重命名为 HelloWorldBinding 并选择 HelloWorld 作为新绑定的端口类型。单击 Generate Binding Content 按钮将显示 Binding Wizard 对话框。
在 Protocol 选择框中选择 SOAP 协议,在 SOAP Binding Options 部分中选中 document-literal 选项并单击 Finish。
创建了绑定后,右键单击 WSDL 编辑器中的空白区域并选择 Add Service 菜单项来创建一个名为 HelloWorldService
的新绑定。然后把 HelloWorldPort 指定为绑定的端口名称并把 URL http://localhost:8080/ode/processes/HelloWorld 指定为绑定的地址。同时选择 HelloWorldBinding 作为新建服务的绑定。
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> |
描述符将为可部署单元指定流程和服务列表。
|
|
现在,当 HelloWorld 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 服务将向您刚输入的文本返回问候语。
在拥有了执行 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