2011-06-30 2 views
0

私は、次のBean宣言を持っている:ステートフルEJBのライフサイクルの質問

@Stateful 
@TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED) 
public class InteruptBean implements Interrupt { 

private boolean interrupt = false; 

@Override 
public boolean check() { 
    return interrupt; 
} 

@Override 
public void interrupt() { 
    interrupt = true; 
} 
} 

私はステートフルEJBのライフサイクルを理解しようとしているが。このEJBの状態がinterrupt()メソッドを使用して永続的に変更され、このインスタンスへの参照がすべてnullに設定されると、Beanインスタンスは適格プールに戻されるか、破棄されますか?

私の判断に疑問を感じるのは、TransactionAttributeType.NOT_SUPPORTEDです。私は、ステートフルなEJBが、TransactionAttributeTypeが何であるかにかかわらず、再び使用される前にどのように初期状態にリセットされるのか、コンテナ仕様がどこかで言うことを希望します。

ありがとうございます!

答えて

1

http://download.oracle.com/javaee/6/tutorial/doc/giplj.html#giplnを読んでください。

ライフサイクルの最後に、クライアントは@Removeアノテーションを付けたメソッドを呼び出し、EJBコンテナは@PreDestroyアノテーション付きメソッドを呼び出します。 Beanのインスタンスは、ガベージコレクションの準備ができています。

@Removeメソッドを呼び出す人がいない場合、コンテナはタイムアウトに達してそれを削除します。

@TransactionAttribute注釈は、Beanのライフサイクルとは関係ありません。ビジネスメソッドの1つが呼び出されたときにトランザクションを開始する必要があるかどうかをコンテナに通知します。

+0

感謝を参照してください!それは私が探していたものです –

1

cj91

@私は、コンテナの仕様がどこかステートフルEJBは何とか をリセットしていることを 言う望んでいるだろう、電子

SPECは、特に私は、あなたが求めているものを言うかどうかわかりませんどのように初期状態にするか TransactionAttributeTypeは何であるかは関係ありません。

しかし、トランザクション属性タイプは、ステートフルなEJBがどのように(再)初期化されるかには何の影響も及ぼさないと確信しています。

NOT_SUPPORTEDは、メソッドをトランザクションコンテキスト内から呼び出すことができないことを意味します。呼び出されると、暗黙のうちに無視されます。

http://java.sun.com/j2ee/tutorial/1_3-fcs/doc/Transaction3.html

+0

ありがとう、本当にありがとう! –

関連する問題