我用java 1.6运行jboss AS 4.2,我的问题如下: 我们的应用程序作为一个耳朵和一个包含一些servlet的战争分发。 这些servlet调用所需的EJB进行一些处理,然后返回结果。
我正在寻找一种确定超时的方法,以防处理花费太多时间,并且它只会返回并结束处理(处理涉及多个EJB)。
我可以使用ThreadLocal并添加一些代码,如果超出时间,将在每个方法的开头检查 - 但是我是否可以使用其他机制而不将此类代码添加到我的应用程序中?
任何想法/参考都会很好。
答案 0 :(得分:1)
可能有不同的方式,但根据你的要求,我首先想到的是拦截器。
这样你就可以拦截所有有问题的(可能长时间接听电话),并在超过时间的情况下抛出异常。
是的,threadlocal可以保留开始时间(如果你不使用异步无状态会话bean调用)。
要了解拦截器的能力,请参阅:http://www.adam-bien.com/roller/abien/entry/interceptors_ejb_3_for_absolute
这个解决方案的主要优点是你可以清楚地将超时功能(在Interceptor中)与业务逻辑(在EJB中)分开。