使用BPEL创建Web服务组合

http://www.cnblogs.com/ahhuiyang/archive/2012/12/18/2824131.html

为简单起见,本例的Web服务组合只调用一个Web Service API。
本文环境是:Eclipse Juno Release + JRE 1.7 + Tomcat 7.0.29 + BPEL + ODE,Eclipse的安装,JRE环境变量配置和Tomcat配置本文就不讲了。BPEL似乎不能运行于MyEclipse,本人在MyEclipse环境下没有成功,可能跟端口争用有关。

网上BPEL入门的文章大都有问题,或比较老而新版本发生了改变,或其中有些在实施中会遇到的问题,本文则是我花两天时间动手摸索出来的,整理下来以备忘,算是BPEL入门基础,大牛就不用看了。

1、Apache ODE安装和配置

http://ode.apache.org/下载ode的war文件,本例下载的文件是apache-ode-war-1.3.5.zip,解压这个文件,找到ode.war,放到Tomcat主目录下的webapps目录,然后到“Tomcat主目录\bin”目录下,启动Tomcat服务器,成功启动后,在浏览器里输入http://localhost:8080/ode,如果浏览器里显示如下页面,则说明ode安装成功:

2、BPEL Visual Designer安装

打开Eclipse,点击菜单“Help->Install New Software...”弹出“Install”对话框,点击“Add…”按钮,在弹出的对话框里,Name框里输入“BPEL”,Location框里输入http://download.eclipse.org/bpel/site/,输入完成后点击“OK”按钮。

Eclipse自动列出所有可下载安装的组件,如下图所示:

选中所有三项“BPEL Commons”、“BPEL Visual Designer”和“Runtime Adapter for Apache ODE 1.3”,然后点击“Next”,直到安装完成。

点击Eclipse菜单“File->New->Other”,在Wizards里输入“bpel”,如果出现如下三项,则说明BPEL安装成功:

3、Eclipse ODE服务器配置

尽管可以在创建BPEL工程时创建ODE服务器,但现在仍可以先在Eclipse里配置好ODE服务器,以后使用时更加方便。

Tomcat默认使用的端口号是8080,因此ODE使用8080端口时会有问题,当ODE的宿主服务器Tomcat使用8080端口时,ODE好像也不能使用其它端口而必须使用8080端口。如果服务API和BPEL都在同一台机器上运行,而且都在同一Tomcat目录下,使用ODE部署BPEL时会出现莫明其妙的问题。初步分析,可能是端口号争用,通过很多次尝试,最终找到了解决之道:在另一台机器上使用Tomcat部署服务,在本机上部署BPEL服务组合,另一台机器上的Tomcat和本机的ODE服务器均使用8080端口。

Web Service地址:http://192.168.10.179:8080/Fibonacci/FibonacciPort?WSDL

ODE服务器地址:http://localhost:8080/ode

说明:192.168.10.179不是localhost。

点击Eclipse菜单“Window->Preferences->Server->Runtime Environments”,点击“Add”按钮,在弹出的对话框输入下图所示的内容,其中Tomcat目录为你自己机器上的目录:

点击“Finish”按钮,完成配置。

4、创建BPEL服务组合

第一步,创建 BPEL工程

依次点击“File->New->Other”,在Wizards里输入“bpel”,在出现的工程类型中选择“BPEL Project”,点击“Next”,在弹出的对话框里输入工程名称“BPELFibonacci”,如名称,本文调用的Web Service的功能是生成Fibonacci数列,服务器选择“ODE”,如下图所示:

然后点击“Next”,最后击点“Finish”,一个BPEL工程创建完毕。

第二步,创建BPEL Process

在Eclipse的Package Explorer中,右击BPELFibonacci下的“bpelContent”,在弹出的菜单里选择“New->Other”,在弹出对话框的Wizards文本框里输入“bpel”,然后选择列表中的“BPEL Process File”,点击“Next”。

Process Name输入“BPELFibonacci”,Namespace输入http://bpel.sklse.org,然后点击“Next”,弹出如下的对话框:

更改Template为同步,即下拉列表选择“Synchronous BPEL Process”,把Service Address改为http://localhost:8080/ode/processes/BPELFibonacci,其它不变,点击“Next”按钮,然后点击“Finish”按钮,系统为我们创建了Process文件,并自动打开了流程编辑器。

第三步,将服务的WSDL文件加入工程

不论你用什么方式,请将服务的WSDL文件加入到工程的bpelContent文件夹下,请确保WSDL文件中的地址是可用的,也就是说,可通过浏览器访问到这个WSDL文件。本例中,使用的WSDL文件是FibonacciPort.wsdl。

第四步,编辑Process

不论初始的流程是什么,通过拖拽“Actions”,拖动两个assign和一个invoke,构成如下图所示的流程图:

第四步A,编辑invoke,创建伙伴链接

流程的核心是执行服务,伙伴链接实际上是指定此流程与哪个服务绑定,被绑定的服务将会被执行。一个服务有输入和输出。

