关于在weblogic中异步伐用webservice[Java编程]
本文“关于在weblogic中异步伐用webservice[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
这几天碰到个问题:在weblogic中调用async webservice,假如客户端不等候后果(比方服务器端因为某些缘由,web service需求履行很长时间),直接退出的话,weblogic server能否保存调用后果,后果保存多长时间?假如这样的非常客户端很多,对服务器有什么负面影响,比方衔接资源、内存开销等.
首先我们先阐述一下异步的概念 在weblogic webservice中,有两处异步的概念:
1:Synchronous request-response (the default behavior) means that every time a client application invokes a Web Service operation, it receives a SOAP response, even if the method that Choosing RPC-Oriented or Document-Oriented Web Services Programming WebLogic Web Services 4-3 implements the operation returns void. Asynchronous one-way means that the client never receives a SOAP response, even a fault or exception.
默许情形下,weblogic webservice是恳求-应答情势的,即客户端会block当前线程,直到server端处理完该恳求(即便该恳求没有任何返回值,void).当 web service不返回后果,客户端只是提交恳求,不需求知道履行后果的时刻,可以采取异步单向情势.这种情形下,客户端线程为非阻塞的,它只负责提交恳求,而不需求返回后果.定义这样的异步web service时,需求遵守以下的两个原则:
1.1:The back-end component that implements the operation must explicitly return void.
1.2:You cannot specify out or in-out parameters to the operation, you can only specify inparameters.
2:This section describes how to invoke an operation asynchronously. In this context, asynchronously means you invoke an operation and then optionally get the results of the invoke in a later step.
这种情形下固然也是异步伐用的,但这种调用方法客户端需求返回值.需求返回后果,但客户端又不乐意阻塞在服务器端恳求处理上(大概服务器端处理该恳求需求很长时间).客户端但愿持续履行它的其他业务逻辑,需求履行后果的时刻,我在过来取这个后果.这样可以提高客户端的呼应速度.
这篇文章,我们主要看看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 }
以上是“关于在weblogic中异步伐用webservice[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |