gpt4 book ai didi

java - 如何在@Stateless bean 中为@WebMethod 设置超时值?

转载 作者:行者123 更新时间:2023-11-29 05:48:24 24 4
gpt4 key购买 nike

我想弄清楚是否可以在 @Stateless bean 中为 Web 方法设置超时值。或者即使有可能。我搜索了很多,没有找到与这个问题相关的内容。

例子:

@WebService
@Stateless
public class Test {

@WebMethod
@WebResult(name = "hello")
public String sayHello(){
return "Hello world";
}
}

非常感谢您的回答。

最佳答案

所以在搜索和学习了一些之后,我通过执行以下操作解决了这个问题:我创建了一个包含@Asynchronous 方法的无状态 Bean:

@Asynchronous
public Future<String> sayHelloAsync()
{
//do something time consuming ...
return new AsyncResult<String>("Hello world");
}

然后在将其方法公开为 Web 服务的第二个 bean 中,我完成了以下操作:

@WebService
@Stateless
public class Test {

@EJB
FirstBean myFirstBean;//first bean containing the Async method.

/**
* Can be used in futher methods to follow
* the running web service method
*/
private Future<String> myAsyncResult;

@WebMethod
@WebResult(name = "hello")
public String sayHello(@WebParam(name = "timeout_in_seconds") long timeout)
{
myAsyncResult = myFirstBean.sayHelloAsync();
String myResult = "Service is still running";
if(timeout>0)
{
try {
myResult= myAsyncResult.get(timeout, TimeUnit.SECONDS);
} catch (InterruptedException e) {
myResult="InterruptedException occured";
} catch (ExecutionException e) {
myResult="ExecutionException occured";
} catch (TimeoutException e) {
myResult="The timeout value "+timeout+" was reached."+
" The Service is still running.";
}
}
return myResult;
}
}

如果设置了超时,则客户端将等待这段时间直到到达。在我的情况下,该过程仍然必须运行。我希望它能帮助其他人。

关于java - 如何在@Stateless bean 中为@WebMethod 设置超时值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14948995/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com