magro/memcached-session-manager

java.lang.NoSuchFieldException: parentOffset

Closed this issue · 1 comments

Please see the details below. Any guidance is appreciated.

We are using TC8.5 in AWS with Elasticache.

I have these jars in my $TOMCAT_HOME/lib

AmazonElastiCacheClusterClient-no-version.jar
memcached-session-manager-1.9.5.jar
memcached-session-manager-tc8-1.9.5.jar

JDK is Corretto 11

We started getting this error (I believe) after the update to JDK 11.

12-Feb-2021 01:21:29.036 WARNING [msm-storage-thread-1] de.javakaffee.web.msm.BackupSessionTask.call FAILED for session id FBDDF4F0193D7386B1E7BF727E19CD48
	java.lang.RuntimeException: java.lang.NoSuchFieldException: parentOffset
		at de.javakaffee.kryoserializers.SubListSerializers$ArrayListSubListSerializer.<init>(SubListSerializers.java:105)
		at de.javakaffee.kryoserializers.SubListSerializers$ArrayListSubListSerializer.addDefaultSerializer(SubListSerializers.java:121)
		at de.javakaffee.kryoserializers.SubListSerializers.addDefaultSerializers(SubListSerializers.java:78)
		at de.javakaffee.web.msm.serializer.kryo.KryoTranscoder$2.create(KryoTranscoder.java:127)
		at com.esotericsoftware.kryo.pool.KryoPoolQueueImpl.borrow(KryoPoolQueueImpl.java:51)
		at de.javakaffee.web.msm.serializer.kryo.KryoTranscoder.serializeAttributes(KryoTranscoder.java:224)
		at de.javakaffee.web.msm.TranscoderService.serializeAttributes(TranscoderService.java:151)
		at de.javakaffee.web.msm.BackupSessionTask.serializeAttributes(BackupSessionTask.java:180)
		at de.javakaffee.web.msm.BackupSessionTask.call(BackupSessionTask.java:110)
		at de.javakaffee.web.msm.BackupSessionTask.call(BackupSessionTask.java:51)
		at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
		at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
		at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
		at java.base/java.lang.Thread.run(Thread.java:829)
	Caused by: java.lang.NoSuchFieldException: parentOffset
		at java.base/java.lang.Class.getDeclaredField(Class.java:2411)
		at de.javakaffee.kryoserializers.SubListSerializers$ArrayListSubListSerializer.<init>(SubListSerializers.java:99)
		... 13 more

This dependency combination allows you to use this with Tomcat 8.5 /JDK 11.

It upgrades the kryo-serializers to incorporate the JDK 9+ fix, and then maintains the kryo version that has the KryoFactory interface that version 2.3.2 still uses.

    runtimeOnly 'de.javakaffee.msm:msm-kryo-serializer:2.3.2'
    runtimeOnly 'de.javakaffee:kryo-serializers:0.45'
    runtimeOnly 'com.esotericsoftware:kryo:4.0.0'