状況
次のことを想像してください。
次のような列挙があります。
enum State{
INITIAL{
@Override
public void proceed(){...}
},
NEXT_STATE{
@Override
public void proceed(){ ... }
},
//and so on
TERMINATED;
public void proceed(){}
}
次に @Entity です。このエンティティは、注文を処理するアプリケーションのユースケースを表します。と呼びましょうActivationUseCase
。ActivationUseCase
(私のUseCase
基本クラスから継承する他のクラスと同様に)状態と呼ばれる属性があり、State
.
putzzle の最後の部分は、EJB 3.1 Bean です。この Bean は、 を取得し、それに対してproced ActivationUseCase
() を呼び出します。
アイデアは、@Entity
可能な状態 (列挙型) に関するすべての情報を に保持させ、各状態が必要なときに何をすべきかを知ること.proceed()
です。
問題
proceed() メソッド内には、静的コンテキストがあります。しかし、他の EJB を呼び出したい場合もあります。そのため、誰かが JNDI ルックアップ (ローカル) を開始し、必要な Bean を呼び出します。私見はかなり醜く危険ですが、それはここでの問題ではありません.
明確にするために、疑似呼び出しのスタックを次に示します。
MyServiceBean.myServiceMethod()
|- ActivationUseCase.proceed()
|- ManuallyLookedUpEJB.anotherServiceMethod()
したがって、トランザクションを開始し、インスタンスをMyServiceBean.myServiceMethod()
取得して呼び出します。次に、 (new InitialContext()...)を検索して を呼び出します。ActivationUseCase
proceed()
ManuallyLookedUpEJB
anotherServiceMethod()
質問
トランザクションはどうなりますか? それはどこから始まりますか?それはカバーしanotherServiceMethod()
ますか?どうすればこれをデバッグできますか?
免責事項
enum-contains-logic コンストラクトについては (今は) 説明したくありません。実際、全体をリファクタリング (書き換え) する理由を集めています。この構成は良い考えではないという私の主張を裏付けるいくつかの理由が必要です。