正 文

实现动态 BPEL 流程


www.7dspace.com  更新日期:2006-1-15 2:12:46  七度空间


  了解 DynamicPartnerLink 示例

  DynamicPartnerLink 示例是了解合作伙伴链接和端点引用这两个基本概念的十分好的资源。它允许您从三个贷款服务提供商(United、Star 和 American)中指定一个,并根据流程输入动态调用相应的服务。

  在本文中,您将使用 Oracle BPEL 流程管理器 10.1.2 的 GA 版本中提供的示例;您将在目录 [BPEL_HOME]\samples\references\DynamicPartnerLink 中找到它。我使用 10.1.2 版的补丁 1 开发并测试了本文介绍的代码。

  注意:当您初次加载和部署 Dynamic Partner Link 示例时,请不要在 Oracle JDeveloper 可视化设计器中对代码进行任何修改,只按原样部署它即可。如果要进行并保存这样的更改,JDeveloper 将通过引入换行符基于它的标准 XML 布局重新格式化 BPEL 代码。JDeveloper 修改<EndpointReference> 数据内部的 <Address> 和 <ServiceName> 标记,在 </Address> 和 </ServiceName> 结束标记之前添加一个换行符。附加到这些元素内部的数据的换行符用于中断绑定。如有必要,可以删除服务和地址上位于结束标记之前的换行符来更正该问题。稍后,我将介绍另一个方法来填充不受 JDeveloper 所应用格式影响的端点引用。

  从控制台启动该示例时,将要求您填写贷款流程演示的标准贷款应用程序数据(SSN、电子邮件等)以及 “provider”域。在 provider 字符串中指定以下值之一:united、american 或 star。分别使用这三个值运行该示例,查看它的运行情况。该流程将动态调用相应的贷款提供商。也可以在 provider 字符串中使用某个其他值或根本不使用值来试用该示例。

  要了解该动态流程如何工作,首先必须分析 DynamicPartnerLink.bpel 文件。该文件中第一个比较有意义的项是贷款服务合作伙伴链接:

<partnerLink name="LoanService" partnerLinkType="services:LoanService"
myRole="LoanServiceRequester" partnerRole="LoanServiceProvider"/>

  该链接指定了一个通用贷款服务名称和类型 (services:LoanService),而没有定义特定的贷款服务(如 UnitedLoan)。LoanService 合作伙伴链接是在 LoanService.wsdl 文件中定义的;导入该文件的方法是将它添加到 bpel.xml 文件的 <partnerLinkBindings> 部分中,如下所示:

<partnerLinkBinding name="LoanService">
<property name="wsdlLocation">LoanService.wsdl</property>
</partnerLinkBinding>

      在 LoanService.wsdl 文件中您将发现,每个可用的贷款供应商都在这个 WSDL 文件中定义为 <service>,如下所示。

<service name="StarLoan">
<port name="LoanServicePort" binding="tns:LoanServiceBinding">
<soap:address location="http://localhost:9700/orabpel/default/StarLoan"/>
</port>
</service>
 
<service name="UnitedLoan">
<port name="LoanServicePort" binding="tns:LoanServiceBinding">
<soap:address location="http://localhost:9700/orabpel/default/UnitedLoan"/>
</port>
</service> 
 
<service name="AmericanLoan">
<port name="LoanServicePort" binding="tns:LoanServiceBinding">
<soap:address location="http://localhost:9700/orabpel/default/AmericanLoan"/>
</port>
</service>

      必须应认识到,并不存在“真正”名为“LoanService”的服务。而 LoanService 只是一个模板,不过从中可以选择真正的贷款提供商服务(UnitedLoan、AmericanLoan、StarLoan)。只要真正的服务全都支持模板 WSDL 中定义的同一接口(相同的数据类型、消息、角色、端口和合作伙伴链接类型),该方法便会有效。由于此处的更改可能会彻底影响许多流程,因此必须仔细地定义该模板。

      LoanService.wsdl 文件定义了所有服务选项,父流程可以从中选择要动态调用的选项。该模型要求在添加每个新服务时重新部署 WSDL 文件。与修改父流程以使每个新服务都包含新合作伙伴链接和路由逻辑相比,该方法有了很大的改进。(稍后,您还将了解如何将服务端点与 WSDL 文件解除关联。)
返回到 DynamicPartnerlink.bpel 文件,我们要了解的下一个特性是 partnerReference 变量:

<variable name="partnerReference" element="wsa:EndpointReference"/>

      该变量的类型为 EndpointReference。它包含一个命名空间 wsa,后者在该文件的顶部定义为

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

      WS-Addressing 标准提供了 EndpointReference 类型的模式。可以使用 <assign> 将此类变量指定到合作伙伴链接以便修改地址和服务信息,这样就可以在运行时修改合作伙伴链接了。

7页,页码:[1] [2] [3] [4] [5] [6] [7] 

上一篇:SOA 重用工程
下一篇:ADO.NET连接池超时
标题:实现动态 BPEL 流程 作者: 来源:Oracle
收藏此页】【打印】【关闭
站 内 搜 索
 

热 点 导 读
特 别 推 荐