Время ожидания транзакции JBoss? - PullRequest
7 голосов
/ 02 февраля 2010

В приложении JBoss 5.1.0.GA есть задача, запускаемая службой таймера, и проблема в том, что мы не можем изменить время ожидания транзакции.Это длинное индексирование Lucene может занять больше времени, чем ограничение по умолчанию 300 секунд.

Вопрос в том, как изменить значение тайм-аута, добавив @TransactionTimeout (1800) к рабочему методу или класс не оказал никакого влияния.

Редактировать: Установка этого в deploy /actionjboss-beans.xml работает нормально:

<property name="transactionTimeout">1800</property>

, но аннотация, похоже, не влияет ни на инициируемые таймером, ни на обычные EJB без сохранения состояния.

Ответы [ 7 ]

7 голосов
/ 16 мая 2012

Я использую EJB3 с Jboss 5.1.0.GA и успешно установил это значение в JBOSS_HOME/deploy/transaction-jboss-beans.xml.

По умолчанию было 300 в <property name="transactionTimeout">300</property>

2 голосов
/ 14 сентября 2018

Тайм-аут транзакции, настройки по умолчанию в версии JBOSS EPA 7.1 - 300.

jboss portal screen

Добавить эту строку (<coordinator-environment enable-tsm-status="true" default-timeout="1200"/>) добавить файл конфигурации в путь " .. standalone / configuration / standalone.xml "

                                    ....
<subsystem xmlns="urn:jboss:domain:transactions:4.0">
            <core-environment>
                <process-id>
                    <uuid/>
                </process-id>
            </core-environment>
            <recovery-environment socket-binding="txn-recovery-environment" status-socket-binding="txn-status-manager"/>
            <coordinator-environment enable-tsm-status="true" default-timeout="1200"/>
            <object-store path="tx-object-store" relative-to="jboss.server.data.dir"/>
 </subsystem>
2 голосов
/ 08 июня 2011

Попробуйте установить это в jboss-service.xml :

   <!-- JBoss Transactions JTA -->
   <mbean code="com.arjuna.ats.jbossatx.jta.TransactionManagerService"
      name="jboss:service=TransactionManager">
      <attribute name="TransactionTimeout">120</attribute> <!-- timeout in seconds-->
      <attribute name="ObjectStoreDir">${jboss.server.data.dir}/tx-object-store</attribute>
   </mbean>

Это конфигурация на основе сервера, поэтому ищите conf / jboss-service.xml в каталоге вашего сервера.

1 голос
/ 06 августа 2010

Вы можете вручную объявить период ожидания и создать таймер в Session Bean.

Ниже приведен пример кода моего компонента без сохранения состояния:

public void createTimer(String timerName) {
  //...
  sessionContext.getTimerService().createTimer(timeLongValue, timerName);
  //...
}

@Timeout
public void timeOutHandler(Timer timer){
  // code  
}
1 голос
/ 02 февраля 2010

TransactionTimeout это MDB? у них другая аннотация. Ссылка предоставляет различные варианты установки времени ожидания перехода либо с помощью кода в файлах конфигурации.

0 голосов
/ 15 июля 2017

Не относится к Jboss, но вы можете установить тайм-аут транзакции arjuna через Свойство com.arjuna.ats.arjuna.coordinator.defaultTimeout = 60.

0 голосов
/ 12 июля 2017

Укажите время ожидания транзакции в элементе <blocking-timeout-millis>. Этот элемент указывает максимальное время в миллисекундах для блокировки транзакции во время ожидания соединения и до отображения исключения. Он блокируется только в ожидании разрешения на соединение и не отображает исключение при создании нового соединения, которое занимает чрезмерно много времени.

<subsystem xmlns="urn:jboss:domain:datasources:4.0">
            <datasources>
                <datasource jndi-name="java:jboss/xyz" pool-name="abc" enabled="true" use-java-context="true">
                    <connection-url>jdbc:sqlserver://xx.xx.xxx.xxx:1433;databaseName=xxxx</connection-url>
                    <driver>SQLServerDriver</driver>
                    <transaction-isolation>TRANSACTION_READ_COMMITTED</transaction-isolation>
                    <pool>
                        <min-pool-size>50</min-pool-size>
                        <max-pool-size>150</max-pool-size>
                        <prefill>false</prefill>
                    </pool>
                    <security>
                        <user-name>xxx</user-name>
                        <password>xxx</password>
                    </security>
                    <timeout>
                        <blocking-timeout-millis>36000</blocking-timeout-millis>
                    </timeout>
                </datasource>
                <datasource jndi-name="java:jboss/datasources/ExampleDS" pool-name="ExampleDS" enabled="true" use-java-context="true">
                    <connection-url>jdbc:h2:mem:test;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE</connection-url>
                    <driver>h2</driver>
                    <security>
                        <user-name>sa</user-name>
                        <password>sa</password>
                    </security>
                </datasource>
                <drivers>
                    <driver name="SQLServerDriver" module="com.microsoft.sqlserver">
                        <xa-datasource-class>com.microsoft.sqlserver.jdbc.SQLServerDataSource</xa-datasource-class>
                    </driver>
                    <driver name="h2" module="com.h2database.h2">
                        <xa-datasource-class>org.h2.jdbcx.JdbcDataSource</xa-datasource-class>
                    </driver>
                </drivers>
            </datasources>
        </subsystem>
...