如何在BPEL流程文件中管理服务位置

时间:2014-04-21 03:56:41

标签: soa esb bpel

我已经创建了一个bpel进程,并且能够成功调用该服务。

但是,我在WSDL中提到服务的位置,如下所示

<soap:address location="http://localhost:8081/service_sample/services/multiplySoapPort" />

如果位置发生变化,是否需要更改wsdl文件?

还是有其他方法来处理这种情况吗?

我是SOA世界的新宠,BPEL,ESB。我在这里学到什么并申请了什么?

专家可能听起来很愚蠢,但仍然想知道如何克服这个问题。

我正在使用JBoss SOA Platform 5.2。 (BPEL对所有供应商都是一样的。)

1 个答案:

答案 0 :(得分:2)

BPEL本身仅使用WSDL中与平台无关的部分:partnerlink指的是指向porttype(而不是服务!)的partnerlink类型。实际调用哪个服务的定义超出了BPEL标准,部分属于部署。 JBoss使用Apache ODE AFAIK的定制版本。对于ODE部署描述符,您可以在部署中指定端口和服务。引擎直接从服务元素获取端点。

如果您希望以后更灵活地更改端点,则有两种选择:

  1. 使用某种形式的ESB(虽然你可以使用它,但这并不一定意味着高端产品。在某些项目中我们也使用一个小的Apache Camel Wrapper ......):ESB层提供所谓的端点透明性:在流程部署中,您将流程配置为调用ESB层,而ESB层又调用实际服务(路由)。如果实际服务的位置发生变化,您可以在ESB中更改路由规则,并保留BPEL流程和所有其他消费者。

  2. 在BPEL文件中,将端点直接分配给合作伙伴链接。如果它只是关于配置,我不会喜欢这个解决方案。您需要从任何地方读取端点位置,并将其读取到partnerlink。您需要分配给partnerlink的XML是这样的:

    &lt; sref:service-ref xmlns:sref =&#34; http://docs.oasis-open.org/wsbpel/2.0/serviceref"&gt; &lt; EndpointReference xmlns =&#34; http://www.w3.org/2005/08/addressing"&gt;     &LT;地址&gt;&YourNewEndpoint LT; /地址&gt; &LT; / EndpointReference的&GT; &LT; / SREF:服务-REF&GT;

  3. 希望这有帮助!

    更新: 以下是评论中请求的完整分配活动(我无法以某种方式在评论中添加此内容):

    <bpel:assign>
       <bpel:copy>
         <bpel:from>
           <bpel:literal>
             <sref:service-ref xmlns:sref="http://docs.oasis-open.org/wsbpel/2.0/serviceref">
               <EndpointReference xmlns="http://www.w3.org/2005/08/addressing">
                 <Address>YourNewEndpoint</Address>
               </EndpointReference>
             </sref:service-ref>
           </bpel:literal>
         </bpel:from>
         <bpel:to partnerLink="YourPartnerLink"/>
       </bpel:copy>
    </bpel:assign>