You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by James M Snell <ja...@us.ibm.com> on 2002/09/07 01:36:49 UTC

[Vote] Re: Asynchronous Transport in Apache Axis, JMS and beyond

I like the basic approach and have a proposal.

For the Axis 1.0 release, I'd like to introduce my initial prototype (with 
it's several flaws) as a "Preview".  Not perfect, but better than what's 
currently available and functional.  I just ran through all of the 
functional tests and everything checks out.  The code works, the tests 
work, etc etc.  Then, for post 1.0, we can work on a more fully fleshed 
out approach that brings together the various ideas that have been 
discussed in this thread (specifically, those put forth by the Sonic 
folks, Alek and Steve).

Please vote -1 or +1 .

- James Snell
     IBM Emerging Technologies
     jasnell@us.ibm.com
     (559) 587-1233 (office)
     (700) 544-9035 (t/l)
     Programming Web Services With SOAP
         O'Reilly & Associates, ISBN 0596000952

     Have I not commanded you? Be strong and courageous. 
     Do not be terrified, do not be discouraged, for the Lord your 
     God will be with you whereever you go.    - Joshua 1:9

"Steve Loughran" <st...@iseran.com> wrote on 09/06/2002 02:52:38 PM:

> ----- Original Message -----
> From: "Aleksander Slominski" <as...@cs.indiana.edu>

> > java.nio is much more lower level than what i was thinking about
> > (it can be useful to implement efficient web services server but
> > i do not think it is currently under consideration in AXIS ...).

> yeah, it'd be slick if tomcat picked it up. There is always axis client 
side
> transport to consider tho'...

> > instead i wanted something that is _like_ select but to
> > track asynchronous responses, here is how it could work:
> >
> > // create select() capable object
> > AsyncCallController selector = service.createAsyncCallController();
> >
> > // start first async call
> > Call     call1   = (Call) service.createCall();
> > call1.setProperty(AsyncCall.ASYNC_CALL_PROPERTY, new Boolean(true));
> > call1.setTargetEndpointAddress( new java.net.URL(endpoint1) );
> > call1.setOperationName( new QName("namespace", "getQuote"));
> > call1.setProperty(AsyncCall.ASYNC_CALL_SELECTOR, selector)
> > call1.invoke( new Object[] { "IBM" } );
> >
> > // start second async call
> > Call     call2   = (Call) service.createCall();
> > call2.setProperty(AsyncCall.ASYNC_CALL_PROPERTY, new Boolean(true));
> > call2.setTargetEndpointAddress( new java.net.URL(endpoint2) );
> > call2.setOperationName( new QName("namespace", "doFoo"));
> > call2.setProperty(AsyncCall.ASYNC_CALL_SELECTOR, selector)
> > call2.invoke( new Object[] { "IBM" } );
> >
> > // now let wait for first response from call1 or call2
> > while(selector.hasOutstandingCalls()) {
> >    try {
> >       Call call = selector.waitForAsyncreponse(1000);
> >        if(call == call1) {
> >            // this is reposnse for call1
> >            System.out.println("this is reponse for call1
> "+call.getReturnValue());
> >        } else if(call == call2) {
> >            System.out.println("this is reponse for call2
> "+call.getReturnValue());
> >        }
> >        }
> >    } catch(InterruptedException ex) {
> >    }
> > }
> > System.out.println("done!");
> >
> > i think that this would allow user code to create N asynchronous
> > requests and efficiently wait and process async responses.

> That would work.