GWT在服务器端创建子流程

时间:2014-03-11 00:59:27

标签: java web-services google-app-engine gwt gwt-rpc

GWT中的每个RPC都受限于1分钟超时,这是不可配置的。

我正在使用调用WEBSERVICE的第三方提供商的SYNC METHOD。

有时这个METHOD(webservice)会挂起超过1分钟,并导致我的RPC崩溃。问题是我无法在服务器端捕获此异常,我需要回滚一些标志(这是一个更复杂的过程,这只是一个例子)

try {

...my code goes here...

MYTHIRDPARTYWS ws = new MYTHIRDPARTYWS()
String RESULT = ws.run;

...my code needs to take action depending of the result...


} catch (Exception e) {

...my code needs to take action depending of the exception...

}

我需要这样的东西:

try {

...my code goes here...

Process p = new Process() {
MYTHIRDPARTYWS ws = new MYTHIRDPARTYWS()
String RESULT = ws.run;

};

p.setTimeOut(40000);
p.run;

...my code needs to take action depending of the result...


} catch (Exception e) {

...my code needs to take action depending of the exception...

}

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

使用方法 ExecutorService.execute()在后台线程中生成一些任务。

要遵循的步骤:

  • 在servlet web.xml方法中从init()读取一些init参数,例如timeout和threadpoolsize
    • timeout参数用于设置异步线程的超时时间
    • threadpoolsize用于创建异步线程池
  • 通过在doGet()或doPost()方法中调用HTTP AsyncContext来获取request.startAsync()
  • 设置AsyncContext的超时
  • 附加侦听器以响应此AsyncContext的生命周期事件,例如onComplete()onTimeout()onError()onStartAsync()
  • 调用ExecutorService.execute()在后​​台线程中生成一些任务

我已在此处发布了代码Asynchronous servlet not acting asynchronously

如果有任何混淆,请查看并告诉我。真的行。 您可以完全控制子流程的每个生命周期方法,以处理任何类型的异常。