快速业务通道

关于在weblogic中异步调用webservice - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-22
ing ret = port.endSayHello(result); 10                 System.out.println("result from remote HelloWorld web service: "); 11                 System.out.println(ret); 12             } 13         }catch(Exception e){ 14             e.printStackTrace(); 15         } 16     } 17 18     public void initializeEnv(){ 19         try{ 20             helloService = new HelloWorld_Impl(); 21             port = helloService.getHelloWorldPort(); 22         }catch(Exception e){ 23             e.printStackTrace(); 24         } 25     }

关于在weblogic中异步调用webservice(2)

时间:2010-12-26 BlogJava 走走停停又三年

//listener

1 AsyncInfo asyncInfo = new AsyncInfo(); 2 asyncInfo.setResultListener( new ResultListener(){ 3     public void onCompletion( InvokeCompletedEvent event ){ 4         SimpleTestSoap source = (SimpleTestSoap)event.getSource(); 5         try{ 6             String result = source.endEchoString ( event.getFutureResult() ); 7         } catch ( RemoteException e ){ 8             e.printStackTrace ( System.out ); 9         } 10     } 11 }); 12 echoPort.startEchoString( "94501", asyncInfo );

现在回头看看开篇的问题,客户端线程退出时,如果服务器端还没有处理完,请求结果会怎么办?是否会保存下来?如果这样的客户端很多,服务器内存开销岂不是很大?

要解释这个问题,我们先来看看这种调用方式的流程。对于服务器而言,异步、同步调用是一样的,它只负责接收、处理请求,web service的处理,在服务器端是由weblogic.webservice. server.servlet. WebServiceServlet .serverSideInvoke(WebService webservice, Binding binding, HttpServletRequest request, HttpServletResponse response)。同步、异步的处理完全是在客户端完成的,下面就看看客户端的调用流程。

FutureResult result = port.startSayHello(3, "test", null); //it''s a JAX-RPC stub, and it extends StubImpl.java ====> weblogic.webservice.core.rpc.StubImpl._startAsyncInvoke( String method, Map args, AsyncInfo wsAsyncContext ) //in this method, Operation is retrieved from Port ====> weblogic.webservice.core.DefaultOperation.asyncInvoke( Map outParams, Object[] args, AsyncInfo wsContext, PrintStream logStream ) //a ClientDispatcher is created here and then we dispatch our requst with this dispatcher ====> weblogic.webservice.core.ClientDispatcher.asyncDispatch(final Object[] args, final AsyncInfo async) //in this method, FutureResultImpl is created and it will be returned to client. It''s responsible to send message and  //receive response from server in another. For receiving response, it''s will be discussed later. ====> weblogic.webservice.core.ClientDispatcher.send(Object[] args) //MessageContext is set(for example

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号