在不锁定会话的情况下无法访问VaadinSession或UI中的状态

问题描述

Vaadin 14

  1. 我们使用Vaadin应用程序上线了。这是我第一次上线。当我们尝试使用倍数标签重新加载整个页面时(从数据库填充内容)。仅当服务器上的负载增加(10人以上)时,才会出现此错误。当一两个人使用该应用程序时,不会出现此类错误/异常。

以下是出现此错误代码之一:

private void reloadAssignmentButton_onClick(final ClickEvent<Button> event)
{
    try
    {
        this.clearallLayouts();
        this.makeAllTabsInVisible();
        AssignmentFileDashboardView.log.info(UI.getCurrent().getSession().getAttribute(ConfigProperties.SESSION_KEY)
            + "::AssignmentFileDashboardView:::reloadAssignmentButton_onClick:::::CAN_FILE_NUMBER"
            + UI.getCurrent().getSession().getAttribute(ConfigProperties.CAN_FILE_NUMBER).toString());
        this.loadAssignment(
            Long.parseLong(UI.getCurrent().getSession()
                .getAttribute(ConfigProperties.CAN_FILE_NUMBER).toString()));
        AssignmentFileDashboardView.tabs.setSelectedTab(AssignmentFileDashboardView.assignmentTab);
    }
    catch(final Exception e)
    {
        AssignmentFileDashboardView.log
            .error(UI.getCurrent().getSession().getAttribute(ConfigProperties.SESSION_KEY)
                + "::AssignmentFileDashBoardView::assignmentRefreshButton_buttonClick::error:: " + e.getMessage()
                + e.getStackTrace(),e);
        
    }
    
}

这是我的tomcat配置:

<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="30000" redirectPort="8443" maxThreads="1000" minSpareThreads="50" acceptCount="300" enableLookUps="false" maxKeepAliveRequest = "1"/>
  1. 单击这些选项卡有时会停止工作。再次有一个或两个用户,它可以正常工作,但有时会停止工作。

  2. 有时,我单击选项卡,页面加载为空白。再次有1个或2个用户使用它没问题。

(最初,我以为该选项卡可能会出现问题,并且我将选项卡更改为多个按钮,以为该按钮将始终调用click事件,但现在按钮有时也会执行相同的操作。)

我们还活着,请帮助我。预先感谢。

解决方法

  1. 我的UI是父页面。
  2. 该父页面具有垂直布局,其中子页面正在打开。
  3. 此父页面具有一些按钮(需要通过子页面事件显示和隐藏),标签(需要通过子页面事件显示和隐藏),标签(需要通过子页面事件更新)诸如此类的东西。
  4. 为了进行所有这些更新,我将父级“ Vaadin组件”设为静态,因为我无法创建父级页面的对象,因为我们需要在打开页面时对其进行更新。

就我而言,拥有“静态” Vaadin组件给了我这个问题以及许多其他问题。在这种情况下,一个工作的人没有遇到任何问题。但是当开始生产时,这使我的生活很痛苦。

学习请不要尝试将Vaadin组件设置为“静态”。实际上,请尽量避免使用“静态”关键字(如果您不知道后果,在这种情况下就是我)。