VaadinSession не владеет блокировкой во время уничтожения, приводящего к AssertionError - PullRequest
0 голосов
/ 19 ноября 2018

Мы работаем с Vaadin (версия 8.5.1, vaadin-spring версия 3.1) и Spring (версия 5.1.1) внутри встроенного Tomcat. Когда я выключаю сервер Tomcat, я сталкиваюсь с AssertionError со следующей трассировкой стека:

Caused by: java.lang.AssertionError
at com.vaadin.server.VaadinSession.setAttribute(VaadinSession.java:1108) ~[vaadin-server-8.5.1.jar:8.5.1]
at com.vaadin.spring.internal.UIScopeImpl$UIStore.destroy(UIScopeImpl.java:246) ~[vaadin-spring-3.1.0.jar:3.1.0]
at com.vaadin.spring.internal.UIScopeImpl$UIStore.serviceDestroy(UIScopeImpl.java:260) ~[vaadin-spring-3.1.0.jar:3.1.0]
at com.vaadin.server.VaadinService.lambda$destroy$4(VaadinService.java:2115) ~[vaadin-server-8.5.1.jar:8.5.1]
at java.util.concurrent.ConcurrentHashMap$KeySetView.forEach(ConcurrentHashMap.java:4649) ~[?:1.8.0_191]
at java.util.Collections$SetFromMap.forEach(Collections.java:5476) ~[?:1.8.0_191]
at com.vaadin.server.VaadinService.destroy(VaadinService.java:2115) ~[vaadin-server-8.5.1.jar:8.5.1]
at com.vaadin.server.VaadinServlet.destroy(VaadinServlet.java:1440) ~[vaadin-server-8.5.1.jar:8.5.1]
at org.apache.catalina.core.StandardWrapper.unload(StandardWrapper.java:1281) ~[tomcat-embed-core-9.0.12.jar:9.0.12]

Похоже, что Tomcat вызывает метод destory () VaadinServlet, который, в свою очередь, вызывает VaadinService.destroy (). Поскольку это вызовет VaadinSession.setAttribute, для него потребуется блокировка, которой он не владеет. Используя отладчик, я подтвердил, что в данный момент блокировка не принадлежит никому.

Что я делаю не так? Я искал в Интернете, но, похоже, ни у кого нет такой проблемы Любая помощь приветствуется.

1 Ответ

0 голосов
/ 19 ноября 2018

Я думаю, что это ошибка в vaadin-spring. Я создал https://github.com/vaadin/spring/issues/383 для отслеживания этого дела.

...