【问题标题】:JBoss transaction timeout setting?JBoss事务超时设置?
【发布时间】:2011-01-12 04:38:32
【问题描述】:

我们在 JBoss 5.1.0.GA 应用程序中有一个计时器服务触发任务,问题是我们无法更改事务超时。这个长的 Lucene 索引可能需要比默认的 300 秒限制更长的时间。

问题是如何更改超时值,在worker方法或类中添加@TransactionTimeout(1800)没有任何效果。

编辑:在 deploy/transaction-jboss-beans.xml 中设置这个可以正常工作:

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

但是注释似乎对定时器启动或正常的无状态 EJB 都没有影响。

【问题讨论】:

  • @TransactionTimeout 不是标准的 JavaEE 注释......它来自哪里?
  • 这是一个 JBoss 特定的注解。

标签: jboss timeout ejb-3.0 transactions jboss5.x


【解决方案1】:

TransactionTimeout 是 MDB 吗?他们有不同的注释。该链接提供了通过配置文件上的代码设置事务超时的各种选项。

【讨论】:

    【解决方案2】:

    您可以手动声明超时时间并在 Session Bean 中创建一个计时器。

    下面是我的无状态 Bean 的示例代码:

    public void createTimer(String timerName) {
      //...
      sessionContext.getTimerService().createTimer(timeLongValue, timerName);
      //...
    }
    
    @Timeout
    public void timeOutHandler(Timer timer){
      // code  
    }
    

    【讨论】:

      【解决方案3】:

      尝试在 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

      【讨论】:

        【解决方案4】:

        我正在使用 EJB3 和 Jboss 5.1.0.GA 并已成功设置 JBOSS_HOME/deploy/transaction-jboss-beans.xml中的这个值。

        &lt;property name="transactionTimeout"&gt;300&lt;/property&gt; 中的默认值为 300

        【讨论】:

          【解决方案5】:

          &lt;blocking-timeout-millis&gt; 元素中指定事务超时。此元素指示在等待连接和显示异常之前阻塞事务的最长时间(以毫秒为单位)。 这只会在等待连接许可时阻塞,如果创建一个需要非常长时间的新连接,则不会显示异常。

          <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>
          

          【讨论】:

            【解决方案6】:

            与 Jboss 无关,但您可以通过以下方式设置 arjuna 事务超时 com.arjuna.ats.arjuna.coordinator.defaultTimeout=60 属性。

            【讨论】:

              【解决方案7】:

              事务超时,JBOSS EPA 7.1 版本默认设置为 300。

              添加这一行(&lt;coordinator-environment enable-tsm-status="true" default-timeout="1200"/&gt;)在路径“..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>
              

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2020-09-17
                • 1970-01-01
                • 2016-08-13
                • 2016-09-09
                • 2013-11-26
                • 1970-01-01
                • 1970-01-01
                • 2019-09-09
                相关资源
                最近更新 更多