スレッドを介して非同期にポーリングを実行し、オブザーバーのリストを通知するサービスを実装しようとしています。
アーキテクチャは次のとおりです。複数の同時jsf セッション Beanをシングルトン サービスに登録し、新しいデータ更新が利用可能になった場合にスレッドから通知を受けることができます。通知されると、各 jsf セッション Bean は、他のセッション スコープの Spring Bean (context.xml で定義されたサービス) にアクセスすることによって、いくつかのアクションを実行します。
私が今直面している問題は、更新スレッドがこれらのセッション スコープの Spring Bean にアクセスできないことです。これは、更新スレッドからプロキシを解決できないためです。これは、スレッドがアプリケーション コンテキストの外部でインスタンス化され、入手可能な豆。しかし、どうすればSpringでそのようなメカニズムを実装できますか?
また、Spring が現在のコンテキストの一部になることを期待して、タスク エグゼキューター Bean を使用しようとしましたが、失敗しました (通知された jsf セッション Bean によって呼び出されるセッション スコープの Spring Bean を解決できません)。
どんな助けでも大歓迎です。ありがとうございました。
編集:通信フローに関する情報を追加しました。
新しいユーザーが新しいセッションを生成するたびに、対応する jsf セッション Bean が作成されます。この Bean (http セッションにバインドされると) は、Spring サービス (シングルトン) に登録されます。このサービスは、少なくとも 1 つの jsf セッション Bean が登録されている場合 (したがって、少なくとも 1 つのオブザーバーがある場合) にポーリング メカニズムをアクティブにします。サービスは、新しい更新が利用可能であることを検出すると、「update()」メソッドを呼び出して、登録されたオブザーバーに通知します。このメソッド内で、各オブザーバー (または jsf セッション Bean) は、プロキシとして使用できる他のいくつかの Spring セッション Bean を介していくつかのアクションを実行します。これは、元のポーリング スレッド (更新サービス内のスレッド) がスプリング プロキシを解決する方法を知らないため、「通信」が失敗するポイントです。この情報をポーリング スレッドで利用できるようにする方法はありますか? ありがとう。