Odd new error on deployed startup: "Exception loading sessions from persistent storage"

As of yesterday, I am getting an exception upon startup of my deployed application (deployed to a Docker Container running Tomcat). The exception does not seem to cause any problem; the application still works fine, but… it’s an exception and I’d like to find out what is causing it.

22-Jun-2022 13:26:53.248 SEVERE [main] org.apache.catalina.session.StandardManager.startInternal Exception loading sessions from persistent storage
	java.lang.ClassNotFoundException: com.haulmont.cuba.web.sys.CubaVaadinServletService$CubaReentrantLock
		at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1365)
		at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1188)
		at java.base/java.lang.Class.forName0(Native Method)
		at java.base/java.lang.Class.forName(Class.java:398)
		at org.apache.catalina.util.CustomObjectInputStream.resolveClass(CustomObjectInputStream.java:159)
		at java.base/java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1943)
		at java.base/java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1829)
		at java.base/java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2117)
		at java.base/java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1646)
		at java.base/java.io.ObjectInputStream.readObject(ObjectInputStream.java:464)
		at java.base/java.io.ObjectInputStream.readObject(ObjectInputStream.java:422)
		at org.apache.catalina.session.StandardSession.doReadObject(StandardSession.java:1587)
		at org.apache.catalina.session.StandardSession.readObjectData(StandardSession.java:1040)
		at org.apache.catalina.session.StandardManager.doLoad(StandardManager.java:218)
		at org.apache.catalina.session.StandardManager.load(StandardManager.java:162)
		at org.apache.catalina.session.StandardManager.startInternal(StandardManager.java:354)
		at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
		at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5164)
		at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
		at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:717)
		at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:690)
		at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:705)
		at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:978)
		at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1848)
		at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
		at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
		at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75)
		at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:118)
		at org.apache.catalina.startup.HostConfig.deployWARs(HostConfig.java:773)
		at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:427)
		at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1576)
		at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:309)
		at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:123)
		at org.apache.catalina.util.LifecycleBase.setStateInternal(LifecycleBase.java:423)
		at org.apache.catalina.util.LifecycleBase.setState(LifecycleBase.java:366)
		at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:936)
		at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:841)
		at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
		at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1384)
		at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1374)
		at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
		at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75)
		at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:140)
		at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:909)
		at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:262)
		at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
		at org.apache.catalina.core.StandardService.startInternal(StandardService.java:421)
		at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
		at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:930)
		at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
		at org.apache.catalina.startup.Catalina.start(Catalina.java:633)
		at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
		at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
		at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
		at java.base/java.lang.reflect.Method.invoke(Method.java:566)
		at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:343)
		at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:474)		

Ideas?

Hi,
This is an exception when Tomcat tries to restore saved session from disk after restart.
But CUBA sessions are not serializable, so restoring them is impossible.

Normally CUBA projects disable session persistence by having context.xml files in core and web modules with this entry:

<Context>
    <!-- Switch off session serialization -->
    <Manager pathname=""/>
</Context>

Huh - I recently added a second datastore and changed the data source definition location from JNDI to Application - which seemed to have caused Studio to remove the context.xml - this coincides with when the exception started happening.

What is the recommended way to put it back and have Studio not remove it?

Just put it back (without dataSource definition). Studio shouldn’t remove it.

Studio did remove it, it also removed the includeContextXml line from build.gradle which I put back.