Java 如何在Vaadin获得所有会话
我想知道有多少用户实时连接到我的应用程序。我有一个想法,循环打开的会话数,但我找不到如何做。如果你有其他方法,欢迎你的建议 到目前为止,我找到的最佳解决方案是在创建和销毁会话时对会话进行计数Java 如何在Vaadin获得所有会话,java,session,vaadin,Java,Session,Vaadin,我想知道有多少用户实时连接到我的应用程序。我有一个想法,循环打开的会话数,但我找不到如何做。如果你有其他方法,欢迎你的建议 到目前为止,我找到的最佳解决方案是在创建和销毁会话时对会话进行计数 public class VaadinSessionListener{ private static volatile int activeSessions = 0; public static class VaadinSessionInitListener implements Ses
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++;
}
}
然后在VaadinServlet init()方法中添加SessionListeners
[撤回]
这里有一个错误的答案。我错误地认为引用的方法回答了这个问题,但事实并非如此将此视为撤回;我不会删除这个答案,而是留下它,这样别人就不会犯我的错误了
VaadinSession.getAllSessions()
Vaadin 7.2增加了一个静态方法。有关历史,请参见
该方法返回附加到单个对象的一组对象
此方法会告诉您单个用户的HttpSession运行了多少个VaadinSession对象,但不会告诉您Vaadin应用程序服务器上有多少用户。它不起作用!我在我的
UI
中添加了Servlet
类,但它没有增加计数器。还有什么我必须更改的吗?Servlet类应该已经在UI中可用了。您使用的是哪个vaadin版本和servlet版本?带Maven的vaadin 7.2。我在Web.xml中使用了com.vaadin.server.VaadinServlet
,我的代码示例是针对Servlet3.0规范的。您可能还需要在web.xml中添加正确的Servlet。web.xml中的com.vaadin.server.VaadinServlet是错误的。当我将Servlet
放在另一个java类中并更改Servlet
在web.xml
中的位置时,它起作用了。谢谢,这个主意很好。这将返回给定http会话的vaadin会话。为了实现所要求的功能,需要按照此处所述收集http会话:或者使用Vaadin SessionInitListener
@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());
}
}