BPEL流程的状态与形式化定义---第二部分:partnerLink与partnerLinkType

partnerLinkType通过定义在会话中每一个服务的角色、说明每一个服务在会话的上下文中为接受数据而提供的端口类型,来刻画两个服务之间的关系。每一个role说明了唯一一个WSDL的端口类型。一个partnerLinkType说明了会话中的两个服务的抽象信息(即portType。角色信息也可以只有一个,因为有的服务能够连接任意形式的服务,对会话中的另一个服务不作要求)。

partnerLink:与业务流程进行交互的服务建模为partnerLink,每一个partnerLink具有一个partnerLinkType类型,不同的partnerLink可以具有相同的partnerLinkType类型。通过名称区分不同的partnerLink,在其作用域内其名称必须唯一。

BPEL流程通过对端点引用的赋值支持partnerLink的动态绑定。因为外部partner可能是有状态的,服务端点信息可能需要加入流程实例相关的信息

partnerLink的生命周期与定义它的processscope一致。

根据BPEL的定义,抽象的服务接口(由portType定义)是不能变化的,而实际的接口(由Port定义)则可以在动态运行时决定。

端点引用(Endpoint Reference)

BPEL严格区分端口类型(portType)和端口(port)。端口类型通过使用抽象的消息定义抽象的功能。端口提供了实际的访问信息,包括通信服务端口和其它的部署相关信息(通过使用扩展元素)例如,用于加密目的的公开密钥。绑定提供了两者的胶合。服务用户必须静态依赖于由端口类型定义的抽象接口,一些包含在port中的定义能够动态发现并使用。

端点引用的基本应用是服务之间端口具体数据的动态通信。一个端口引用能够使得WS-BPEL为具体类型的服务动态选择一个服务提供者,并调用其操作。由于WS-BPEL为一个有状态服务的相关消息提供了一种通用机制(Correlation Set),因此在一般情况下,端点引用只需要包含实例中立(与实例无关)的端口信息就够了。但是,一般情况下,需要在端点引用中包含额外的实例相关标识符。

            myRolepartnerRole端点引用相关的端点引用表现为一个服务引用容器(<serf:service-ref>),这个容器用做包含实际端口引用值的信封。


PartnerLink的实例(选自BPEL2.0规范186页):

  1. PartnerLinkType的定义:

<plnk:partnerLinkType name="auctionHouseAuctionRegistrationServiceLT">

<plnk:role name="auctionRegistrationService" portType="tns:auctionRegistrationPT" /> <plnk:role name="auctionHouse" portType="tns:auctionRegistrationAnswerPT" />

</plnk:partnerLinkType>

下面是一个对消息的定义,在后面partnerLink的赋值中使用

<wsdl:message name="auctionData">

<wsdl:part name="auctionId" type="xsd:integer" />

<wsdl:part name="amount" type="xsd:integer" />

<wsdl:part name="auctionHouseEndpointReference" type="sref:ServiceRefType" />

</wsdl:message>

这里将一个partnerLink和一个WSDL中的portType进行对应,portType说明了一个抽象的接口,这个值是不能改变的。一般情况下要定义两个角色,但是有些时候可以定义只定义一个角色,因为某些服务能够连接其他任意类型的partner,没有任何额外要求。(直白的说,就是第一个partnerLinkType一般情况下要同时说明自己和伙伴分别对应那个角色,但是有时候对伙伴不做要求,这种情况下只要说明第一项自己的角色即可)。

  1. 在流程(一个拍卖服务)中定义partnerLink

<partnerLink name="auctionRegistrationService"

partnerLinkType="as:auctionHouseAuctionRegistrationServiceLT"

myRole="auctionHouse"

partnerRole="auctionRegistrationService" />

  1. 在赋值活动中改变parnerLink

<assign>

<copy>

<from>

<literal>

<sref:service-ref>

<addr:EndpointReference>

<addr:Address> http://example.com/auction/

RegistrationService/

</addr:Address>

<addr:ServiceName> as:RegistrationService

</addr:ServiceName>

</addr:EndpointReference>

</sref:service-ref>

</literal>

</from>

<to partnerLink="auctionRegistrationService" /> //这里只能使用修改partnerRole的值

</copy>

<copy>

<from partnerLink="auctionRegistrationService"

endpointReference="myRole" />

<to>$auctionData.auctionHouseEndpointReference</to>

</copy>

        <assign>

 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值