2016-04-21 2 views
0

Я сейчас в проекте, где у нас есть метод, который вызывается для создания отчета, а затем возвращает его на клиентскую сторону. Весь процесс что-то вроде это работает:Тайм-аут перезаписи с использованием WebSphere?

[[Application]] -> [[JMS]] -> [[DB сервер]]

Однако наш WebSphere имеет глобальный параметр, где транзакция Тайм-аут, установлен на 2 минуты, а максимальное время транзакции - 5 минут.

Это вызвало у нас некоторые проблемы, потому что некоторые из наших отчетов занимают больше 2 минут, и, таким образом, соединение отбрасывается в JMS, потому что от сервера БД нет ответа через 2 минуты.

Однако запрос все еще запущен на сервере БД, и примерно через 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 СГТ] 00000122 TimeoutManage Я WTRN0006W: Сделка Curam # coreinf-EJB. jar # DPEnactmentMDB 000001543204A61800000001478C576857C2F09B4365FB74A6A3A28FED806D44107D7CBC000001543204A61800000001478C576857C2F09B4365FB74A6A3A28FED806D44107D7CBC00000001 истекает через 120 секунд. [4/20/16 12: 56: 06: 108 SGT] 00000122 TimeoutManage I WTRN0124I: Когда произошел тайм-аут, поток, с которым связана транзакция или недавно был связан, был Thread [SIBJMSRAThreadPool: 1,5, main] , Трассировка стека этой нити при возникновении таймаута:

Мы исследовали и знаем, что мы можем настроить другую JMS. Но как мы сможем вызвать эту конкретную JMS из метода? Кроме того, есть ли другой способ перезаписать тайм-аут транзакции в Websphere?

Цените любой ответ. Спасибо. Пожалуйста, дайте мне знать, если вам нужна какая-либо другая информация.

EDIT: Я знаю, что могу обновить Тайм-аут транзакции на уровне WebSphere, но мы надеемся оставить его на 2 минуты, поскольку мы просто хотим, чтобы этот конкретный метод имел расширенный тайм-аут. Благодаря!:)

ответ

1

В дополнение к установке тайм-аут транзакции на самом UserTransaction, вы также можете увеличить значения тайм-аута транзакции для WebSphere на:
Серверы> Типы серверов> Серверы приложений WebSphere> имя_сервера>
[Настройки контейнеров] Container Services > Сервис транзакций

IBM Doc: Transaction Service Settings

+0

Hi Aguibert. Спасибо за быстрый ответ. Однако мы не хотим обновлять тайм-аут 2 минуты, так как это глобальные настройки. Мы хотели бы, чтобы этот конкретный метод вызывал другой тайм-аут транзакции. –

+0

Глобальный тайм-аут глобальной сети WebSphere Application Server действительно глобальный и отменяет любое значение t/o UserTrans. Вы можете достичь того, чего хотите, увеличив глобальное значение, чтобы завершить ваш самый длинный запрос и установить значение UserTrans t/o для каждой транзакции на разумную величину, но для этого может потребоваться множество изменений приложения. Если эта возможность имеет решающее значение, вы можете открыть запрос на повышение по адресу https://www.ibm.com/developerworks/rfe/ –

2

значение тайм-аута транзакций, вы указываете на UserTransaction.setTransactionTimeout() должен быть ограничен Предельной Transaction Timeout, но не от суммы транзакции на весь срок службы тайм-аута, так что вам нужно будет в смените прежнее значение как минимум на 1200 секунд, если вы хотите, чтобы приложение могло установить тайм-аут транзакции на 1200 секунд, тогда как последний может оставаться на меньшем значении и будет продолжать применяться, если приложение не указывает тайм-аут транзакции. Описания этих настроек можно найти в этом Центр знаний док,

https://www.ibm.com/support/knowledgecenter/SSAW57_8.5.5/com.ibm.websphere.nd.doc/ae/udat_contranserv.html?lang=en

Следует также отметить, что UserTransaction.setTransactionTimeout() должен быть вызван перед началом транзакции, и применяется только к сделке, которая будет работать на том же потоке, поэтому вы захотите проверить, что ваше приложение использует его таким образом.

Если вы уже сделали это, и продукт ведет себя по-другому, я бы предложил открыть корпус с поддержкой IBM.

+0

Привет, njr, Спасибо за ваш ответ. Я понимаю, что он будет ограничен максимальным временем ожидания транзакций. Если наши коды успешно перекрывают время ожидания транзакции, он достигнет 5-минутного таймаута, и в журналах будет указано, что «тайм-аут истекает через 300 секунд». Мы надеемся получить пропуск за 2 минуты до того, как мы увеличим 5 минут. Я боюсь, что это может быть из-за ошибки кода, когда поток вызова метода не вызывает наш setTransactionTimeout правильно. Я продолжу расследование. Но я хочу подтвердить, что этот код отменяет 2-минутный тайм-аут для действия? –

+0

Да, UserTransaction.setTransactionTimeout() отменяет общий тайм-аут жизненного цикла транзакций, поэтому вы не должны видеть таймаут через 2 минуты. В примере кода это поможет включить часть, где вы делаете tx.begin(), чтобы подтвердить, что она выполняется в том же потоке и после setTransactionTimeout. – njr

+0

Привет, я благодарю вас за продолжение. Я верю, что мы начали(); и commit(); может быть неправильным, поэтому мы находимся посреди проб и ошибок. Возможно, мы не назвали это в той же теме, как мы добавили пару S.O.P, и выяснилось, что все довольно странно. Я буду держать вас в курсе наших результатов. Еще раз спасибо! –

Смежные вопросы