如何在Vaadin中获得所有会话

del*_*nce 10 java session vaadin

我想知道有多少用户实时连接到我的应用程序.我有想法循环开放的会话数,但我找不到如何做到这一点.如果您有其他方法,欢迎提出建议.

d2k*_*2k2 6

到目前为止,我发现的最佳解决方案是在创建和销毁会话时对其进行计数.

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)


Bas*_*que 6

[收回]

这是一个错误的答案。我错误地认为引用的方法可以回答问题,但事实并非如此。认为这是一种退缩;而不是删除此答案,我将其保留,以便其他人避免犯错。


VaadinSession.getAllSessions()

Vaadin 7.2引入了静态方法VaadinSession.getAllSessions。有关历史记录,请参见票证#13053

该方法返回附加到CollectionVaadinSession对象的HttpSession

这个方法告诉你有多少VaadinSession对象运行的是单个用户的HttpSession,但并没有告诉你有多少用户整体如何您Vaadin应用服务器上。

  • 这将返回给定http会话的vaadin会话。为了实现所要求的功能,需要按以下说明收集http会话:http://stackoverflow.com/questions/10770535/is-there-any-method-to-obtain-in-a-servlet-all -valid-session-keys-values-on-jett或使用Vaadin SessionInitListener (2认同)