此流程只包含最基本的三个部分:输入、执行和输出,分别对应“receiveInput和assignInputToSOAPRequest”、“invokeFibonacci”以及“replyOutput和assignOutputToResult”。

选中“invokeFibonacci”,在Eclipse下方打开“Properties”标签页(如果没有,请点击Eclipse菜单“Window->Show View->Properties”),可看到如下所示的界面:

点击“Details”,在右边的面板中点击“Partner Link”文本框后面的下拉三角,选择“Create Global Partner Link”,打开创建链接对话框,首先输入伙伴链接名称“BPELFibonacciPL”:

点击“OK”按钮,然后选择链接到的Web Service,也就是Fibonacci服务:

选择来源和过滤条件为“From Project”和“Show Port Types”,在“Matches”里选择“FibonacciDelegate”,“FibonacciDelegate”的内容会自动出现在“Partner Link Type Structure”下,在这里也选择“FibonacciDelegate”,然后点击“OK”按钮,进入下一步,输入伙伴链接类型名称:

输入“BPELFibonacciPLT”,名称是任意的,然后点击“Next”按钮,输入角色名称“BPELFibonacciRole”,选中下面的Web服务“FibonacciDelegate”,点击“Next”,弹出的对话框里什么都不输入,再点击一次“Finish”,完成了伙伴链接的创建。

完成后,请选择要执行哪个操作,本例中选择“getFibonacciArray”,也就是获取Fibonacci数列,其设置如下图所示,将输入焦点定位到“Operation”,然后双击右边的“getFibonacciArray”,会自动生成Input和Output变量,这些变量对应的是getFibonacciArray的输入和输入,数据结构与Fibonacci的WSDL中定义的一致。

第四步B,分配输入和输出

Fibonacci有两个Web服务接口,我们选择的是getFibonacciArray,其输入是一个整型(int)数字,大于等于1,表示获取Fibonacci数列的前多少位,输出是字符串(string)类型。

BPEL Project默认的输入类型并不是int而是string,因此我们要将输入类型更改为int,要更改这个类型,必须更改“BPELFibonacciArtifacts.wsdl”文件。

在“Project Explorer”里右击“BPELFibonacciArtifacts.wsdl”,在弹出的菜单里选择“Open With->WSDL Editor”,打开WSDL编辑器,如下图所示:

找到BPELFibonacci下的input,点击右边箭头,在弹出的界面中将input类型string改为int,点击“保存”。由于输出是string类型,所以不用更改。然后,我们就可以分配输入了。

点击“assignInputToSOAPRequest”,展开其属性页,切换到“Details”选项卡,点击“New”新建一个输入分配,“From”选择“input:BPELFibonacciRequestMessage->payload:BPELFibonacciRequest->input:int”,在“To”里选择“BPELFibonacciPLRequest:getFibonacciArray->parameters:getFibonacciArray->arg0:int”,点击保存,会提示是否生成默认的输入,选择是,然后再点击保存,这样就完成了输入的分配。

同样对于输出,要注意的是,从伙伴链接的输出到流程的输出,如下图所示:

注意:

最初创建BPEL Process时输入的Service Address是http://localhost:8080/ode/processes/BPELFibonacci,但是“BPELFibonacciArtifacts.wsdl”文件中最后几行中记录的地址是http://localhost:8080/BPELFibonacci,请以文本方式打开“BPELFibonacciArtifacts.wsdl”,并将这地址改为http://localhost:8080/ode/processes/BPELFibonacci。步骤是:

在“Package Explorer”里右击“BPELFibonacciArtifacts.wsdl”,在弹出的菜单里选择“Open With->Text Editor”,在打开的编辑器里将如下几行代码(通常在最后几行):

1 <service name="BPELFibonacciService">
2 <port binding="tns:BPELFibonacciBinding" name="BPELFibonacciPort">
3 <soap:address location="http://localhost:8080/BPELFibonacci"/>
4 </port>
5 </service>

改为:

1 <service name="BPELFibonacciService">
2 <port binding="tns:BPELFibonacciBinding" name="BPELFibonacciPort">
3 <soap:address location="http://localhost:8080/ode/processes/BPELFibonacci"/>
4 </port>
5 </service>

5、部署

右击“bpelContent”,在弹出的菜单里选择“New->Other->BPEL Deployment Descriptor”,点击“Next”,再点击“Finish”,会自动打开deploy的编辑页面。

在“Inbound Interfaces(Services)”下的“Associated Port”里选择“BPELFibonacciPort”,点击后面的单元格,内容会自动填上。

在“Outbound Interfaces(Invokes)”下的“Associated Port”里选择“FibonacciPort”,点击后面的单元格,内容会自动填上。

点击“保存”。

在“Servers”View里,右键菜单选择“New->Server”,在弹出的对话框里选择“ODE v1.x Server”,然后“Next”,再“Next”,在此对话框里将“BPELFibonacci”通过“Add”按钮加入到右边,点击“Finish”。

启动Ode服务器。

6、测试

