transactions - 覆盖 WebSphere 设置的事务超时?

标签 transactions timeout jms websphere

我目前在一个项目中,我们有一个方法可以被调用来生成报告,然后将其返回给客户端。整个过程是这样的:

[[应用程序]] --> [[JMS]] --> [[数据库服务器]]

但是,我们的 WebSphere 有一个全局设置,其中事务超时设置为 2 分钟,最大事务超时设置为 5 分钟。

这给我们带来了一些问题,因为我们的一些报告花费的时间超过 2 分钟,因此,由于 2 分钟后数据库服务器没有响应,JMS 处的连接被断开。

但是,查询仍在数据库服务器中运行,大约 20 分钟后查询完成,它尝试返回结果,但由于连接已断开而无法返回。

下面是我们调用的方法

 public void generateReport(long ticketID, long inst_data_id, boolean flag)
        throws AppException, InformationalException {

    Trace.kToolsLogger.info("*********** Report generation started ******");

    if(Configuration.runningInAppServer()){
        try {

            Trace.kToolsLogger.info("*********** Transaction timeout set to 1200 ******");

            InitialContext ctx = new InitialContext();               
            UserTransaction tx = (UserTransaction)ctx.lookup("java:comp/UserTransaction");
            tx.setTransactionTimeout(1200);

        } catch (SystemException e) {           
            e.printStackTrace();
        } catch (Exception e) { 
            e.printStackTrace();
        }
     } else{

         Trace.kToolsLogger.info("Not running in app server. Timeout not set to 120");
     }

但是,上面的设置仍然不起作用,我的方法仍然在 2 分钟超时。

这是我总是在2分钟后遇到的错误:

[4/20/16 12:56:06:105 SGT] 00000122 TimeoutManage I WTRN0006W: Transaction Curam#coreinf-ejb.jar#DPEnactmentMDB 000001543204A61800000001478C576857C2F09B4365FB74A6A3A28FED806D44107D7CBC000001543204A61800000001478C576857C2F09B4365FB74A6A3A28FED806D44107D7CBC00000001 has timed out after 120 seconds. [4/20/16 12:56:06:108 SGT] 00000122 TimeoutManage I WTRN0124I: When the timeout occurred the thread with which the transaction is, or was most recently, associated was Thread[SIBJMSRAThreadPool : 1,5,main]. The stack trace of this thread when the timeout occurred was:

我们已经调查并知道我们可以配置另一个 JMS。但是我们如何才能从方法中调用特定的 JMS?另外,还有其他方法可以覆盖Websphere中的事务超时吗?

感谢任何类型的回应。谢谢。如果您需要任何其他信息,请告诉我。

编辑:我知道能够在 WebSphere 级别更新事务超时,但我们希望将其保留在 2 分钟,因为我们只是希望此特定方法具有延长的超时。谢谢! :)

最佳答案

除了在 UserTransaction 本身上设置事务超时之外,您还可以在以下位置增加 WebSphere 的事务超时值:
服务器 > 服务器类型 > WebSphere 应用程序服务器 > server_name >
[容器设置]容器服务>事务服务

IBM 文档:Transaction Service Settings

关于transactions - 覆盖 WebSphere 设置的事务超时?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36758413/

相关文章:

java - JPA事务隔离和实体锁的区别

java - 基于分布式 JMS 的日志记录.. 表现平平?

ios - NSURLSession 准确设置请求超时

asp.net - 如何增加 Web 服务请求的超时时间?

Java NIO - 连接到 telnet/bash/等。命令行实用程序

java - 模拟或模拟消息队列 (JMS)

java - Spring @JmsListener 无法将 json 转换为对象

php - 如何在mysqli中开始和结束事务?

scala - 在 Slick 3 中的多种方法之间共享数据库 session

php - 避免重复预订/重复消费