在不使用线程的情况下处理EJB3中的超时

在不使用线程的情况下处理EJB3中的超时,第1张

在不使用线程的情况下处理EJB3中的超时

这更像是一个澄清请求,但是太长了,无法作为评论。

我不确定您现在是如何做的,因为从您编写的内容来看,仅使用请求处理线程似乎是可行的方法。像这样:

//Some webservice method (synchronous)public Result process(Blah blah){    try{        return getResult(TimeUnit.SECONDS, 10);    }catch(InterruptedException e){        //No result within 10 seconds!        throw new ServiceUnavailableException("blah");    }}

我不确定为什么要创建线程。如果由于该

getResult
方法根本不超时而被迫使用线程,则可能会发生线程泄漏。如果它在较长时间后超时,因此您想“简化”对用户的答复,那将是我考虑使用线程的唯一情况,就像我想象的那样。这可能会导致线程在负载下堆积,因此我努力避免这种情况。

也许您可以发布一些代码,让我们知道您为什么要在服务中创建代码?

另外,您的客户端界面是什么?听起来像是同步Web服务或其他东西?


在那种情况下,如果我是您,我将使用a

HashedWheelTimer
作为一个单例…这种机制应该可以很好地满足您的需求(这是一个实现)。但是,不幸的是,这似乎与EJB规范中对线程的禁止和对单例的禁止相冲突。实际上,如果您这样做,实际上并没有问题。例如,请参见此讨论。我们还在EJB应用程序中使用了单例模式。使用了JBoss。但是,如果这不是一个可行的选择,那么我可能会考虑通过定义一个新的Web服务(并将其部署在Web容器中或其他东西中)隔离其自己的JVM中的处理,然后从EJB应用程序中调用该服务。但是,这显然会导致性能下降,现在您将拥有另一个全新的应用程序。



欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zaji/5498652.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-12-12
下一篇2022-12-13

发表评论

登录后才能评论

评论列表(0条)

    保存