2011-01-21 17 views
1

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

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()); 
} 
} 

無効になるセッションは致命的になります。他のクラスタセッションではまだ使用可能です。

なぜ他のクラスタ上のセッションがまだあるか。他のクラスタ上のセッションも無効にする方法について説明します。

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

+1

複数のクラスタについて話しています。クラスタ間レプリケーションはありますか? (http://download.oracle.com/docs/cd/E11035_01/wls100/cluster/failover.html#wp1040345) – fglez

+0

クラスタ間レプリケーションとは何ですか?セッションがクラスタを越えて複製されることを意味する場合は、そうです。 –

+0

「他のクラスタのセッション」について書いています。そこにはいくつのクラスタがありますか? – fglez

答えて

0

(我々がサーバまたはクラスタの話をしているかどうかを確認するために良いだろう - あなたのドメインのconfig.xmlが助けになります)

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

WebLogic Serverは自動的に、かつ非常に透過的にweblogic.xmlデプロイメント・ディスクリプタにご<セッション記述>要素が正しい設定があることを提供するのHttpSessionオブジェクトの複製されたコピーを作成します(永続ストア型のためreplicated_if_clusteredすることはお勧めしている)

ここにありドク:http://download.oracle.com/docs/cd/E13222_01/wls/docs103/webapp/weblogic_xml.html#wp1071982

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

関連する問題