用不同的浏览器打开后台直接报错!

后台启动之后,用不同的浏览器打开首页(先用Chrome后用edge,反过来也行),后打开的直接报错:
java.lang.IllegalStateException: Session has already been set. Old session: com.vaadin.server.VaadinSession@4a3a696d for app_servlet. New session: com.vaadin.server.VaadinSession@3bbfe3fe for app_servlet.
at com.vaadin.ui.UI.setSession(UI.java:469) ~[vaadin-server-8.6.4-17-cuba.jar:8.6.4-17-cuba]
at com.vaadin.server.communication.UIInitHandler.getBrowserDetailsUI(UIInitHandler.java:189) ~[vaadin-server-8.6.4-17-cuba.jar:8.6.4-17-cuba]
at com.vaadin.server.communication.UIInitHandler.synchronizedHandleRequest(UIInitHandler.java:67) ~[vaadin-server-8.6.4-17-cuba.jar:8.6.4-17-cuba]
at com.vaadin.server.SynchronizedRequestHandler.handleRequest(SynchronizedRequestHandler.java:40) ~[vaadin-server-8.6.4-17-cuba.jar:8.6.4-17-cuba]
at com.vaadin.server.VaadinService.handleRequest(VaadinService.java:1577) ~[vaadin-server-8.6.4-17-cuba.jar:8.6.4-17-cuba]
at com.vaadin.server.VaadinServlet.service(VaadinServlet.java:425) [vaadin-server-8.6.4-17-cuba.jar:8.6.4-17-cuba]
at com.haulmont.cuba.web.sys.CubaApplicationServlet.serviceAppRequest(CubaApplicationServlet.java:329) [cuba-web-7.0.9.jar:7.0.9]
at com.haulmont.cuba.web.sys.CubaApplicationServlet.service(CubaApplicationServlet.java:215) [cuba-web-7.0.9.jar:7.0.9]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:741) [servlet-api.jar:na]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231) [catalina.jar:9.0.14]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) [catalina.jar:9.0.14]
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) [tomcat-websocket.jar:9.0.14]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) [catalina.jar:9.0.14]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) [catalina.jar:9.0.14]
at org.springframework.web.filter.CompositeFilter$VirtualFilterChain.doFilter(CompositeFilter.java:107) [spring-web-5.1.6.RELEASE.jar:5.1.6.RELEASE]
at org.springframework.web.filter.CompositeFilter.doFilter(CompositeFilter.java:73) [spring-web-5.1.6.RELEASE.jar:5.1.6.RELEASE]
at com.haulmont.cuba.web.sys.CubaHttpFilter.doFilter(CubaHttpFilter.java:108) [cuba-web-7.0.9.jar:7.0.9]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) [catalina.jar:9.0.14]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) [catalina.jar:9.0.14]
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:199) [catalina.jar:9.0.14]
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96) [catalina.jar:9.0.14]
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:490) [catalina.jar:9.0.14]
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139) [catalina.jar:9.0.14]
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) [catalina.jar:9.0.14]
at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:668) [catalina.jar:9.0.14]
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) [catalina.jar:9.0.14]
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) [catalina.jar:9.0.14]
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:408) [tomcat-coyote.jar:9.0.14]
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66) [tomcat-coyote.jar:9.0.14]
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:834) [tomcat-coyote.jar:9.0.14]
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1417) [tomcat-coyote.jar:9.0.14]
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) [tomcat-coyote.jar:9.0.14]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [na:1.8.0_45]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [na:1.8.0_45]
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) [tomcat-util.jar:9.0.14]
at java.lang.Thread.run(Thread.java:745) [na:1.8.0_45]

版本7.0.9,之前低版本没出现这种情况!

不用两个浏览器,一个浏览器,先登录一次,然后关闭网页,在打开,就会报错。

IllegalStateException: This UI instance is already initialized (as UI id 0) and can therefore not be initialized again (as UI id 1). Please make sure you are not accidentally reusing an old UI instance.

这个问题看上去是这么个场景: 用户登录之后,系统会自动创建一个 UI(可能是个 tab 或者首页),然后用户没有退出,直接关闭的网页,这样后台 UI 还没有清除。如果再次打开,由于 session 保存了,用户会自动登录,这时候代码会尝试再次创建那个 UI,就会导致这个错误。

看看你们是否有类似的场景?

mainWindow里加了什么特殊逻辑吗?

是的,我的用户没有退出,直接关闭了网页,然后在打开网页,就出现这个问题了。但是7.0.8是好的啊。

没有在MainWindow里写逻辑。

这个问题我们这边几个环境都测试过,没法重现。
你可以先建一个空的CUBA 项目测试一下,看看是否存在问题。如果空的CUBA 项目正常, 基本可以排除是CUBA 本身的问题,那么就从你项目代码方面再排查。

查一下你有没有扩展 AppUI, AppUI的Scope定义是否正确。
正确的定义方式应该是:
<bean id="cuba_AppUI" class="com.xxx.yyyy.web.app.AppUI" scope="prototype" />

的确扩展过AppUI并且没有设置scope。
设置了scope="prototype"问题解决了,感谢回复!