2011-01-20 18 views
2

Seamにコンポーネントを注入するのに苦労しています。component.getInstance()はSeamの新しいインスタンスを返します

特定のユーザーがアプリケーションで何かした場合、現在ログに記録されている他の多くのユーザーにイベントを伝播したいと考えています(イベントを受け取ったユーザーは、イベントを発生させたユーザーによって決定されます)。

私がこれにアプローチしたのは、ユーザーIDに対するステートフルセッションBeanをHashMapストーリーでApplicationスコープ内に作成することです。

イベントが発生すると、アプリケーションスコープオブジェクトのオブザーバメソッドが実行され、ハッシュマップ内の各Beanのメソッドが呼び出されます(エンティティBeanの引数として渡されます)。

各Beanで呼び出されるメソッドでは、注入されたメソッドにアクセスして、「Beanのユーザー」がそのイベントに反応するかどうかを確認する必要があります(エンティティBeanのデータを表示します)。これを行うには、注入されたいくつかのBean(SFSBとステートレスBeanの両方)にアクセスする必要がありますが、この時点ではすべてnullです。

私は、(Lifecycle.beginCall()/ .endCall()ブロックでラップされた)Component.getInstance()を理解するか、類似のメソッドの1つをここで使用してオブジェクトを取得できますが、これは動作しません。

storyManagerActionがステートフルセッションBeanであるComponent.getInstance( "storyManagerAction")のような何かを行う場合、現在セッションに存在するstoryManagerActionというインスタンスが返されることが期待されます。しかし、代わりに、StoryManagerActionのインスタンスをすべてプリミティブメンバーを0として、そのオブジェクトメンバーをすべてnullに設定してインスタンスを取得しています。

なぜこれが起こっているのか、私はこれを正しく行うには何が必要なのでしょうか?

+0

すべてのユーザーはいつもセッションコンテキストに 'StoryManagerAction'コンポーネントを持っていますか、それとも特別な時点で作成されていますか? – kraftan

答えて

1

StoryManagerActionのマップを反復してメソッドを呼び出すと、Beanが属するセッションのスコープではなく、イベントを発生させたセッションのスコープに関連します。

StoryManagerActionに注入を避け、通常のインスタンス変数に値を保存する注釈付きメソッドですべての必要なBeanを解決します。

関連する問題