【问题标题】:List of active sessions in wicketwicket 中的活动会话列表
【发布时间】:2012-02-08 10:13:50
【问题描述】:

我需要获取活动检票口会话的列表。现在我将所有新会话保存在覆盖方法 newSession() 中,并且当会话无效时,该会话被删除。但是这种方法有很多问题。我对这种方法的理解是非常粗鲁的,如果您知道另一种方法,我将不胜感激。 (我使用 wicket v1.5.4 和 tomcat v7.0.25)

更新

感谢您的回答,但我需要获取 WICKET 会话 (WebSession) 的列表。我添加了带有 WebSessions 和 HttpSessions 静态映射的 HttpSessionListener(带同步)。这种方式比我的要好,并且没有旧问题,但它看起来也像 hack :(。你对获取检票口会话列表有任何想法吗?

【问题讨论】:

  • 您是否需要该列表进行监控?如果是这样,那么一些工具可以提供帮助:stackoverflow.com/questions/242958/best-tools-to-monitor-tomcat
  • @BorisPavlović 部分你是对的。需要监控页面,但我使用自己的WebSession实现,不知道如何将tomcat的对象转换为wicket会话对象

标签: java tomcat wicket


【解决方案1】:

用一个简单的 Listener 来代替是否可以接受?

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>

还有一个来自“Wicket in action”一书中的示例here

【讨论】:

  • +1,但不应该同步访问totalActiveSessions 或使用AtomicInteger?我不认为 servlet 规范对会话监听器的并发访问有任何说明。
  • 你可能是对的@TomaszNurkiewicz,在现实世界的应用程序中我可能会同步它:)
  • 我已经保存了 HttpSessions 列表,但我不知道如何将这些会话转换为 wickets 会话 (WebSession),因为我找不到获取此 wickets 会话列表的方法
【解决方案2】:

另一个解决方案是使用 JMX。如果您浏览到:

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

Operations下你会找到listSessionIds()方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-10-29
    • 2012-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-01
    相关资源
    最近更新 更多