我有一系列webservices端点,可以为我的实体提供基本的CRUD操作。例如,采用以下WS方法: userService?WSDL --getUser(ID) --getUsers --adduser(用户) --removeUser(ID)
我想在OpenESB上创建一个CA,为所有这些操作提供单个代理端点。
所以我要做的是在NetBeans上创建一个新的BPEL模块,然后我添加一个新的WSDL文档,它将成为我的描述符。然后我向这个WSDL添加了多个操作。
然后,我为后端WS中实现的每个操作创建一个BPEL。
这有效地为我提供了具有多个操作的结果输出WSDL。
将此BPEL模块添加到CA时出现问题;将端口链接到PartnerLink时,每个端口只能执行一次。你可以在这个屏幕上更清楚地看到它:
我只能跟踪一个"箭头"从aulaServicesPort到单个PartnerLink,我需要将它链接到截图上显示的两个操作。
这导致多个WSDL,每个操作一个,而我想创建一个" hub" WSDL包括所有相关操作(在我之前的示例中,将是具有所有给定操作的用户CA)
答案 0 :(得分: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>