vaadin / spring

Spring integration for Vaadin
https://vaadin.com/start
177 stars 101 forks source link

Flow needs to be in the restart class loader to work with Spring Boot's developer tools #274

Closed denis-anisimov closed 5 years ago

denis-anisimov commented 6 years ago

@tulioag commented on Fri Dec 29 2017

When using flow with Spring Boot's developer tools, I get an IllegalArgumentException after I make a change and the application reloads. It seems that references to project's elements created in the initial restart classloader are kept in CustomElementRegistry.customElements. After the reload, the constructor tries to set fields with values from a different class loader, causing the exception.

Caused by: java.lang.IllegalArgumentException
    at com.vaadin.util.ReflectTools.setJavaFieldValue(ReflectTools.java:203) ~[flow-server-1.0.0.alpha13.jar:na]
    at com.vaadin.ui.polymertemplate.TemplateInitializer.injectTemplateElement(TemplateInitializer.java:422) ~[flow-server-1.0.0.alpha13.jar:na]
    at com.vaadin.ui.polymertemplate.TemplateInitializer.attachExistingElementById(TemplateInitializer.java:401) ~[flow-server-1.0.0.alpha13.jar:na]
    at com.vaadin.ui.polymertemplate.TemplateInitializer.injectClientSideElement(TemplateInitializer.java:360) ~[flow-server-1.0.0.alpha13.jar:na]
    at com.vaadin.ui.polymertemplate.TemplateInitializer.tryMapComponentOrElement(TemplateInitializer.java:314) ~[flow-server-1.0.0.alpha13.jar:na]
    at com.vaadin.ui.polymertemplate.TemplateInitializer.lambda$mapComponents$4(TemplateInitializer.java:284) ~[flow-server-1.0.0.alpha13.jar:na]
    at java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:184) ~[na:1.8.0_151]
    at java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:175) ~[na:1.8.0_151]
    at java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:948) ~[na:1.8.0_151]
    at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481) ~[na:1.8.0_151]
    at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471) ~[na:1.8.0_151]
    at java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:151) ~[na:1.8.0_151]
    at java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:174) ~[na:1.8.0_151]
    at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) ~[na:1.8.0_151]
    at java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:418) ~[na:1.8.0_151]
    at com.vaadin.ui.polymertemplate.TemplateInitializer.mapComponents(TemplateInitializer.java:284) ~[flow-server-1.0.0.alpha13.jar:na]
    at com.vaadin.ui.polymertemplate.TemplateInitializer.initChildElements(TemplateInitializer.java:142) ~[flow-server-1.0.0.alpha13.jar:na]
    at com.vaadin.ui.polymertemplate.PolymerTemplate.<init>(PolymerTemplate.java:62) ~[flow-server-1.0.0.alpha13.jar:na]
    at com.vaadin.ui.polymertemplate.PolymerTemplate.<init>(PolymerTemplate.java:72) ~[flow-server-1.0.0.alpha13.jar:na]
...
Caused by: java.lang.IllegalArgumentException
    at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:167) ~[na:1.8.0_151]
    at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:171) ~[na:1.8.0_151]
    at sun.reflect.UnsafeObjectFieldAccessorImpl.set(UnsafeObjectFieldAccessorImpl.java:81) ~[na:1.8.0_151]
    at java.lang.reflect.Field.set(Field.java:764) ~[na:1.8.0_151]
    at com.vaadin.util.ReflectTools.setJavaFieldValue(ReflectTools.java:198) ~[flow-server-1.0.0.alpha13.jar:na]
    ... 131 common frames omitted

Tested with: flow 1.0.0.alpha13


@Legioth commented on Tue Jan 02 2018

One potential "fix" for this issue would be to completely remove the CustomElementRegistry feature as described in https://github.com/vaadin/flow/issues/2486.

pleku commented 5 years ago

I don't think this is anymore valid as vaadin/flow#2486 has been done