Vaadin Flow & Spring Boot: ошибка при открытии в нескольких вкладках / окнах - PullRequest
0 голосов
/ 20 сентября 2018

В настоящее время я разрабатываю приложение с 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 { ... }

1 Ответ

0 голосов
/ 20 сентября 2018

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

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

...