Vaadin 24.3.x + Jetbrain + Tomcat 10 on Mac (aarch64) : Hotswap does not work

Hi All,
I’ve been struggling with hotswap for a while now and I cannot figure out how to solve the issue.
Hotswap used to work fine and it suddenly stopped working somewhere in the Vaadin 24.3.x line.
I’ve started from scracth and followed the set-up instructions here : Live Reload with HotswapAgent | Hot Deploy & Live Reload | Configuration | Vaadin Docs
using

When I start the app in tomcat10 I’m getting some logs about Hotswap beeing injected at various places :

HOTSWAP AGENT: 18:50:37.922 INFO (org.hotswap.agent.config.PluginRegistry) - Plugin 'org.hotswap.agent.plugin.tomcat.TomcatPlugin' initialized in ClassLoader 'ParallelWebappClassLoader
  context: ROOT
  delegate: false
----------> Parent Classloader:
java.net.URLClassLoader@14fa86ae
'.
HOTSWAP AGENT: 18:50:37.922 INFO (org.hotswap.agent.plugin.tomcat.TomcatPlugin) - Tomcat plugin initialized - Tomcat version '10.1.12.0'
HOTSWAP AGENT: 18:50:38.829 INFO (org.hotswap.agent.plugin.vaadin.VaadinPlugin) - Initialized Vaadin plugin

HOTSWAP AGENT: 18:50:38.957 INFO (org.hotswap.agent.config.PluginRegistry) - Plugin 'org.hotswap.agent.plugin.jackson.JacksonPlugin' initialized in ClassLoader 'ParallelWebappClassLoader
  context: ROOT
  delegate: false
----------> Parent Classloader:
java.net.URLClassLoader@14fa86ae
'.
HOTSWAP AGENT: 18:50:46.954 INFO (org.hotswap.agent.config.PluginRegistry) - Plugin 'org.hotswap.agent.plugin.tomcat.TomcatPlugin' initialized in ClassLoader 'ParallelWebappClassLoader
  context: manager
  delegate: false
----------> Parent Classloader:
java.net.URLClassLoader@14fa86ae
'.

an exception in the start-up logs and until I upgraded to 24.3.10 I was getting a red-dot next to “Live reload Java” on the Info tab shown on a development build.
I upgraded to 24.3.10 and not I got a green dot showing "Java active (HotswapAgent)
" but live reload still does not work (It says classes are up-to date but the changes are not taken into account; I have to restart tomcat).

I’m seeing this exception in the logs when I perform a Live Reload:

[http-nio-8080-exec-3] ERROR com.vaadin.base.devserver.DebugWindowConnection - Error sending message
com.fasterxml.jackson.databind.exc.InvalidDefinitionException: No serializer found for class com.vaadin.base.devserver.ServerInfo$NameAndVersion and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS) (through reference chain: com.vaadin.base.devserver.DebugWindowMessage["data"]->com.vaadin.base.devserver.ServerInfo["versions"]->java.util.ArrayList[0])
	at com.fasterxml.jackson.databind.exc.InvalidDefinitionException.from(InvalidDefinitionException.java:77)
	at com.fasterxml.jackson.databind.SerializerProvider.reportBadDefinition(SerializerProvider.java:1191)
	at com.fasterxml.jackson.databind.DatabindContext.reportBadDefinition(DatabindContext.java:404)
	at com.fasterxml.jackson.databind.ser.impl.UnknownSerializer.failForEmpty(UnknownSerializer.java:71)
	at com.fasterxml.jackson.databind.ser.impl.UnknownSerializer.serialize(UnknownSerializer.java:33)
	at com.fasterxml.jackson.databind.ser.impl.IndexedListSerializer.serializeContentsUsing(IndexedListSerializer.java:142)
	at com.fasterxml.jackson.databind.ser.impl.IndexedListSerializer.serializeContents(IndexedListSerializer.java:88)
	at com.fasterxml.jackson.databind.ser.impl.IndexedListSerializer.serialize(IndexedListSerializer.java:79)
	at com.fasterxml.jackson.databind.ser.impl.IndexedListSerializer.serialize(IndexedListSerializer.java:18)
	at com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:727)
	at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:722)
	at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:166)
	at com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:727)
	at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:722)
	at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:166)
	at com.fasterxml.jackson.databind.ser.DefaultSerializerProvider._serialize(DefaultSerializerProvider.java:480)
	at com.fasterxml.jackson.databind.ser.DefaultSerializerProvider.serializeValue(DefaultSerializerProvider.java:319)
	at com.fasterxml.jackson.databind.ObjectMapper._configAndWriteValue(ObjectMapper.java:4094)
	at com.fasterxml.jackson.databind.ObjectMapper.writeValueAsString(ObjectMapper.java:3404)
	at com.vaadin.base.devserver.DebugWindowConnection.send(DebugWindowConnection.java:241)
	at com.vaadin.base.devserver.DebugWindowConnection.handleConnect(DebugWindowConnection.java:225)
	at com.vaadin.base.devserver.DebugWindowConnection.onConnect(DebugWindowConnection.java:202)
	at com.vaadin.flow.server.communication.PushHandler.lambda$onConnect$3(PushHandler.java:599)
	at java.base/java.util.Optional.ifPresent(Optional.java:178)
	at com.vaadin.flow.server.communication.PushHandler.lambda$onConnect$4(PushHandler.java:598)
	at com.vaadin.flow.server.communication.PushHandler.callWithServiceAndSession(PushHandler.java:227)
	at com.vaadin.flow.server.communication.PushHandler.onConnect(PushHandler.java:595)
	at com.vaadin.flow.server.communication.PushAtmosphereHandler.onConnect(PushAtmosphereHandler.java:103)
	at com.vaadin.flow.server.communication.PushAtmosphereHandler.onRequest(PushAtmosphereHandler.java:77)
	at org.atmosphere.cpr.AsynchronousProcessor.action(AsynchronousProcessor.java:217)
	at org.atmosphere.cpr.AsynchronousProcessor.suspended(AsynchronousProcessor.java:103)
	at org.atmosphere.container.Servlet30CometSupport.service(Servlet30CometSupport.java:67)
	at org.atmosphere.cpr.AtmosphereFramework.doCometSupport(AtmosphereFramework.java:2284)
	at org.atmosphere.websocket.DefaultWebSocketProcessor.dispatch(DefaultWebSocketProcessor.java:574)
	at org.atmosphere.websocket.DefaultWebSocketProcessor.open(DefaultWebSocketProcessor.java:213)
	at org.atmosphere.container.JSR356Endpoint.onOpen(JSR356Endpoint.java:254)
	at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.init(WsHttpUpgradeHandler.java:131)
	at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:936)
	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1740)
	at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52)
	at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191)
	at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)
	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
	at java.base/java.lang.Thread.run(Thread.java:840)

Any idea how to get rid of it ? Is that the cause of my issues ?
Thanks for your help.

Java live-reload with HotSwap agent is semi-working · Issue #19247 · vaadin/flow · GitHub maybe?

it looks like it … thanks for pointing me there. Now let’s hope a fix can be found quickly