2

我有一系列 Web 服务端点,它们在我的实体上提供基本的 CRUD 操作。例如,采用以下 WS 方法: userService?wsdl --getUser(id) --getUsers --addUser(User) --removeUser(id)

我想在 OpenESB 上创建一个 CA,为所有这些操作提供一个代理端点。

所以我要做的是在 NetBeans 上创建一个新的 BPEL 模块,然后我添加一个新的 WSDL 文档,这将是我的描述符。然后,我将多个操作添加到此 WSDL。

然后,我为后端 WS 中实现的每个操作创建一个 BPEL。

这有效地为我提供了具有多个操作的结果输出 WSDL。

将此 BPEL 模块添加到我的 CA 时出现问题;将端口链接到 PartnerLink 时,每个端口只能执行一次。您可以在此屏幕截图上更清楚地看到它:

在此处输入图像描述

我只能从 aulaServicesPort 跟踪一个“箭头”到单个 PartnerLink,而我需要将其链接到屏幕截图中显示的两个操作。

这会导致多个 WSDL,每个操作一个,而我想创建一种“集线器”WSDL,包括所有相关操作(在我之前的示例中,这将是具有所有给定操作的用户 CA)

4

1 回答 1

2

我认为您无法在 CA 中解决该问题,但您可能可以通过修改 BPEL 流程来解决它。

在当前结构中实现这一点的最佳方法是将您的应用程序简化为一个进程,只有一个myRole partnerLink. 这意味着您应该构建一个具有初始pick分支和多个并行分支的进程,而不是让多个进程具有接收/回复对。粗略的结构如下所示:

<pick name="ServiceSelector" createInstance="yes">

     <!-- Each onMessage replaces one of your original processes -->
     <onMessage partnerLink="aulaLink" operation="getAula" portType="aulaServicesPortType">
         <sequence name="Sequence">
              <!-- call the actual service for getAula-->
              <reply name="ReplyToGetAula" partnerLink="aulaLink" operation="getAula" portType="aulaServicesPortType"/>
         </sequence>
    </onMessage>

     <onMessage partnerLink="aulaLink" operation="getAulas" portType="aulaServicesPortType">
         <sequence name="Sequence">
              <!-- call the actual service for getAulas-->
              <reply name="ReplyToGetAula" partnerLink="aulaLink" operation="getAulas" portType="aulaServicesPortType"/>
         </sequence>
    </onMessage>

</pick>
于 2014-11-27T10:14:29.777 回答