在“Package Explorer”里右击“BPELFibonacciArtifacts.wsdl”,在弹出的菜单里选择“Web Services->Test With Web Services Explorer”,此时会打开浏览器,并加载Web服务,点击“process”,输入“6”,期待的结果是“1 1 2 3 5 8”,结果如下图所示:

另一个例子,输入10,结果如下图所示:

时间: 2024-12-14 18:07:37

使用BPEL创建Web服务组合的相关文章

基于Socket创建Web服务

基于Socket创建Web服务 为什么要使用Socket呢,我们来看下图 Socket原理图回顾: -------------------编写SocketService,完成字母小写转大写功能----------------------------- ServerSocket服务器端代码如下: public static void main(String[] args) throws IOException { // 1:建立服务器端的tcp socket服务,必须监听一个端口 ServerSo

asyncio创建协程解析——分析廖雪峰的Python教程之创建WEB服务(转)

第一步,搭建开发环境 所需第三方库: aiohttp,异步 Web 开发框架:jinja2,前端模板引擎:aiomysql,异步 mysql 数据库驱动 所需内置库: logging,系统日志:asyncio,异步IO:os,系统接口:json,json 编码解码模块:time,系统时间模块:datetime,日期模块 接下来仅对用到的功能进行讲解 第二步,构建 Web 框架 主要思路: 理解 asyncio.aiohttp 基本应用 使用 asyncio 异步 IO 模块创建服务协程,监听相应

Nodejs 创建web服务

1 // 加载http服务包 2 var http = require("http"); 3 4 // 创建服务 5 var server = http.createServer(requestListener); 6 7 // 监听端口 8 server.listen(7798); 9 10 // 请求监听处理方法 11 function requestListener (req, res) { 12 console.info(req.url); // 控制台输出信息 13 res.

NodeJS学习笔记-创建Web服务

const http = require('http'); const hostname = '127.0.0.11';const port = 7798; const server = http.createServer((req, res) => { res.statusCode = 200; res.setHeader('Content-Type','text/plain'); res.end('Hello, NodeJS');});server.listen(port, hostname

J2EE基础之Web服务简介

J2EE基础之Web服务简介 1.什么是Web服务? 在人们的日常生活中,经常会查询网页上某城市的天气信息,这些信息都是动态的.实时的,它是专业的气象站提供的一种服务.例如,在网上购物时,通常采用网上支付的方式,这是通过使用第三方提供的支付工具来实现的.在网络上提供这样的服务,我们称之为Web服务. 从软件开发者的角度来看,Web服务是一组规范的集合.这种规范用来定义不同应用系统之间是如何交互的,包括信息传递的内容.格式,信息的传递协议,以及相关的安全.策略和互操作等关键特性. 从编程使用者的角

spring-cloud 构建一个restful的web服务

构建一个restful的web服务 这篇文章告诉你如何通过spring创建一个"hello world"的restful的web服务 你会建立什么 你会建立一个接受HTTP GET请求的服务: http://localhost:8080/greeting 问候语以JSON的形式响应: {"id":1,"content":"Hello, World!"} 你可以自定义问候语与一个可选 name 参数的查询字符串: http://

利用jws发布一个查询员工信息的Web服务(员工信息存储在数据库中)

这是<基于服务的软件系统>的课程设计: 一.作业要求 编写查询员工信息的Web服务(员工信息存储在数据库中).第一个Web服务:输入员工号,返回该员工号的员工的基本信息,包括员工号.员工名称.所在部门.出生日期.职位.职称.入职日期等信息.第二个Web服务:输入部门.职称,返回该部门具有该职称的所有员工的基本信息,员工基本信息与上面相同.分别针对上述两个Web服务,分别编写调用这两个Web服务的程序(或网页).要求在输入界面上输入待查询数据,调用Web服务,并将Web服务返回的员工信息查询结果

AEAI ESB-基于ESB的Web服务开发

1.概述 Web服务是ESB中间件的常见解决方案,它使得运行在不同机器上的不同应用无须借助附加的.专门的第三方软件或硬件,就可相互交换数据或集成.依据Web Service规范实施的应用之间,无论它们所使用的语言.平台或内部协议是什么,都可以相互交换数据. AEAIESB提供了非常便捷的服务创建方式,本文档主要为读者介绍如何使用ESB来创建一个简单的Web服务接口. 2.样例 创建webservice服务 在WS目录右键,点击"创建web服务",如下图: 配置web服务向导 服务名称填

联合使用 HTML 5、地理定位 API 和 Web 服务来创建移动混搭程序

查找并跟踪位置坐标以用在各种 Web 服务中 在这个由五个部分所组成的系列的第一部分中,您将接触到移动 Web 应用程序中最流行的新技术:地理定位.高端智能手机都内置 GPS,现在您将了解 Web 服务如何使用它.在本文中,您将学到如何使用各种地理定位标准,以及如何使用流行的 Web 服务来创建有趣的移动混搭程序. 关于本系列? HTML 5 是一项让人振奋的技术,这有着充分的理由.这将会是一次技术突破,因为它可以将桌面应用程序功能带入浏览器中.除了传统浏览器外,对于移动浏览器,其潜力甚至更大.