У меня есть приложение vaadin flow (13) с пружинным ботинком. У меня есть VerticalLayout, помеченный @UIScope
с несколькими вложенными макетами. Дополнительные макеты помечаются @Scope("prototype")
и создаются с помощью ctx.getBean(SubUI.class, ...)
. В зависимости от выбора и нажатия кнопок в родительском пользовательском интерфейсе (VerticalLayout) добавляются или удаляются вложенные макеты.
Все это работает нормально, пока я использую только приложение (именно поэтому я обнаружил ошибку прямо сейчас, после доставки приложения моему клиенту для проверки acceptantce). Они тестировали с несколькими пользователями. Пока один пользователь работает с приложением, все работает, но как только второй пользователь входит в пользовательский интерфейс (VerticalLayout), возникает следующее исключение:
java.util.concurrent.ExecutionException: java.lang.IllegalStateException: Cannot access state in VaadinSession or UI without locking the session.
at java.util.concurrent.FutureTask.report(FutureTask.java:122) ~[na:1.8.0_202]
at java.util.concurrent.FutureTask.get(FutureTask.java:192) ~[na:1.8.0_202]
...
Я пробовал разные аннотации для своего родительского макета (@UIScope, @Scope ("прототип"), @VaadinSessionScope), но это не решило мою ошибку.
Я погуглил о проблеме и нашел несколько тем, но ни один из них не помог мне решить мою проблему. Я не совсем уверен, вызвана ли проблема ограничением объема моих пользовательских интерфейсов / макетов или, возможно, привязкой данных. В моих дополнительных макетах данные связаны с использованием Binder<MyEntity> binder = new Binder<>(MyEntity.class);
и binder.forField(xxx).bind(MyEntity::getXY,MyEntity::setXY);
.
Может кто-нибудь объяснить мне, в чем моя проблема? Я был бы очень счастлив, потому что мне нужно поставить фиксированную версию для тестирования моих клиентов.
С уважением
-ea
в качестве параметра JVM), чтобы узнать, дает ли это дополнительную информацию? - person Leif Åstrand   schedule 12.02.2020