我在Websphere应用程序服务器上工作, 如下面的代码所示,这是简单的网关Bean,我从另一个具有查找功能的方法中调用dispatcherRequest方法,但是每次调用时事务都会启动,但是事务超时在Websphere上设置了默认值。我想用代码更改超时时间,我想提及一下,我们必须使用容器事务管理。
@Stateless(name = "EJBGatewayServiceCMT")
public class EJBGatewayServiceBean implements EJBGatewayService {
@Resource
private SessionContext ctx;
@Override
@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
public void dispachRequestObject(Object inputData, Object outputData, Dispacher dispacher) {
try {
dispacher.doDispach(inputData, outputData);
} catch (Throwable t) {
ctx.setRollbackOnly();
}
}
答案 0 :(得分:0)
不幸的是,您的两个要求(在代码中设置事务超时,以及使用容器管理的事务)是不兼容的,因此这是不可能的。为了使代码设置事务超时,您需要使用Bean管理的事务,在这种情况下,可以在开始事务之前使用ejbContext.getUserTransaction().setTransactionTimeout(seconds)
。对于容器管理的事务,在容器进入您的方法时事务已经由容器启动,现在更改其超时为时已晚。