实现动态 BPEL 流程(二)

日期: 2007-12-13 来源:TechTarget中国

  DynamicPartnerLink 流程基本上由一个切换组成。它检查调用方传入的“provider”字符串。然后,它将 EndpointReference xml 数据结构指定给 partnerReference 变量,该变量包含与您请求的服务相关的信息。切换后,将 partnerReference 变量指定给 LoanService 合作伙伴链接,随后将调用该合作伙伴链接。

  下面是在输入字符串(服务提供商)为“united”时如何完成该任务:

<assign>
<copy>
<from>
<EndpointReference >
<Address>http://localhost:9700/orabpel/default/UnitedLoan</Address>
<ServiceName
>ns1:UnitedLoan</ServiceName>
</EndpointReference>
</from>
<to variable=”partnerReference”/>
</copy>
</assign>

  <from> 与 </from> 标记之间的所有内容均为指定给 partnerReference 变量的文字 XML。将 partnerReference 变量指定给 LoanService 合作伙伴链接时,该数据将覆盖此合作伙伴链接中指定的地址和服务。

  您已经了解了如何使用 LoanService 合作伙伴链接和和 LoanService.wsdl 调用在运行时选择的服务,下面就可以开始构建一个动态流程了。

  创建一个动态 BPEL 流程

  现在,我们从头创建一个动态 BPEL 流程。

  1. 创建一个新的 BPEL 项目。

  在 JDeveloper 中创建一个新的异步 BPEL 流程项目,并将它命名为“MyDL”。

  2. 从 DynamicPartnerLink 示例中导入 LoanService.wsdl 文件。

  将 LoanService.wsdl 文件从 DynamicPartnerLink 示例复制到 MyDL 项目的工作目录中(默认情况下为 [BPEL_HOME]integrationjdevjdevmyworkWorkspace1MyDL)。(该方法不但可以节省您的时间,而且还免去了您创建自己的动态 WSDL 和子流程服务的麻烦。)然后,在 Applications Navigator 中右键单击 MyDL 项目,选择 Add to Project…。从该目录中选择 LoanService.wsdl 文件,然后单击 OK。

  尚未将 LoanService.wsdl 文件添加到 bpel.xml 文件中。您将在该流程的后面部分中(即实现 EndpointReference 变量时)执行该操作。

  3. 创建贷款服务合作伙伴链接模板。

  右键单击某个泳道,选择 Create Partner Link…。按图 2 所示填写该对话框。要填写 WSDL File 位置,您将使用 Browse WSDL Files from Local File System 按钮(位于手电筒图标的左侧)从 MyDL 项目目录中选择 LoanService.wsdl 文件。单击 OK 创建合作伙伴链接。

  图 2“Create Partner Link”对话框

  4. 创建调用和接收动作来外调 DynamicLoanService 合作伙伴链接。

  将 invoke 和 receive 动作分别从组件模板拖到流程(位于 receiveInput 和 callbackClient 动作之间)中。将一个箭头从 invoke 拖到 DynamicLoanService 合作伙伴链接并创建输入变量。对 receive 执行相同的操作。这些变量应分别命名为 loanInput 和 loanOutput。

  5. 配置输入数据 loanInput。

  通常,您将修改 MyDL.wsdl 文件来从用户那里获得贷款输入数据。此处为简单起见,您只需硬编码一个 assign 来填充 loanInput 变量。将 assign 置于 receiveInput 动作之后并创建一个将值“123456789”(这是一个字符串,而非数字,因此不要忘了为它加上引号)放入 loanInput 的 SSN 元素中的复制规则:

<assign name=”PopulateSSN”>
<copy>
<from expression=”‘123456789′”/>
<to variable=”loanInput” part=”payload” query=”/ns2:loanApplication/ns2:SSN”/>
</copy>
</assign>

  6. 创建 partnerReference 变量。

  在 Structure 窗口中,展开 Variables 树,然后展开 Process 并选择 Variables 项(参见图 3)。

  图 3 展开“Variables”树

  右键单击 Variables 并选择 Create Variable…。将变量名设为“partnerReference”,并将类型设为“Element”。单击元素框旁边的手电筒图标显示类型选择器。在 Project WSDL Files → LoanService.wsdl → Inline Schemas → schema 下找到类型“EndpointReference”(参见图 4)。

  图 4 选择“EndpointReference”

  7. 设置 partnerReference 变量。

  在 DynamicLoanService invoke 前面创建另一个 assign。使用此 assign 设置 partnerReference 变量。最初,您将它硬编码为 UnitedLoan 服务,但您将在下个部分中把它变为动态。

  此处,您可以通过重新格式化 EndpointReference xml 数据避免在 DynamicPartnerLink 示例中遇到的问题。创建一个用这个空 EndpointReference 填充 partnerReference 变量的复制规则:

<EndpointReference
>
<Address/>
<ServiceName/>
</EndpointReference>

  在复制规则的“from”块中,在输入以上信息之前确保选择类型“XML Fragment”。由于在把 partnerReference 变量复制到 DynamicLoanService 合作伙伴链接时将其视为单独的 XML 文档,因此执行此复制才能为 partnerReference 建立命名空间信息。否则,在试图将 partnerReference 变量指定给合作伙伴链接时将发生一个空指针异常。

 

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

相关推荐