这是我的代码有:处理HTTP从EJB事务中调用
// EJB
beanclass 1{
@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
public String method1(){
method2();
DBupdates();
return "";
}
}
//普通的java类
class 2{
method 2(){
//call which may take a long time (but dont want to wait for it to complete)
makes http calls to an external URL method();
}}
的问题是:在HTTP通话可能需要很长时间。然而,调用的响应决定了方法1 - >数据库更新和响应中的后续步骤。响应需要返回最终用户,并且我不能让最终用户永远等待。
我可以用两种方式处理这种情况:
移动方法2到EJB,并把TransactionAttributeType.NEVER,使HTTP调用不在事务,方法1的交易不候在上面。在这种情况下,容器管理方法1的事务,并且不执行数据库更新,如果它没有从方法2回听,则返回null。 method1的事务在“返回”之前等待多长时间?
我可以使用JBoss注释并在method1()上放置2分钟的TransactionTimeout:在这种情况下,如果http调用在2分钟内未完成,则method1可以返回null并且不进行数据库更新。
这两种方法哪一种是明智的和防错的? 感谢您的见解。