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

Reply via email to