2010-12-01 7 views
2

私も春のフォーラムでposted thisましたが、私は彼らの評判に追加することで、ここの人々に打撃を与えるだろう考え出し:クラスタ環境(セッション・レプリケーション/フェイルオーバー)で動作している昔ながらのサーブレットのアプリについてはセッションスコープBean用の春に組み込まれたレプリケーションのサポート?

、それはです「再設定」セッション属性に良い練習彼らは変更されてきた場合:

UserPreferences prefs = (UserPreferences)session.getAttribute("userPreferences"); 
prefs.setInstantEmail(true); 
session.setAttribute("userPreferences", prefs); 

これは、セッション状態が変化したと複製が必要なコンテナへのフラグとして機能します。対象に関するいくつかのWLSドキュメントにHere's a reference

私が現在変更しているアプリケーションは、POJO +注入スタイルの開発をサポートするためにSpringを使用していますが、上記の方法がどのように翻訳されるかはわかりません。 Springドキュメント(Scoped beans as dependencies)では、<aop:scoped-proxy/>を使用してセッションスコープの依存関係を挿入します。ただし、セッションに直接アクセスすることなく、その依存関係の変更がコンテナにどのようにフラグが立てられ、レプリケーションが行われるのでしょうか?それをサポートするために、プロキシまたはWebコンテキストのいずれかに組み込まれているものはありますか?そうでない場合は、誰かがそれをどのように扱っているのかの例がありますか?

ありがとうございました。

axtavt's answerに基づいて明確化:POJO +インジェクションアプローチは次のプロジェクトの目標の

一つは、Java EEやSpringクラスのいずれかに直接依存を避けるためです。私は、Springが少なくともセッションスコープのBeanが使用されたことを追跡できる場所を提供できるコンテキストからBeanを取得するためのフックをいくつか公開するかもしれないと想像することができます。もう1つの可能性は、呼び出されたときに状態変更を引き起こす可能性があるセッションスコープBean上のメソッドのセットを宣言することです。 Springに精通しているわけではありませんが、が技術的な詳細を知らずにのように見えます。

フォローに質問いくつかの春のコードを見た後:

を誰もがServletRequestAttributesが果たし得る役割についていくつかの光を当てることができますか?そのgetAttributeメソッドは、どの属性が取得されたかを追跡し、そのupdateAccessedSessionAttributesメソッドは、変更されたと思われる属性を「再設定」しようとしているようです。

答えて

0

を結局のところ、私はServletRequestAttributesは、担当の実体であることを確認したSpringSourceのサポートから誰かに話をすることができました「再設定」を行う。

0

ここでは、このための組み込みサポートはありません。

コードを見てから、次のように、手動で操作を行うことができます。

RequestAttributes a = RequestContextHolder.currentRequestAttributes(); 
String name = ScopedProxyUtils.getTargetBeanName("...your bean name...") 
synchronized (a.getSessionMutex()) { 
    Object o = a.getAttribute(name, RequestAttributes.SCOPE_SESSION); 
    a.setAttribute(name, o, RequestAttributes.SCOPE_SESSION); 
} 
+0

返信いただきありがとうございます。回答に基づいて追加情報を追加しました。 – kschneid

関連する問題