呼び出されたときに、現在開いているセッションのリストに関する情報を取得するサーブレットを作成する必要があります。
これを行う方法はありますか?
呼び出されたときに、現在開いているセッションのリストに関する情報を取得するサーブレットを作成する必要があります。
これを行う方法はありますか?
を実装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();
おそらく、JMX Bean を使用する方がより洗練されており、コードは必要ありません。の値を読み取るだけです
データ: jboss.web:type=Manager,path=/myapplication,host=localhost" activeSessions