快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-22
, BindInfo is set) here and the request will be handle by a handler chain. ====> weblogic.webservice.core.handler.ClientHandler.handleRequest(MessageContext ctx) //it check bind info and the delegate the request to binding ====> weblogic.webservice.binding.http11.Http11ClientBinding.send(MessageContext ctx) //it retrieve endpoint from bindinfo and then open a HttpURLConnection with the URL created basing on endpoint. //Reqeust is sent to server with this HttpURLConnection. 1 connection = (HttpURLConnection)url.openConnection(); 2 3 outputStream = connection.getOutputStream(); 4 request.writeTo( outputStream );

请求发送完了,交给服务器去执行,下面我们再来看看客户端是如何处理response的。weblogic.webservice. core.ClientDispatcher.asyncDispatch()中,请求发送结束后,weblogic将启用一个新线程来接受服务器的 response,如下:

1       getThreadPool().addTask(new Runnable() { 2         public void run() { 3           callReceive(messageContext); 4         } 5       });

注意:这个线程是在客户端启动的。该接收线程启动后,FutureResultImpl实例会返回给客户端,客户端由此可以继续他的业务逻辑,而不必block在等待response上。response由接收线程负责处理,收到response,处理后的结果会被植入 FutureResultImpl,客户端执行它的其他逻辑,需要处理处理该结果时,只需要检查请求是否处理结束,如果结束,处理请求结果,如果请求依然没有结束,则由客户端决定继续等待,还是放弃(主线程退出),如下:

1 //you other business logic here 2 if(result.isCompleted()) 3 { 4     String ret = port.endSayHello(result); 5     System.out.println(ret); 6  }

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

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

客户端接受流程:

weblogic.webservice.core.ClientDispatcher.asyncDispatch(final Object[] args, final AsyncInfo async) ====> weblogic.webservice.core.ClientDispatcher.callReceive(WLMessageContext ctx) //call receive() here, and if response was received, set it to FutureResultImpl that owned by the client and if Listener is configured, trigger the listner. 1       if (listener != null) { 2         InvokeCompletedEvent event = new InvokeCompletedEvent( 3             async.getCaller()); 4 5         event.setFutureResult(futureResult); 6         listener.onCompletion(event); 7       } ====> weblogic.webservice.core.ClientDispatcher.receive(WLMessageContext ctx) //resoponse is handled by a handler chain ====> weblogic.webservice.core.handler.ClientHandler.handleResponse(MessageContext ctx) ====> weblogic.webservice.binding.http11.Http11ClientBinding.receive( MessageContext context ) //read response from the input stream of connect that we send request with, and the thread will be blocked in //waiting data from server.

好了,基本流程都列出来了。下面据此回答开篇的问题:

1:如果客户端不等待结果(比如服务器

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号