Hi Did you manage to express the asyncronous in bpel with replyTo header ?
Håkon 2009/10/14 Milinda Pathirage <[email protected]> > Hi Fillip, > > I am going to try your scenario today. I also want to use the same > scenario. > I'll let you know the progress. > > Thanks > Milinda. > > On Fri, Oct 9, 2009 at 9:54 PM, Filip Majernik <[email protected] > >wrote: > > > Hi everybody, > > first of all thank you all guys for helping and sorry for the delay. I've > > been testing the behavior with asynchronous Web Services and got this > > results. > > > > 1.) The first solution I tried with copying the endpoint references to > the > > partnerlink didn't work (as mentioned in the first email), but according > to > > the WS-Addressing recommodation, it's not even supposed to, as there is > no > > such element like wsa:ReplyTo in the EPR definition. > > > > 2.) Then I tried to somehow implement the solution from Mark (thanks > again > > for that idea). However, I haven't found anything about that in docs. So > > this is what I've tried: > > - the web service should have two operations: one for invoke and > > another one for callback > > - However, I haven't managed to implement a service like that for > > axis2. According to this > > http://www.ibm.com/developerworks/webservices/library/ws-axis2/ you just > > have to change the message receiver in service.xml in order for that > > service to act asynchronously (in that article, they say it's supposed to > > be > > org.apache.axis2.async.AsyncMessageReceiver, but that cannot be > > instantiated, you have to use this one > > org.apache.axis2.rpc.receivers.RPCInOutAsyncMessageReceiver). > > - so I implemented a service with one operation, with asynchronous > > message receiver, tested that web service with soapUI and wsa:ReplyTo > > header > > set up to some address and the asynchronous call worked > > - I set up a new portType 'serviceCallbackPT' with an operation > > 'processServiceCallback' in my BPEL process > > - I changed the partnerLinkType to have two roles > > > > <plnk:partnerLinkType name="MyServicePLT"> > > <plnk:role name="serviceProvider" portType="remoteServicePortType"/> > > <plnk:role name="serviceConsumer" portType="serviceCallbackPT"/> > > </plnk:partnerLinkType> > > > > - I changed the partnerLink to have following roles > > > > <bpel:partnerLink name="RemoteServicePartner" > > partnerLinkType="MyServicePLT" partnerRole="serviceProvider" > > myRole="serviceConsumer" /> > > > > - I changed the invoke operation to invoke the webservice without > > specifying output variable > > - invoke was then followed by receive from the portType defined for > > myRole 'serviceConsumer' from the partnerLink > > > > I runned the process, but wsa:ReplyTo header was still set to > > http://www.w3.org/2005/08/addressing/none. So I looked in the ode source > > code (ode 1.3.2) and found out following. In the class > > org.apache.ode.axis2.SoapExternalService in the method**** writeHeader() > > the > > wsa:ReplyTo header is being set up. The url from the EPR for myRole is > set > > to wsa:ReplyTo only when jms.reply.destination property for that EPR is > > user > > defined (and in that case it looks like > > 'jms:/user-defined-destination-address') or the url contains (or starts > > with) 'jms:/'. I have no idea why (and actually I don't know what jms is > > :)). So I've changed the code to set up the url from EPR also in the > other > > case and it worked. The service was invoked with the wsa:ReplyTo header > > being set up to the address of the 'serviceCallbackPT' (portType for > > myRole). > > > > However, ode wasn't able to process the response message, because he > > couldn't find the operation for the response message (that actually > happens > > in axis message processing, so ode didn't even get the message), but I > > think > > it is ws-addressing issue, as the wsa:Action in the message was indeed > set > > to false name. > > > > So my result is, that in ode 1.3.2 (release version) it is not possible > to > > invoke an asynchronous service, beacuse the wsa:ReplyTo header is not set > > correctly. If anyone knows something more about this issue, please let me > > know. > > > > Bye and thank you again, > > Filip > > > > 2009/10/9 Håkon Sagehaug <[email protected]> > > > > > Hi Mark, > > > > > > I wanted to try your approach, but I'm not getting the hole picture I > > think > > > . My test setup is very easy. I've got a echo service, echos the users > > > output back, this is of course not a long running task but I sleep it > > for > > > lets say 1 minute. Here is my wsdl > > > > > > <message name="SayHiRequestMsg"> > > > <part name="parameters" element="tns:SayHi"> > > > </part> > > > </message> > > > <message name="SayHiResponseMsg"> > > > <part name="parameters" element="tns:SayHiResponse"> > > > </part> > > > </message> > > > <portType name="EchoServicePortType"> > > > <operation name="SayHi"> > > > <documentation>Just a simple echo operation that returns the > > > same > > > string that is given to it.</documentation> > > > <input message="tns:SayHiRequestMsg"> > > > </input> > > > </operation> > > > </portType> > > > > > > <portType name="EchoServiceCallbackPortType"> > > > <operation name="onResult"> > > > <input message="tns:SayHiResponseMsg"> > > > </input> > > > </operation> > > > </portType> > > > > > > > > > <binding name="EchoServiceBinding" type="tns:EchoServicePortType"> > > > <soap:binding style="document" > > > transport="http://schemas.xmlsoap.org/soap/http" /> > > > <operation name="SayHi"> > > > <soap:operation > > > soapAction=" > http://www.bccs.uib.no/EchoService.wsdl/SayHi > > " > > > /> > > > <input> > > > <soap:body use="literal" /> > > > </input> > > > <output> > > > <soap:body use="literal" /> > > > </output> > > > </operation> > > > </binding> > > > > > > <binding name="EchoServiceCallBackBinding" > > > type="tns:EchoServiceCallbackPortType"> > > > <soap:binding style="document" > > > transport="http://schemas.xmlsoap.org/soap/http" /> > > > <operation name="onResult"> > > > <soap:operation > > > soapAction=" > > > http://www.bccs.uib.no/EchoService.wsdl/onResult" > > > /> > > > <input> > > > <soap:body use="literal" /> > > > </input> > > > </operation> > > > </binding> > > > <service name="EchoService"> > > > <documentation>This WSDL file describes a simple Echo Service > that > > > echoes a string sendt to it. This service is intended > > primarily > > > for > > > testing purposes.</documentation> > > > <port name="EchoServiceLocal" binding="tns:EchoServiceBinding"> > > > <soap:address location=" > > > http://129.177.20.77:8080/axis2/services/EchoService" /> > > > </port> > > > </service> > > > > > > > > > I've got a schema that defines the messages. As you see I've got two > > ports, > > > one starting the ws and the other for the callback. So now I'm not sure > > > what > > > to do now. Should the service only bind to the binding for the sayhi > > > operation, not the call back? I now want to model this in BPEL I guess > > it > > > would look something like this > > > > > > <invoke operation="ech:SayHi" portType="ech:EchoServicePortType" > > > variable="ech:SayHiRequest" /> > > > > > > and receive like this > > > > > > <receice operation="ech:onResult" > > > portType="ech:EchoServiceCallbackPortType" > > > variable="ech:SayHiResonse" /> > > > > > > My questions is then, does ode send ws-addressing header so that the ws > > > knows where to respond(1)? What would the service then respond with(2)? > > > Since the sayHi operation does not return the actual result, just empty > > or > > > a > > > message id. How should the service be implemented, should it implement > > > onResult? > > > > > > Hope you can help with this? I also wanted to first model this with > > > "normal" > > > java client. > > > > > > cheers, Håkon > > > > > > Then my question is > > > 2009/10/8 Ford, Mark <[email protected]> > > > > > > > With respect to your comment: > > > > > > > > “the invoke will be called and waits and times out” > > > > > > > > It sounds like you’re trying to model a long running operation as a > > > > request/response operation within WSDL. If you do this, then you’ll > > most > > > > likely experience timeouts at the transport layer. A better > > > implementation > > > > is to split this long running operation into two port types. One to > > make > > > the > > > > request to start the work for the service and the other to provide an > > > > operation for the service to call you back with the response. The > start > > > > operation would be a one-way operation or a request-response with a > > > simple > > > > ACK as the response (perhaps with some values to use for > correlation). > > > This > > > > would be modeled in BPEL by an invoke followed by a receive activity. > > > > > > > > You can create a partnerLinkType to model this by having a partner > role > > > for > > > > the service you’re invoking and a myRole for your callback point. In > > this > > > > way, the relationship between the two port types is made explicit. > > > > > > > > As for ODE, I have not tested this but I would think that there might > > be > > > a > > > > facility whereby you could have the endpoint reference for the > > > partnerlink’s > > > > myRole automatically populate as the reply-to header when invoking a > > > > service. It seems reasonable that the service invocation layer would > > > support > > > > this but you’d have to check the docs or the source code to be sure. > > > > > > > > > > > > On 10/8/09 4:18 AM, "Michael Dondrup" <[email protected]> > > > wrote: > > > > > > > > Dear Filip, > > > > we are currently working on exactly the same problem, because it > would > > > > be simple and neat solution. > > > > However we didn't get there so far, so maybe it could be interesting > > > > to have closer look at what it is exactly that doesn't work. > > > > Do you have a process defined, that fails? Then maybe you could send > > > > the process files so we could have a look it? > > > > > > > > We found that the WS-addressing did not seem to work with axis2 1.4.1 > > > > and you should try axis2 1.5 on the service side. > > > > To enable wsa support and asynchronous invocation add the following > to > > > > your services.xml within the service tags: > > > > > > > > <module ref="addressing" /> > > > > <parameter name="messageReceiver.invokeOnSeparateThread">true</ > > > > parameter> > > > > > > > > There will be other problems however: > > > > - providing the correct port, role and partnerlink type, in the > bpel > > > > process for the service to reply to > > > > - If I try to use a <invoke> and <receive> secence for invoking the > > > > service, the invoke waits for the service to reply even though the > > > > wsa:replyto works and the invoke will be called and waits and times > > > > out. > > > > The documentation on this topic is unfortunately totally incomplete. > > > > Maybe we can try to resolve this together. > > > > Best > > > > Michael > > > > > > > > Am 07.10.2009 um 20:40 schrieb Filip Majernik: > > > > > > > > > Hi, > > > > > I want to invoke an asynchronous Web Service from ode, but I cannot > > > > > figure > > > > > out how to change wsa:ReplyTo header. I've read about the EPR > > > > > configuration > > > > > on the ode website and tried something like this: > > > > > > > > > > <bpel:assign> > > > > > <bpel:copy> > > > > > <bpel:from> > > > > > <bpel:literal> > > > > > <wsa:EndpointReference xmlns:wsa=" > > > > > http://www.w3.org/2005/08/addressing"< > > > http://www.w3.org/2005/08/addressing%22> > > > > > > > > > > <wsa:Address> > > > > > http://localhost:8080/axis2/services/MyService</wsa:Address>< > > > http://localhost:8080/axis2/services/MyService%3C/wsa:Address%3E> > > > > > <wsa:ReplyTo><wsa:Address> > > > > > http://localhost:8080/axis2/services/ReplyToService > > > > > </wsa:Address></wsa:ReplyTo> > > > > > </wsa:EndpointReference> > > > > > </bpel:literal> > > > > > </bpel:from> > > > > > <bpel:to partnerLink="testPartnerLink"/> > > > > > </bpel:copy> > > > > > </bpel:assign> > > > > > > > > > > but it isn't working. Does anyone maybe have a working example of > > > > > changing > > > > > the wsa:ReplyTo header (and invoking and asynchronous service) when > > > > > invoking > > > > > a service??? Or is it possible at all? > > > > > > > > > > Btw. my configuration is: > > > > > apache ode 1.3.2 > > > > > the webservice I am invoking is running on apache axis 1.4 > > > > > > > > > > Thank you guys in advance. > > > > > Filip > > > > > > > > > > > > > > > > > > > > > > > > > > > > -- > > > > Mark Ford > > > > MIT Lincoln Laboratory > > > > 244 Wood Street > > > > Lexington MA 02420 > > > > (781) 981-1843 > > > > > > > > > > > > > > > > -- > > > Håkon Sagehaug, Scientific Programmer > > > Parallab, Bergen Center for Computational Science (BCCS) > > > UNIFOB AS (University of Bergen Research Company) > > > > > > > > > -- > Milinda Pathirage > Senior Software Engineer & Product Manager WSO2 BPS; http://wso2.org/bps > WSO2 Inc.; http://wso2.com > E-mail: [email protected], [email protected] > Web: http://mpathirage.com > Blog: http://blog.mpathirage.com > -- Håkon Sagehaug, Scientific Programmer Parallab, Bergen Center for Computational Science (BCCS) UNIFOB AS (University of Bergen Research Company) [email protected], phone +47 55584125
