3

バージョン 7のフレームワークVaadinはAtmosphereを使用して、プッシュ ロジックと、利用可能な場合はシステム内の「全体的な」通信、つまり、通常はブラウザからの要求にも使用できるようにします。

これは、Atmosphere が WebSocket を使用できない場合 (たとえば、Jetty が WebSocket サポートで構成されていない場合) には問題なく、したがって、非常に長いサーブレット呼び出しのように見える長いポーリングまたは同様の HTTP "偽の" プッシュ メソッドに依存する必要があります。

しかし、実際に WebSocket を使ってみると、ShiroHibernateも大声で文句を言います。

問題は、サーブレット フィルターが WebSocket に対して「開始」しないことです。Hibernate は、Spring の OpenSessionInViewFilter を使用してリクエストごとの接続を作成します。これは、終了時にコミット/クローズすることでトランザクション境界としても機能します。Shiro は、AbstractShiroFilter の拡張子を持つ WebSubject オブジェクトを作成します。これにより、ServletRequest および ServletResponse オブジェクトがサブジェクトに追加され、終了時に「ThreadContext」(単なる ThreadLocal) がクリアされます。

ここで何か良いアイデアはありますか?Atmosphere に同様の「try-finally」のような「filterChain.continue」ロジックを持たせて、上記のエントリ/終了ロジックを再作成できるようにしたいと考えていました。ただし、ここまで見てきたように、Atmosphere にはこの種のフィルタリングがありません。

提案を聞きたいです。

4

2 に答える 2

2

サーブレット API フィルターをAtmosfere のインターセプターに置き換えてみてはいかがでしょうか? それらはあなたの場合に役立つと思います。

于 2013-09-03T15:37:07.227 に答える
1

おそらくすでにこれを解決していますが、私はチャイムを鳴らすと思いました。Vaadin、Spring、Hibernate スタックを使用して同じ問題に遭遇しました。

これを UI に追加して WebSocket をオフにすると、他のフィルターを通過します。@Push(value=PushMode.MANUAL, transport = Transport.STREAMING)

現在、セッションが一掃されるという問題が発生しています。

于 2013-10-11T21:13:26.543 に答える