当前位置:七道奇文章资讯编程技术Java编程
日期:2011-03-22 16:14:00  来源:本站整理

关于在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编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:

  • 关于在weblogic中异步伐用webservice
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .