1

すべてのクラスターのハッシュマップにユーザー セッションを保存しようとしています。無効にする必要がある場合は、指定されたセッションIDを取得します。セッションを無効にする通常の方法でセッションが作成された場所でそれを無効にします。

public class SessionListener implements HttpSessionListener {

 public HashMap<String, HttpSession> sessionHolder = new HashMap<String, HttpSession>();

 @Override
 public void sessionCreated(HttpSessionEvent se) {
  sessionHolder.put(se.getSession().getId(), se.getSession());
 }

 public void invalidate(String sessionId){
  if(this.sessionHolder.get(sessionId)!= null){
   System.out.println("Invalidate session ID : " + sessionId);
   HttpSession session = sessionHolder.get(sessionId);
   session.invalidate();
  } else {
   System.out.println("Session is not created in this cluster ID : " + sessionId);
  }
 }

 @Override
 public void sessionDestroyed(HttpSessionEvent se) {
  System.out.println("Session " + se.getSession().getId() + " has been destoryed");
  sessionHolder.remove(se.getSession().getId());
 }
}

セッションは、無効化が発生した場所で消滅します。ただし、他のクラスター セッションでは引き続き使用できます。

他のクラスターのセッションがまだ残っている理由。また、他のクラスターのセッションも無効にする方法。

ありがとう。

4

1 に答える 1

0

(サーバーについて話しているのかクラスターについて話しているのかを確認することをお勧めします。ドメインの config.xml が役立ちます)

セッション オブジェクトは Web コンテナ内の WebLogic Server によってのみ管理されます。別のサーバまたは別のクラスタ全体で HashMap にセッション オブジェクトのコピーを手動で作成した場合、WebLogic Server はそのセッション オブジェクトのコピーを自動的に無効にしません。これは、Web コンテナーの外部にあるためです。

weblogic.xml デプロイメント記述子の <session-descriptor> 要素が正しく設定されていれば、WebLogic Server は HttpSession オブジェクトのレプリケートされたコピーを自動的かつ透過的に作成します (persistent-store-type には replicated_if_clustered をお勧めします)。

ここで入手可能なドキュメント: http://download.oracle.com/docs/cd/E13222_01/wls/docs103/webapp/weblogic_xml.html#wp1071982

ここで何を達成しようとしているのかを理解しておくとよいでしょう。クロスクラスタ レプリケーションは、WebLogic Server でサポートされていますが、モンスター アプリケーションについて話したり、広いネットワーク セグメントにまたがったりする場合を除き、必要ありません。

于 2011-02-07T04:17:26.967 に答える