2012-02-08 2 views
2

Мне нужно получить список активных сеансов калитки. Теперь я сохраняю весь новый сеанс в методе переопределения newSession(), и этот сеанс удаляется, когда сеанс недействителен. Но у этого метода было много проблем. Насколько я понимаю, этот метод был очень грубым взломом, и если вы знаете другой метод, я буду благодарен. (Я использую калитку v1.5.4 и TOMCAT v7.0.25)Список активных сеансов в калитки

Update

Благодарим за ваши ответы, но мне нужно, чтобы получить список калитка сессии (WebSession). Я добавил HttpSessionListener со статическими картами WebSessions и HttpSessions (с синхронизацией). Этот способ лучше, чем у меня, и у меня нет старых проблем, но похоже, что он тоже взломан :(У вас есть представление о получении списка сеансов калитки?

+1

Нужен ли вам этот список для целей мониторинга? Если это так, то какой-то инструмент может помочь: http://stackoverflow.com/questions/242958/best-tools-to-monitor-tomcat –

+0

@ BorisPavlović частично вы правы. Это необходимо для страницы мониторинга, но я использую собственную реализацию WebSession и не знаю, как преобразовать объект tomcat в объект сеанса wicket – pushistic

ответ

6

Было бы приемлемо с помощью простого прослушивателя, что-то вроде ? это

public class SessionCounterListener implements HttpSessionListener { 

    private static int totalActiveSessions; 

    public static int getTotalActiveSession(){ 
    return totalActiveSessions; 
    } 

    @Override 
    public void sessionCreated(HttpSessionEvent event) { 
    totalActiveSessions++; 
} 

    @Override 
    public void sessionDestroyed(HttpSessionEvent event) { 
    totalActiveSessions--; 
    } 
} 


<web-app ...> 
    <listener> 
    <listener-class>SessionCounterListener</listener-class> 
</listener> 
</web-app> 

Существует также пример из "калитки в действии" книга here

+2

+1, но не должен быть синхронизирован с 'totalActiveSessions 'или' AtomicInteger'? Я не думаю, что спецификация сервлета говорит о параллельном доступе к сессионным слушателям. –

+1

Возможно, вы правы @ TomaszNurkiewicz, в реальном мире я бы, вероятно, синхронизировал его :) –

+0

Я сохранил список HttpSessions, но я не знаю, как преобразовать эти сеансы в сеансы калитки (WebSession), потому что я могу Найти метод для получения этого списка сеансов калитки – pushistic

1

Другим решением является использование JMX При просмотре:.

Catalina:type=Manager,context=/your_war_context,host=localhost 

Под Операции вы найдете listSessionIds() метод.

Смежные вопросы