バージョン 7のフレームワークVaadinはAtmosphereを使用して、プッシュ ロジックと、利用可能な場合はシステム内の「全体的な」通信、つまり、通常はブラウザからの要求にも使用できるようにします。
これは、Atmosphere が WebSocket を使用できない場合 (たとえば、Jetty が WebSocket サポートで構成されていない場合) には問題なく、したがって、非常に長いサーブレット呼び出しのように見える長いポーリングまたは同様の HTTP "偽の" プッシュ メソッドに依存する必要があります。
しかし、実際に WebSocket を使ってみると、ShiroもHibernateも大声で文句を言います。
問題は、サーブレット フィルターが WebSocket に対して「開始」しないことです。Hibernate は、Spring の OpenSessionInViewFilter を使用してリクエストごとの接続を作成します。これは、終了時にコミット/クローズすることでトランザクション境界としても機能します。Shiro は、AbstractShiroFilter の拡張子を持つ WebSubject オブジェクトを作成します。これにより、ServletRequest および ServletResponse オブジェクトがサブジェクトに追加され、終了時に「ThreadContext」(単なる ThreadLocal) がクリアされます。
ここで何か良いアイデアはありますか?Atmosphere に同様の「try-finally」のような「filterChain.continue」ロジックを持たせて、上記のエントリ/終了ロジックを再作成できるようにしたいと考えていました。ただし、ここまで見てきたように、Atmosphere にはこの種のフィルタリングがありません。
提案を聞きたいです。