Vaadin Flow & Spring Boot: ошибка при открытии в нескольких вкладках / окнах

В настоящее время я разрабатываю приложение с Vaadin Flow (v11.0.0) и Spring Boot (v2.0.4) с использованием шаблона MVP. Приложение работает нормально, если открыто только на одной вкладке. При перезагрузке обновляется вся страница, и это нормально. Кроме того, открытие его во второй вкладке или окне (неважно, инкогнито или нет) работает нормально. Но когда я нажимаю что-то в одном окне, а затем в другом, возникает следующая ошибка:

java.lang.IllegalStateException: Cannot access state in VaadinSession or UI without locking the session.
at com.vaadin.flow.server.VaadinSession.checkHasLock(VaadinSession.java:515) ~[flow-server-1.0.5.jar:na]
at com.vaadin.flow.server.VaadinSession.checkHasLock(VaadinSession.java:529) ~[flow-server-1.0.5.jar:na]
at com.vaadin.flow.internal.StateTree.checkHasLock(StateTree.java:390) ~[flow-server-1.0.5.jar:na]
at com.vaadin.flow.internal.StateTree.markAsDirty(StateTree.java:258) ~[flow-server-1.0.5.jar:na]
at com.vaadin.flow.internal.StateNode.markAsDirty(StateNode.java:326) ~[flow-server-1.0.5.jar:na]
at com.vaadin.flow.internal.nodefeature.NodeValue.markAsDirty(NodeValue.java:85) ~[flow-server-1.0.5.jar:na]
at com.vaadin.flow.internal.nodefeature.NodeValue.setValue(NodeValue.java:78) ~[flow-server-1.0.5.jar:na]
at com.vaadin.flow.internal.nodefeature.TextNodeMap.setText(TextNodeMap.java:52) ~[flow-server-1.0.5.jar:na]

У меня есть только одно представление (и, следовательно, также ведущее), которое я аннотирую следующим образом:

@Route(value = LogAnalysis.route)
@PageTitle(LogAnalysis.name)
class LogAnalysisView(val presenter: LogAnalysis.ViewPresenter) : VerticalLayout(), LogAnalysis.View, BeforeEnterObserver { ... }

@Component
@UIScope
@VaadinSessionScope
class LogAnalysisPresenter(val service: LogAnalysis.Service) : LogAnalysis.ServicePresenter, LogAnalysis.ViewPresenter { ... }

person Katharina    schedule 20.09.2018    source источник


Ответы (1)


Мне удалось решить проблему, добавив аннотацию @UIScope к Сервису (модели).

Я предположил, что служба может быть одноэлементной, поскольку она только извлекает и готовит данные из базы данных, но служба содержит ссылку на ведущего, которая перезаписывается каждый раз при создании нового сеанса.

person Katharina    schedule 20.09.2018