本文接收使用ActiveBpel開發,部署和運行BPEL流程實例。
本文的例子工程和服務工程請見附件。
1. 安裝ActiveBpel5.0.2
要安裝ActiveBpel5.0.2,須要先安裝JDK1.5,Tomcat。注意這裏是JDK1.5版本的,ActiveBpel5.0.2不支持JDK1.5以上的版本。
(1) 安裝JDK1.5
安裝jdk後設置JAVA_HOME= C:\Program Files\Java\jdk1.6.0_07,這是個人jdk的安裝目錄。
(2) 安裝Tomcat5.5.27
具體的安裝過程這裏就再也不敘述,安裝完成後,設置環境變量CATALINA_HOME= E:\apache-tomcat-5.5.27,這是個人安裝目錄。
(3) 安裝ActiveBpel5.0.2
設置完成CATALINA_HOME環境變量後,就能夠安裝ActiveBpel5了,解壓rar包後安裝目錄下有install.bat,運行這個文件,便可安裝成功。
2. 設計BPEL流程
設計BPEL流程須要安裝BPEL流程設計工具,本文用到的BPEL設計工具是ActiveBpel Designer。
本文開發一個簡單的流程實例,該Bpel流程只調用一個簡單的echo服務,該服務輸入一個字符串,返回的結果是一樣的一個字符串。所以整個Bpel流程的結果也是一個這樣的字符串。這個echo服務是mule開發的服務,工程名稱echoService,工程見壓縮包。
服務實現代碼很簡單,以下。
package cn.xidian.repace.zhaolong;
public
class EchoImp
implements InterfaceEcho{
public String echo(String str){
return str;
}
}
要開發BPEL流程,須要有相關的WSDL文件,該Bpel工程用到兩個wsdl文件。一個是Bpel文件自己的wsdl文件BpelEchoTest.wsdl,一個是被調用服務的wsdl文件EchoTest.wsdl。
Bpel自己的wsdl文件BpelEchoTest.wsdl以下。
<?
xml
version
="1.0"
encoding
="UTF-8"
?>
<
wsdl:definitions
targetNamespace
="http://zhaolong.repace.xidian.cn"
xmlns:impl
="http://zhaolong.repace.xidian.cn"
xmlns:bpws
="http://schemas.xmlsoap.org/ws/2003/03/business-process/"
xmlns:intf
="http://zhaolong.repace.xidian.cn"
xmlns:wsdlsoap
="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:apachesoap
="http://xml.apache.org/xml-soap"
xmlns:soapenc
="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:plnk
="http://schemas.xmlsoap.org/ws/2003/05/partner-link/"
xmlns:xsd
="http://www.w3.org/2001/XMLSchema"
xmlns:wsdl
="http://schemas.xmlsoap.org/wsdl/"
xmlns
="http://schemas.xmlsoap.org/wsdl/"
>
<
wsdl:message
name
="bpelResponse"
>
<
wsdl:part
name
="bpelReturn"
type
="xsd:string"
/>
</
wsdl:message
>
<
wsdl:message
name
="bpelRequest"
>
<
wsdl:part
name
="in0"
type
="xsd:string"
/>
</
wsdl:message
>
<
wsdl:portType
name
="BpelProxy0"
>
<
wsdl:operation
name
="bpel"
parameterOrder
="in0"
>
<
wsdl:input
name
="bpelRequest"
message
="impl:bpelRequest"
/>
<
wsdl:output
name
="bpelResponse"
message
="impl:bpelResponse"
/>
</
wsdl:operation
>
</
wsdl:portType
>
<
wsdl:binding
name
="bpelTestSoapBinding"
type
="impl:BpelProxy0"
>
<
wsdlsoap:binding
style
="rpc"
transport
="http://schemas.xmlsoap.org/soap/http"
xmlns:wsdlsoap
="http://schemas.xmlsoap.org/wsdl/soap/"
/>
<
wsdl:operation
name
="bpel"
>
<
wsdlsoap:operation
soapAction
="" xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/"
/>
<
wsdl:input
name
="bpelRequest"
>
<
wsdlsoap:body
encodingStyle
="http://schemas.xmlsoap.org/soap/encoding/"
namespace
="http://zhaolong.repace.xidian.cn"
use
="encoded"
xmlns:wsdlsoap
="http://schemas.xmlsoap.org/wsdl/soap/"
/>
</
wsdl:input
>
<
wsdl:output
name
="bpelResponse"
>
<
wsdlsoap:body
encodingStyle
="http://schemas.xmlsoap.org/soap/encoding/"
namespace
="http://zhaolong.repace.xidian.cn"
use
="encoded"
xmlns:wsdlsoap
="http://schemas.xmlsoap.org/wsdl/soap/"
/>
</
wsdl:output
>
</
wsdl:operation
>
</
wsdl:binding
>
<
wsdl:service
name
="bpelTest"
>
<
wsdl:port
name
="bpelTest"
binding
="impl:bpelTestSoapBinding"
>
<
wsdlsoap:address
location
="http://202.117.118.183:33002/services/bpelTest"
xmlns:wsdlsoap
="http://schemas.xmlsoap.org/wsdl/soap/"
/>
</
wsdl:port
>
</
wsdl:service
>
<
plnk:partnerLinkType
name
="MyBpelPLT"
xmlns:plnk
="http://schemas.xmlsoap.org/ws/2003/05/partner-link/"
>
<
plnk:role
name
="bpel"
>
<
plnk:portType
name
="impl:BpelProxy0"
/>
</
plnk:role
>
</
plnk:partnerLinkType
>
</
wsdl:definitions
>
開發好echoService mule服務後,運行該服務,在瀏覽器輸入服務地址,獲取wsdl文件,另存爲EchoTest.wsdl文件。
使用ActiveBpel Designer開發流程,工程名是TestBpel,bpel文件名是mybpel.bpel,圖形以下所示。
mybpel.bpel代碼以下所示。
<?
xml
version
="1.0"
encoding
="UTF-8"
?>
<!--
BPEL Process Definition
Edited using ActiveBPEL(tm) Designer Version 2.1.0 (http://www.active-endpoints.com)
-->
<
process
xmlns
="http://schemas.xmlsoap.org/ws/2003/03/business-process/"
xmlns:bpws
="http://schemas.xmlsoap.org/ws/2003/03/business-process/"
xmlns:ns1
="http://zhaolong.repace.xidian.cn"
xmlns:xsd
="http://www.w3.org/2001/XMLSchema"
name
="mybpel"
suppressJoinFailure
="yes"
targetNamespace
="http://mybpel"
>
<
partnerLinks
>
<
partnerLink
myRole
="bpel"
name
="MyBpelPLT"
partnerLinkType
="ns1:MyBpelPLT"
/>
<
partnerLink
name
="MyEchoPLT"
partnerLinkType
="ns1:MyEchoPLT"
partnerRole
="echo1"
/>
</
partnerLinks
>
<
variables
>
<
variable
messageType
="ns1:bpelRequest"
name
="bpelRequest"
/>
<
variable
messageType
="ns1:bpelResponse"
name
="bpelResponse"
/>
<
variable
messageType
="ns1:echoRequest"
name
="echoRequest"
/>
<
variable
messageType
="ns1:echoResponse"
name
="echoResponse"
/>
</
variables
>
<
sequence
>
<
receive
createInstance
="yes"
operation
="bpel"
partnerLink
="MyBpelPLT"
portType
="ns1:BpelProxy0"
variable
="bpelRequest"
/>
<
assign
>
<
copy
>
<
from
part
="in0"
variable
="bpelRequest"
/>
<
to
part
="in0"
variable
="echoRequest"
/>
</
copy
>
</
assign
>
<
invoke
inputVariable
="echoRequest"
operation
="echo"
outputVariable
="echoResponse"
partnerLink
="MyEchoPLT"
portType
="ns1:EchoProxy0"
/>
<
assign
>
<
copy
>
<
from
part
="echoReturn"
variable
="echoResponse"
/>
<
to
part
="bpelReturn"
variable
="bpelResponse"
/>
</
copy
>
</
assign
>
<
reply
operation
="bpel"
partnerLink
="MyBpelPLT"
portType
="ns1:BpelProxy0"
variable
="bpelResponse"
/>
</
sequence
>
</
process
>
3. 部署流程
開發完成流程後就能夠部署流程了。選擇File/New/Deployment Descriptor,新建流程描述符,選擇該工程下的mybpel.bpel文件,點擊「下一步」。見到下圖,進行以下圖設置。
而後將該工程export,生成一個bpr文件,文件名爲TestBpel.bpr,將該文件放到Tomcat目錄下的bpr文件夾下,這個文件夾是安裝activebpel生成的。
在瀏覽器中輸入http://localhost:8080/active-bpel/servlet/AxisServlet 便可查看到該流程服務的項,以下圖所示。
4. 運行流程
部署完成流程後,就能夠運行了。運行有兩種方式,一種是代碼方式,一種是使用soup發送方式,發送soup消息給該流程,返回結果。
第一種代碼方式是普通的方式,使用Axis2的服務調用方式調用bpel流程服務便可,這裏就再也不詳細描述,請見個人另外一篇文章:
使用Eclipse+Axis2構建Web Service應用(http://panpan.blog.51cto.com/489034/119204)。 第二種方式是使用soupui軟件,安裝好soupui軟件後,新建工程,輸入名稱和剛纔的bpel流程地址:http://localhost:8080/active-bpel/services/MyBpelPLTService?wsdl,輸入數據。把<in0 xsi:type="xsd:string">?</in0>處的?換爲任意一個字符串,右方就會輸出這個字符串。 運行成功。