JBoss 5.1.0.GAアプリケーションにタイマーサービスによってトリガーされるタスクがあり、問題はトランザクションのタイムアウトを変更できないことです。この長いLuceneインデックス作成には、デフォルトの300秒の制限よりも時間がかかる場合があります。
問題は、タイムアウト値を変更する方法です。ワーカーメソッドに@TransactionTimeout(1800)を追加するか、クラスが効果を発揮しませんでした。
編集:deploy /transaction-jboss-beans.xmlでこれを設定すると正常に機能します:
<property name="transactionTimeout">1800</property>
ただし、アノテーションは、タイマーによって開始されるEJBまたは通常のステートレスEJBのいずれにも影響を与えないようです。
Jboss 5.1.0.GAでEJB3を使用しており、この値をJBOSS_HOME/deploy/transaction-jboss-beans.xml
に正常に設定しました。
<property name="transactionTimeout">300</property>
のデフォルトは300でした
トランザクションタイムアウト、JBOSS EPA7.1バージョンのデフォルト設定は300です。
この行を追加します(<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>
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を探します。
タイムアウト期間を手動で宣言し、SessionBeanでタイマーを作成できます。
以下は私のステートレスBeanのサンプルコードです:
public void createTimer(String timerName) {
//...
sessionContext.getTimerService().createTimer(timeLongValue, timerName);
//...
}
@Timeout
public void timeOutHandler(Timer timer){
// code
}
TransactionTimeout それはMDBですか?それらは異なる注釈を持っています。このリンクには、構成ファイルのコードを介して変換タイムアウトを設定するためのさまざまなオプションがあります。
<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>
Jbossとは関係ありませんが、com.arjuna.ats.arjuna.coordinator.defaultTimeout = 60プロパティを介してarjunaトランザクションタイムアウトを設定できます。