2011-06-27 23 views
0

スレッドを介して非同期にポーリングを実行してオブザーバのリストに通知するサービスを実装しようとしています。Observerパターンと一緒にSpringでポーリングを実装する方法

複数の同時実行jsfセッションBeanは、シングルトンサービスに登録し、利用可能な新しいデータ更新がある場合にスレッドによって通知されます。通知されると、各jsfセッションBeanは、セッションスコープのスプリングBean(context.xmlで定義されているサービス)であるにアクセスして、いくつかのアクションを実行します。

私は現在、直面している問題は、更新スレッドがアプリケーションコンテキスト外でインスタンス化されているので理解できる更新スレッドからそのプロキシを解決できないため、セッションスコープのSpring Beanにアクセスできないことです。使用可能なBeanの可視性はありません。しかし、どのように私は春にそのような仕組みを実装できますか?

また、Springが何らかの形で現在のコンテキストになることを期待して、タスク実行者Beanを使用しようとしましたが、失敗しました(通知されたjsfセッションBeanによって呼び出されたセッションスコープのSpring Beanは解決できません)。

ご協力いただければ幸いです。ありがとうございました。

EDIT:通信フローに関する詳細を追加しました。

新しいユーザーが新しいセッションを生成するたびに、対応するjsfセッションBeanが作成されます。このBean(一度HTTPセッションにバインドされた後)は、スプリングサービス(シングルトン)に登録されます。このサービスは、少なくとも1つのjsfセッションBeanが登録されている場合(したがって、少なくとも1人のオブザーバが存在する場合)、ポーリングメカニズムをアクティブにします。サービスが新しい更新が利用可能であることを知ると、登録されたオブザーバに、その "update()"メソッドを呼び出すことによって通知されます。このメソッドの中で、各オブザーバ(またはjsfセッションBean)は、プロキシとして利用可能な他のSpringセッションBeanを介していくつかのアクションを実行します。これは、元のポーリングスレッド(更新サービスのスレッド)がスプリングプロキシを解決する方法を知らないため、「通信」が失敗する点です。この情報をポーリングスレッドで利用できるようにする方法はありますか?ありがとう。

答えて

0

JSFセッションセッションBeanとSpringセッションBeanの両方がオブザーバとして知られているオブジェクトを使用する方法はありますか?それぞれの要求に対してそのオブジェクトをポーリングする必要があります。しかし、その場合、元のソースをポーリングするだけでよいでしょう。

+0

ご返信ありがとうございます。私はあなたが言ったことを完全には得ていませんでした。上記の質問を私のweb-appでの通信の流れの詳細について編集したので、それを見て教えてください。ありがとう! –

関連する問題