天天看點

ActiveBPEL流程的部署關鍵檔案

部署就是把流程及其相關的檔案釋出到ActiveBPEL server中去。在部署時,ActiveBPEL将完成下面的事情:

1.        如果部署時沒有指定流程在将來生效,那麼流程将馬上可以被執行;

2.        流程和部署的資訊将被置入管理控制台,使用者可以檢視并管理;

3.        流程相關的資訊将存入資料庫中;

4.        如果部署出錯,将給出錯誤資訊。

ActiveBPEL引擎如果要執行一個流程,需要将BPEL檔案和好幾個輔助檔案打包到一個BPR(Business Process aRchive)檔案中。Bpr檔案包括如下資訊:

1.        BPEL檔案(.bpel)

2.        BPEL流程中使用的wsdl檔案(.wsdl)

3.        資源目錄檔案(包括wsdl中使用的本地XSD檔案和XSL檔案)

4.        流程部署描述符(.pdd檔案)

5.        夥伴定義檔案(可選,.pdef檔案)

BPEL檔案請參考BPEL标準,流程部署描述符檔案将另外單獨說明,下面讨論資源目錄檔案和夥伴定義檔案。

資源目錄檔案

ActiveBPEL通過資源目錄檔案來查找流程需要的WSDL、XSD等資源檔案。下面的例子顯示了catalog.xml的一個entry的文法:

<catalog>

<resourceEntry location="string" classpath="slash/separated/classpath/filename.wsdl"/>

</catalog>

Location屬性映射到資源檔案的位置。它可以是pdd檔案中resourceReferences塊中的<resource>元素的location屬性值;也可以是wsdl檔案中<import>元素的location屬性值。

在部署時加載資源檔案的時候,ActiveBPEL引擎從pdd檔案中讀取resourceReferences,然後用<resource>元素的location屬性作為Key,到catalog.xml中來查找有無對應的值。如果找到,引擎就會從對應的classpath加載相應的資源;如果沒有找到,那麼就認為location是一個絕對URL,并從這個位置來加載資源。

Classpath屬性指定了資源檔案在bpr檔案中的位置,它是相對于bpr根目錄的一個位置。

夥伴定義檔案

夥伴定義檔案對每個服務夥伴定義了端點資訊。對于夥伴實作的每個夥伴連結類型,該檔案定義了一個端點引用。

比如有個叫“國家銀行”的服務夥伴,它向BPEL流程發送一個請求,想評估向某個客戶發放貸款的風險。BPEL流程在評估風險後,将查找正确的服務端點,以回調“國家銀行”。這是非常有用的,因為“國家銀行”可能還有其他的服務連結類型,比如匯率調整或者保險請求等。夥伴定義檔案可以為每個夥伴連結類型定義一個端點引用。

使用者可以直接在bpr檔案中加入.pdef檔案作為夥伴定義檔案;如果夥伴定義檔案修改了,并不需要重新部署BPEL流程,隻需要部署夥伴定義檔案就可以。樣例檔案如下:

<?xml version='1.0' encoding="UTF-8"?>

<partnerDefinition    principal="Acme" xmlns="http://schemas.active-endpoints.com/pdef/2004/10/pdef.xsd"

xmlns:wsa="http://schemas.xmlsoap.org/ws/2003/03/addressing"

xmlns:s="http://www.active-endpoints.com/wsdl/store">

<partnerLinkType name="s:storeLT">

<role name="customer">

<wsa:EndpointReference xmlns:store="http://www.activeendpoints.com/wsdl/store">

<wsa:Address>store:anyURI</wsa:Address>

<wsa:ReferenceProperties xmlns:Credentials="http://active-endpoints/endpoint-credentials">

<Credentials:username>MyUser</Credentials:username>

<Credentials:password>MyPassword</Credentials:password>

</wsa:ReferenceProperties>

<wsa:ServiceName PortName="StorePort">store:StoreService</wsa:ServiceName>

</wsa:EndpointReference>

</role>

</partnerLinkType>

</partnerDefinition>