5

呼び出されたときに、現在開いているセッションのリストに関する情報を取得するサーブレットを作成する必要があります。

これを行う方法はありますか?

4

2 に答える 2

7

を実装HttpSessionListenerし、プロパティを与え、メソッドstatic Set<HttpSession>中にセッションを追加し、sessionCreated()メソッド中にセッションを削除しsessionDestroyed()、リスナーを のように登録<listener>web.xmlます。これで、現在の JBoss インスタンスで開いているすべてのセッションが収集されたクラスが作成されました。基本的な例を次に示します。

public HttpSessionCollector implements HttpSessionListener {
    private static final Set<HttpSession> sessions = ConcurrentHashMap.newKeySet();

    public void sessionCreated(HttpSessionEvent event) {
        sessions.add(event.getSession());
    }

    public void sessionDestroyed(HttpSessionEvent event) {
        sessions.remove(event.getSession());
    }

    public static Set<HttpSession> getSessions() {
        return sessions;
    }
}

次に、サーブレットで次のようにします。

Set<HttpSession> sessions = HttpSessionCollector.getSessions();

Set<HttpSession> 非 staticを作成できるように、アプリケーションスコープで保存/取得したい場合は、同様HttpSessionCollector実装し、基本的に次のメソッドを追加します。ServletContextListener

public void contextCreated(ServletContextEvent event) {
    event.getServletContext().setAttribute("HttpSessionCollector.instance", this);
}

public static HttpSessionCollector getCurrentInstance(ServletContext context) {
    return (HttpSessionCollector) context.getAttribute("HttpSessionCollector.instance");
}

次のようにサーブレットで使用できます。

HttpSessionCollector collector = HttpSessionCollector.getCurrentInstance(getServletContext());
Set<HttpSession> sessions = collector.getSessions();
于 2010-01-22T00:43:59.520 に答える
3

おそらく、JMX Bean を使用する方がより洗練されており、コードは必要ありません。の値を読み取るだけです

データ: jboss.web:type=Manager,path=/myapplication,host=localhost" activeSessions

于 2010-01-26T02:41:42.657 に答える