ConcurrentModificationException при добавлении таймера в dashboard widget

Добрый день.

Столкнулся с проблемой возникновения ошибки ConcurrentModificationException:
java.util.ConcurrentModificationException at java.base/java.util.ArrayList$Itr.checkForComodification(ArrayList.java:1042) at java.base/java.util.ArrayList$Itr.next(ArrayList.java:996) at java.base/java.util.Collections$UnmodifiableCollection$1.next(Collections.java:1047) at com.vaadin.server.AbstractClientConnector$1.next(AbstractClientConnector.java:573) at com.vaadin.server.AbstractClientConnector$1.next(AbstractClientConnector.java:559) at com.vaadin.server.AbstractClientConnector.attach(AbstractClientConnector.java:642) at com.vaadin.ui.AbstractComponent.attach(AbstractComponent.java:670) at com.vaadin.ui.AbstractComponent.setParent(AbstractComponent.java:571) at com.vaadin.ui.AbstractSingleComponentContainer.setContent(AbstractSingleComponentContainer.java:157) at com.vaadin.ui.UI.setContent(UI.java:1409) at com.haulmont.cuba.web.AppUI.setTopLevelWindow(AppUI.java:627) at com.haulmont.cuba.web.sys.WebScreens.showRootWindow(WebScreens.java:1085) at com.haulmont.cuba.web.sys.WebScreens.show(WebScreens.java:458) at com.haulmont.cuba.web.App.createTopLevelWindow(App.java:306) at com.haulmont.cuba.web.DefaultApp.initializeUi(DefaultApp.java:244) at com.haulmont.cuba.web.DefaultApp.connectionStateChanged(DefaultApp.java:112) at com.haulmont.bali.events.EventHub.publish(EventHub.java:170) at com.haulmont.cuba.web.security.ConnectionImpl.fireStateChangeListeners(ConnectionImpl.java:228) at com.haulmont.cuba.web.security.ConnectionImpl.login(ConnectionImpl.java:106) at com.haulmont.cuba.web.security.LoginScreenAuthDelegate.doLogin(LoginScreenAuthDelegate.java:148) at com.haulmont.cuba.web.app.login.LoginScreen.doLogin(LoginScreen.java:275) at com.haulmont.cuba.web.app.login.LoginScreen.doLogin(LoginScreen.java:243) at com.haulmont.cuba.web.app.login.LoginScreen.login(LoginScreen.java:213) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.base/java.lang.reflect.Method.invoke(Method.java:566) at com.haulmont.cuba.gui.xml.DeclarativeAction.actionPerform(DeclarativeAction.java:101) at com.haulmont.cuba.web.gui.components.WebButton.buttonClicked(WebButton.java:67) at com.haulmont.cuba.web.widgets.CubaButton.fireClick(CubaButton.java:76) at com.vaadin.ui.Button$1.click(Button.java:57) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.base/java.lang.reflect.Method.invoke(Method.java:566) at com.vaadin.server.ServerRpcManager.applyInvocation(ServerRpcManager.java:153) at com.vaadin.server.ServerRpcManager.applyInvocation(ServerRpcManager.java:115) at com.vaadin.server.communication.ServerRpcHandler.handleInvocation(ServerRpcHandler.java:431) at com.vaadin.server.communication.ServerRpcHandler.handleInvocations(ServerRpcHandler.java:396) at com.vaadin.server.communication.ServerRpcHandler.handleRpc(ServerRpcHandler.java:260) at com.vaadin.server.communication.UidlRequestHandler.synchronizedHandleRequest(UidlRequestHandler.java:82) at com.vaadin.server.SynchronizedRequestHandler.handleRequest(SynchronizedRequestHandler.java:40) at com.vaadin.server.VaadinService.handleRequest(VaadinService.java:1578) at com.vaadin.server.VaadinServlet.service(VaadinServlet.java:425) at com.haulmont.cuba.web.sys.CubaApplicationServlet.serviceAppRequest(CubaApplicationServlet.java:329) at com.haulmont.cuba.web.sys.CubaApplicationServlet.service(CubaApplicationServlet.java:215) at javax.servlet.http.HttpServlet.service(HttpServlet.java:733) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.springframework.web.filter.CompositeFilter$VirtualFilterChain.doFilter(CompositeFilter.java:108) at org.springframework.web.filter.CompositeFilter.doFilter(CompositeFilter.java:74) at com.haulmont.cuba.web.sys.CubaHttpFilter.doFilter(CubaHttpFilter.java:93) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:541) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:143) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:690) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:374) at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:868) at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1590) at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) at java.base/java.lang.Thread.run(Thread.java:834)
Исходные данные:

  • CUBA Platform 7.2.11
  • Dashboard com.haulmont.addon.dashboard:dashboard-global:3.2.3
  1. С использованием ScreenFragment cоздан виджет
  2. В дескриптор виджета добавлен таймер
  3. Виджет добавлен на дашборд
  4. Создан ExtMainScreen и дашборд установлен для открытия по умолчанию в workArea.

Демопроект в приложении.
dashboardtimer.zip (201.0 КБ)