我已经创建了一个bpel进程,并且能够成功调用该服务。
但是,我在WSDL中提到服务的位置,如下所示
<soap:address location="http://localhost:8081/service_sample/services/multiplySoapPort" />
如果位置发生变化,是否需要更改wsdl文件?
还是有其他方法来处理这种情况吗?
我是SOA世界的新宠,BPEL,ESB。我在这里学到什么并申请了什么?
专家可能听起来很愚蠢,但仍然想知道如何克服这个问题。
我正在使用JBoss SOA Platform 5.2。 (BPEL对所有供应商都是一样的。)
答案 0 :(得分:2)
BPEL本身仅使用WSDL中与平台无关的部分:partnerlink指的是指向porttype(而不是服务!)的partnerlink类型。实际调用哪个服务的定义超出了BPEL标准,部分属于部署。 JBoss使用Apache ODE AFAIK的定制版本。对于ODE部署描述符,您可以在部署中指定端口和服务。引擎直接从服务元素获取端点。
如果您希望以后更灵活地更改端点,则有两种选择:
使用某种形式的ESB(虽然你可以使用它,但这并不一定意味着高端产品。在某些项目中我们也使用一个小的Apache Camel Wrapper ......):ESB层提供所谓的端点透明性:在流程部署中,您将流程配置为调用ESB层,而ESB层又调用实际服务(路由)。如果实际服务的位置发生变化,您可以在ESB中更改路由规则,并保留BPEL流程和所有其他消费者。
在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;
希望这有帮助!
更新: 以下是评论中请求的完整分配活动(我无法以某种方式在评论中添加此内容):
<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>