WEB开发网
开发学院软件开发Java 关于在weblogic中异步调用webservice 阅读

关于在weblogic中异步调用webservice

 2009-09-22 00:00:00 来源:WEB开发网   
核心提示: 这种情况下虽然也是异步调用的,但这种调用方式客户端需要返回值,关于在weblogic中异步调用webservice(2),需要返回结果,但客户端又不乐意阻塞在服务器端请求处理上(可能服务器端处理该请求需要很长时间),2.2:客户端代码客户端代码有两种写法,一种是客户端线程主动调用FutuerRe

这种情况下虽然也是异步调用的,但这种调用方式客户端需要返回值。需要返回结果,但客户端又不乐意阻塞在服务器端请求处理上(可能服务器端处理该请求需要很长时间)。客户端希望继续执行它的其他业务逻辑,需要执行结果的时候,我在过来取这个结果。这样可以提高客户端的响应速度。

这篇文章,我们主要看看2这种情况。

2.1: web service开发

开发web service不存在任何区别,但在build client jar的时候,需要在调用clientgen的时候加上generateAsyncMethods = true, 这样clientgen生成的JAX-RPC stub中会多出两个方法,如下:

FutureResult startMethod (params, AsyncInfo asyncInfo);

result endMethod (FutureResult futureResult);

其中:Method对应于web service中的方法名,如sayHello---->startSayHello(params, AsyncInfo asyncInfo)。这两个方法就是我们客户端代码中异步调用的时候需要的。

2.2:客户端代码

客户端代码有两种写法,一种是客户端线程主动调用FutuerResult.isCompleted()来检查web service请求是否执行完成,另一种方式是通过Listenter来处理服务器端的返回结果。

//client thread checking

 1     public void runUnblock(){
 2         initializeEnv();
 3         try{
 4             System.out.println(port.getClass().getName());
 5             FutureResult result = port.startSayHello(3, "test", null);
 6             //you other business logic here
 7             if(result.isCompleted())
 8             {
 9                 String 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     }

上一页  1 2 3 4 5  下一页

Tags:关于 weblogic 异步

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接