4

Glassfish では、EJB トランザクション タイムアウトはデフォルトで 120 秒に設定されています。この値を変更したいと考えています。

glassfish-ejb-jar.xml で「cmt-timeout-in-seconds」パラメーターを定義することで変更できることはわかっていますが、EJB クラスを含む Web モジュールを使用し、glassfish-web.xml を使用します。それぞれ。

タイムアウトを変更する方法はありますか?

UPD:

トランザクション サービス設定のトランザクション タイムアウト値は影響しません。

@Schedule(minute = "*/5", hour = "*", persistent = false)
public void doSomething() {
    log.info("Started");
    try {
        Thread.sleep(1000 * 119);
    } catch (InterruptedException ex) {
        log.info("Interrupted", ex);
    }
    log.info("Finished");
}

上記のコードは正常に動作します。ただし、スリープ時間を 121 秒に変更する場合

Thread.sleep(1000 * 121);

GF Server ログに次のエラーが表示されます。

Warning:   EJB5123:Rolling back timed out transaction

この後、サービスは doSomething() メソッドをもう一度呼び出し、2 分後に再びエラーが表示されます。

Warning:   EJB5123: Rolling back timed out transaction
Info:   EJB5119:Expunging timer [...] after [2] failed deliveries

サービスは doSomething() メソッドを呼び出さなくなりました。

4

3 に答える 3

1

トランザクション タイムアウトのデフォルト値は120ではなく0 (タイムアウトなし)です。古くないように見えるバージョン 2.1.1 のOracle チュートリアルがあります。

  • 管理者コンソールに移動します (デフォルトのポートは 4848、http://localhost:4848 )

  • 左メニュー: 構成 -> サーバー構成 -> トランザクション サービス

  • フィールド:トランザクション タイムアウト

  • サーバーの再起動

GlassFish 4.1 でテストされており、4.1.1 と大きな違いはないはずです。

于 2016-01-06T12:11:03.427 に答える