Skip to content

Jetty throws NotSerializableException for GrailsParameterMap  #12688

@transentia

Description

@transentia

Expected Behavior

I have a fully working application that has always used Tomcat.
Thought I'd see if Jetty would give me a bit more performance.
Converted my build by referencing https://github.com/puneetbehl/grails-jetty-example
NO source changes outside build.gradle.
Expected no problems.
It seems to work so far, but I get MANY warnings on each page view about "java.io.NotSerializableException: grails.web.servlet.mvc.GrailsParameterMap"

Indeed:

public class GrailsParameterMap extends TypeConvertingMap implements Cloneable {
...

Actual Behaviour

I get:

20:11:52.187  WARN --- [tp1678636614-81] org.eclipse.jetty.server.session         : 

org.eclipse.jetty.server.session.UnwriteableSessionDataException: Unwriteable session node0z6iucusdvrgf126xzbk1y64f60 for node0__0.0.0.0
	at org.eclipse.jetty.server.session.FileSessionDataStore.doStore(FileSessionDataStore.java:330)
	at org.eclipse.jetty.server.session.AbstractSessionDataStore$1.run(AbstractSessionDataStore.java:142)
	at org.eclipse.jetty.server.handler.ContextHandler.handle(ContextHandler.java:1507)
	at org.eclipse.jetty.server.handler.ContextHandler.handle(ContextHandler.java:1544)
	at org.eclipse.jetty.server.session.SessionContext.run(SessionContext.java:92)
	at org.eclipse.jetty.server.session.AbstractSessionDataStore.store(AbstractSessionDataStore.java:155)
	at org.eclipse.jetty.server.session.AbstractSessionCache.release(AbstractSessionCache.java:581)
	at org.eclipse.jetty.server.session.SessionHandler.complete(SessionHandler.java:369)
	at org.eclipse.jetty.server.Request.lambda$leaveSession$0(Request.java:408)
	at org.eclipse.jetty.server.handler.ContextHandler.handle(ContextHandler.java:1525)
	at org.eclipse.jetty.server.Request.leaveSession(Request.java:408)
	at org.eclipse.jetty.server.Request.onCompleted(Request.java:1550)
	at org.eclipse.jetty.server.HttpChannel.onCompleted(HttpChannel.java:917)
	at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:467)
	at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:277)
	at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:311)
	at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:105)
	at org.eclipse.jetty.io.ChannelEndPoint$1.run(ChannelEndPoint.java:104)
	at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:338)
	at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:315)
	at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:173)
	at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:131)
	at org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:409)
	at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:883)
	at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1034)
	at java.base/java.lang.Thread.run(Thread.java:833)
Caused by: java.io.NotSerializableException: grails.web.servlet.mvc.GrailsParameterMap
	at java.base/java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1192)
	at java.base/java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:358)
	at org.eclipse.jetty.server.session.SessionData.serializeAttributes(SessionData.java:117)
	at org.eclipse.jetty.server.session.FileSessionDataStore.save(FileSessionDataStore.java:478)
	at org.eclipse.jetty.server.session.FileSessionDataStore.doStore(FileSessionDataStore.java:322)
	... 25 common frames omitted

I note taht this is only a WARN and I could probably just silence this in my logback config but it is unexpected, gives me a feeling of uncertainty and may kill the performance that is my justification for using Jetty.

Steps To Reproduce

No response

Environment Information

Windows 11
Java openjdk-18.0.2.1_windows-x64_bin
Grails 5.2.3

Example Application

No response

Version

5.2.3

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions