JBoss 5.1 にデプロイされた EJB 3.0 ベースのアプリケーションがあります。プロパティtransactionTimeoutの ${JBOSS_HOME}/server/default/deploy/transaction-jboss-beans.xml で設定されたトランザクション タイムアウトのグローバル値は、ほとんどの EJB メソッドで問題ありません。ただし、そこに設定された値よりもはるかに長い期間が予想されるメソッドがいくつかあります。これらのメソッド専用のタイムアウトをオーバーライドしたいと考えています。
こちら で説明されているように、つまり、グローバル値に適切な値を設定してから、jboss.xml のデプロイメント記述子またはメソッド内の jboss 固有の注釈を介して特定のメソッドをオーバーライドしようとしました。
メソッドは、管理されるステートレス セッション Bean コンテナ内にあります。一部の場所では、トランザクションがその瞬間に作成された場合にのみ注釈が機能すると言われているため、これらのメソッドに新しいトランザクションを作成するように強制しました。
../..
import org.jboss.ejb3.annotation.TransactionTimeout;
../..
@Override
@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
@TransactionTimeout(900)
public FileInfoObject setFileVariable(Desk desk, String variable, int maxBytes,
String mimeAccepted, FileWithStream file)
throws ParticipationFinishedException, PersistenceException {
../..
}
予想される動作は、このメソッドのタイムアウトが 900 であることです。
実際の動作は非常に良好で、次のようになります。
- グローバル タイムアウト > メソッド タイムアウトの場合、メソッド タイムアウトが適用されます
- グローバル タイムアウト <= メソッド タイムアウトの場合、グローバル タイムアウトが適用されます
適用されるタイムアウトは両方の最小値であるように思われますが、グローバル値をオーバーライドする特定のメソッドのタイムアウトを延長したい場合、これは実際の問題です。
何か案は?何か不足していますか?