使用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,结果如下图所示:
使用BPEL创建Web服务组合的更多相关文章
- Webservices-2.C#创建web服务,及引用访问、代码访问
注:web服务简介Webservices-1.web服务定义简介 以下均以C#语言为例 一.创建web服务(简单介绍,主要讨论客户端引用) 打开VS创建网站项目,在网站项目中添加“WEB服务(ASMX ...
- ASP.NET---如何使用web api创建web服务
1 首先创建asp.net web空项目,并且创建模拟数据,我在工程下面创建了一个Models文件夹,在文件夹Nodels下面创建类Product和Repository 具体如下: [Serializ ...
- http-server让你在任何目录下都可以创建web服务
在做前端页面开发,或者预览时,如果借助于Apache.Tomcat.nginx等预览页面,每次需要将所需预览的页面移动到对应的文件夹下,且还需要考虑是否删除相关目录原有的文件,显然比较麻烦. 那么有没 ...
- 手把手教你在.NET中创建Web服务
最近发现在.NET平台下使用Web服务还是很简单的.下面举个在.NET平台下创建Web服务的简单例子.首先用Visul Studio .Net创建一个C# 项目Asp.Net Web服务程序,源代码如 ...
- 基于Socket创建Web服务
基于Socket创建Web服务 为什么要使用Socket呢,我们来看下图
- Web Service 实例基于Socket创建Web服务
ServerSocket服务器端代码如下: public static void main(String[] args) throws IOException { // 1:建立服务器端的tcp so ...
- asyncio创建协程解析——分析廖雪峰的Python教程之创建WEB服务(转)
第一步,搭建开发环境 所需第三方库: aiohttp,异步 Web 开发框架:jinja2,前端模板引擎:aiomysql,异步 mysql 数据库驱动 所需内置库: logging,系统日志:asy ...
- 使用记事本创建Web服务(WebService)
学习就要从最简单最直观的地方入手. 1)打开记事本,添加如下代码: <%@ WebService Language="C#" Class="myFirstWebSe ...
- Golang: 创建Web服务
使用 Go 语言,我们可以轻松创建出 Web 服务,这一点比 Node.js 还要简单,今天就来总结一下 Go 语言中 Web 服务的创建方式. 首先,我们需要引入 net/http 这个包来处理 H ...
随机推荐
- Angular实现瀑布流的库angular-deckgrid
一. 安装 bower install --save angular-deckgrid 添加代码到你的HTML 添加到你的angular模块中: angular.module('your.module ...
- 关于iphone 6 ios8网站背景图片错乱的问题解决办法
最近公司有个客户的网站用手机safari打开出现背景图片错乱,本来应该显示A图片的却显示B图片,网速越慢的情况下越容易出现这种问题,悲催的是这种情况只在iPhone 6上出现,并且不是一直这样,多刷新 ...
- iOS开发--QQ音乐练习,旋转动画的实现,音乐工具类的封装,定时器的使用技巧,SliderBar的事件处理
一.旋转动画的实现 二.音乐工具类的封装 -- 返回所有歌曲,返回当前播放歌曲,设置当前播放歌曲,返回下一首歌曲,返回上一首歌曲方法的实现 头文件 .m文件 #import "ChaosMu ...
- 浅谈HTTP请求头content-type
请求消息和响应消息都可以包含实体信息,实体信息一般由实体头域和实体组成.实体头域包含关于实体的原信息,实体头包括Allow.Content- Base.Content-Encoding.Content ...
- 100114B
bfs #include<iostream> #include<queue> #include<cstring> #include<cstdio> us ...
- Android任务和返回栈完全解析,细数那些你所不知道的细节
附:Android task详解 出处:http://blog.csdn.net/guolin_blog/article/details/41087993 原文: http://developer. ...
- Java Web项目中的经典代码抽取
前言: 众所周知的,项目开发中做得最多的无非就是增删查改(CRUD)操作.自从国内Web项目开发渐渐盛行SSH框架之后,其开发开发流程也变得更加灵活:本文就项目开发中的业务层代码作个简单的抽取,供业内 ...
- R 绘图 填充颜色
d <- density(mtcars$mpg) plot(d, main="Kernel Density of Miles Per Gallon") polygon(d, ...
- Mybatis 高级结果映射 ResultMap Association Collection
在阅读本文章时,先说几个mybatis中容易混淆的地方: 1. mybatis中的列不是数据库里的列而是查询里的列,可以是别名(如 select user_name as userName,这时col ...
- 面向对象_python
面向对象_python 类(Class): 用来描述具有相同的属性和方法的对象的集合.它定义了该集合中每个对象所共有的属性和方法.对象是类的实例. 类变量:类变量在整个实例化的对象中是公用的.类变量定 ...