如何使用纯JDBC避免WebSphere8.5.5上的事务超时(WTRN0006W)

如何使用纯JDBC避免WebSphere8.5.5上的事务超时(WTRN0006W),jdbc,transactions,websphere-8,Jdbc,Transactions,Websphere 8,在WebSphereApplicationServer8.5.5上运行的EAR应用程序中,我们必须执行CallableStatement(Oracle DB中的调用存储过程),该语句根据输入数据运行五分钟以上。由于事务超时(代码WTRN0006W),该操作会自动回滚,在Websphere AS中,事务超时默认设置为120秒。由于客户的要求,我们无法更改此值 我们可以将输入数据分割成更小的数据块,并多次执行CallableStatement以缩短运行时间(30秒左右)。处理整个数据块仍然需要120

在WebSphereApplicationServer8.5.5上运行的EAR应用程序中,我们必须执行CallableStatement(Oracle DB中的调用存储过程),该语句根据输入数据运行五分钟以上。由于事务超时(代码WTRN0006W),该操作会自动回滚,在Websphere AS中,事务超时默认设置为120秒。由于客户的要求,我们无法更改此值

我们可以将输入数据分割成更小的数据块,并多次执行CallableStatement以缩短运行时间(30秒左右)。处理整个数据块仍然需要120秒以上(如预期的那样)。但事务超时仍然会发生,尽管在语句执行完成提交并关闭连接后,我们从WAS中配置的数据源获取连接,并将autocommit设置为false。然后在下一个循环周期中使用下一个块

语句执行的整个过程都是在无状态EJB中完成的,无状态EJB由计划每天运行两次的单例EJB调用。我们使用的不是JTA,也不是JPA,只是JDBC

若我们多次执行语句,是否可以避免事务超时

我们如何在应用程序启动期间获取数据源:

javax.naming.Context ctx = new InitialContext();
javax.sql.Datasource ds = (javax.sql.Datasource) ctx.lookup("jndi/datasource1");
我们如何获得连接:

java.sql.Connection conn = m24sb.getConnection();
conn.setAutoCommit(false)
我们如何执行语句:

try (CallableStatement sta = conn.prepareCall("{ call SOME_STORED_PROC }"))) { 
// ... setting statement params
sta.execute();
// ... resolving returned values
}
然后提交并关闭连接


提前感谢您的回答

尝试将无状态会话bean方法标记为不支持事务或从不支持事务,这将导致它在全局事务之外运行。(请注意,无论如何,您都需要这样做,才能使connection.commit()调用有效——由于超时,它可能没有达到那个程度)


尝试将无状态会话bean方法标记为不受支持的事务或从不,这将导致它在全局事务之外运行。(请注意,无论如何,您都需要这样做,才能使connection.commit()调用有效——由于超时,它可能没有达到那个程度)

@javax.ejb.TransactionAttribute(javax.ejb.TransactionAttributeType.NEVER)
public void yourStatelessEJBMethod() {
    ... code that invokes stored procedure and commits transaction
}