正 文

实现动态 BPEL 流程


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


  提高动态流程的效率

  正如您在前一个示例中看到的,LoanService.wsdl 列出了在运行时动态调用的所有可用服务。可以通过在每次添加新服务时消除修改业务流程的需要来丰富此业务流程的动态机制。新服务在 WSDL 中定义,并重新部署 WSDL 以启用新服务。

  您可以将此动态机制再提高一个层次:WSDL 驱动的方法要求在设计时就知道新服务的位置,但您可以使流程更独立于 WSDL。该方法不需要在每次添加服务时重新部署 WSDL。

  在运行时消除地址相关性。 服务地址可能经常变化,但您可以使动态流程在运行时不受这些变化的影响。如果只指定一个服务名称而未指定地址,则将从 WSDL 中检索服务地址。为了进行演示,我们从模板复制规则的 XML 片段中删除地址的 stub (<Address/>)。由于您要很快恢复此地址信息,因此在执行此操作之前备份 MyDL.bpel 文件。此外,从 SetupPartnerLink <assign> 语句中删除操作该地址的复制规则。SetupPartnerlink <assign> 现在应如下所示:

<assign name="SetupPartnerlink">
<copy>
<from>
<EndpointReference xmlns="http://schemas.xmlsoap.org/ws/2003/03/addressing"
xmlns:ns1="http://services.otn.com">  
<ServiceName/>
</EndpointReference>
</from>
<to variable="partnerReference"/>
</copy>
<copy>
<from expression="'ns1:UnitedLoan'"/>
<to variable="partnerReference" query="/ns3:EndpointReference/ns3:ServiceName"/>
</copy>
</assign>

  现在,再次部署并运行 MyDL 流程。尽管缺少地址,它仍可以成功地调用 UnitedLoan 子流程。可以通过在 BPEL 控制台中查看流程树视图来验证该动作。其结果是,可以通过只部署一个新的 WSDL(它将包含已修改的服务地址信息)来修改动态流程的行为。需要权衡的是,添加新服务将需要修改和重新部署 WSDL。

  独立于 WSDL 服务。 在某些情况下,除了有许多要管理的服务以外,您可能还遇到这样的情况:服务地址经常变化,或要避免对 WSDL 文件进行频繁地更新。允许流程在运行时指定端点引用的地址即可解决该问题。

  返回前一个版本的 MyDL.bpel 文件(该文件包含地址操作复制规则)。从模板 XML 片段和 ServiceName 复制规则中删除服务信息,而不是删除地址信息。<assign> 现在应如下所示:

<assign name="SetupPartnerlink">
<copy>
<from>
<EndpointReference xmlns="http://schemas.xmlsoap.org/ws/2003/03/addressing"
xmlns:ns1="http://services.otn.com">
<Address/>
</EndpointReference>
</from>
<to variable="partnerReference"/>
</copy>
<copy>
<from expression="'http://localhost:9700/orabpel/default/UnitedLoan'"/>
<to variable="partnerReference" query="/ns3:EndpointReference/ns3:Address"/>
</copy>
</assign>

  运行该示例时,即使在未指定服务名称的情况下,此流程仍正确调用 UnitedLoan 服务。您可以创建只包含一个虚拟服务的 DynamicPartnerLink WSDL,并且即便某些服务不在 WSDL 中,只要在运行时知道这些服务的地址就可以调用它们。如果由于某种原因未指定地址,则它将使用 WSDL 中默认服务的地址。因此,一个好办法就是让该服务指向实际的 BPEL 流程(一个可能记录错误或发送通知的流程)。

  构建异常处理框架时就可以使用该技巧。如果有多个提供给定服务的可用地址(如本地服务器和远程冗余服务器),则可以在对主服务器的调用失败时使用异常处理程序覆盖端点引用中的地址信息并重试服务调用切换到第二个地址。

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

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

热 点 导 读
特 别 推 荐