2014-11-21 44 views
2

我有一系列web服務端點,它們對我的實體提供基本的CRUD操作。對於情況下,利用這些方法,WS? userService WSDL --getUser(ID) --getUsers --adduser(用戶) --removeUser(ID)OpenESB CASA:單個WSDL中的多個操作

我想創建的OpenESB一個CA爲所有這些操作提供一個代理端點。

因此,我所做的是在NetBeans上創建一個新的BPEL模塊,然後添加一個新的WSDL文檔作爲我的描述符。然後我添加多個操作到這個WSDL。

然後我爲在後端WS中實現的每個操作創建一個BPEL。

這有效地爲我提供了一個帶有多個操作的結果輸出WSDL。

將此BPEL模塊添加到我的CA時出現問題;將端口鏈接到PartnerLink時,我只能在每個端口上執行一次。你可以更清楚地看到它在此擷取畫面:

enter image description here

我只能跟蹤一個「箭頭」從aulaServicesPort到一個單一的合作伙伴鏈接,而我需要鏈接到的截圖所示的兩個操作。

這一結果在多個WSDL,每一個操作,同時我想創建不大不小的「樞紐」 WSDL包括所有相關操作的(在我前面的例子,這將是一個用戶CA與所有給定的操作)

回答

2

我不認爲你可以在CA中解決這個問題,但你可以通過修改BPEL流程來解決它。

在當前結構中實現此目的的最佳方法是將您的應用程序減少到單個進程,只有一個myRolepartnerLink。這意味着您不應該使用接收/回覆對來創建多個進程,而應該使用初始的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> 
+0

我不能因爲我的portType在ParnterLinkType上都是相同的。我們可以在聊天時討論這個嗎?我會告訴你我的BPEL。 – MichelReap 2014-11-27 16:31:39

+0

是的,我們可以(只要我在我的電腦上)。你可以創建一個房間並邀請?如果您使用相同的portType,那麼我不完全明白爲什麼您使用多個partnerLinkTypes/partnerLinks。 – joergl 2014-11-28 09:30:22

+0

加入我http://chat.stackoverflow.com/rooms/65821/openesb – MichelReap 2014-11-28 10:26:11