del*_*nce 10 java session vaadin
我想知道有多少用户实时连接到我的应用程序.我有想法循环开放的会话数,但我找不到如何做到这一点.如果您有其他方法,欢迎提出建议.
到目前为止,我发现的最佳解决方案是在创建和销毁会话时对其进行计数.
public class VaadinSessionListener{
private static volatile int activeSessions = 0;
public static class VaadinSessionInitListener implements SessionInitListener{
@Override
public void sessionInit(SessionInitEvent event) throws ServiceException {
incSessionCounter();
}
}
public static class VaadinSessionDestroyListener implements SessionDestroyListener{
@Override
public void sessionDestroy(SessionDestroyEvent event) {
/*
* check if HTTP Session is closing
*/
if(event.getSession() != null && event.getSession().getSession() != null){
decSessionCounter();
}
}
}
public static Integer getActiveSessions() {
return activeSessions;
}
private synchronized static void decSessionCounter(){
if(activeSessions > 0){
activeSessions--;
}
}
private synchronized static void incSessionCounter(){
activeSessions++;
}
}
Run Code Online (Sandbox Code Playgroud)
然后在VaadinServlet init()方法中添加SessionListeners
@WebServlet(urlPatterns = "/*", asyncSupported = true)
@VaadinServletConfiguration(productionMode = true, ui = MyUI.class)
public static class Servlet extends VaadinServlet {
@Override
public void init(ServletConfig servletConfig) throws ServletException {
super.init(servletConfig);
/*
* Vaadin SessionListener
*/
getService().addSessionInitListener(new VaadinSessionListener.VaadinSessionInitListener());
getService().addSessionDestroyListener(new VaadinSessionListener.VaadinSessionDestroyListener());
}
}
Run Code Online (Sandbox Code Playgroud)
这是一个错误的答案。我错误地认为引用的方法可以回答问题,但事实并非如此。认为这是一种退缩;而不是删除此答案,我将其保留,以便其他人避免犯错。
VaadinSession.getAllSessions()Vaadin 7.2引入了静态方法VaadinSession.getAllSessions。有关历史记录,请参见票证#13053。
该方法返回附加到Collection的VaadinSession对象的HttpSession。
这个方法告诉你有多少VaadinSession对象运行的是单个用户的HttpSession,但并没有告诉你有多少用户整体如何您Vaadin应用服务器上。
| 归档时间: |
|
| 查看次数: |
6626 次 |
| 最近记录: |