1 year ago
#75284
Luca Trecarichi
Cannot invoke "com.vaadin.flow.server.VaadinService.getContext()", the return value of "com.vaadin.flow.server.VaadinSession.getService()" is null
I'm trying to setup a Vaadin 22 project using spring, spring-boot and hazelcast for session replication.
If I remove everything related to Hazelcast, the execution runs smoothly and I can login (through Keycloak) to my UI.
As soon as I add the dependencies for Hazelcast, this error is thrown. Actually, as long as I don't access the UI, Hazelcast correctly creates the cluster between two deployments of the microservice. Opening the UI triggers this:
2022-01-20 15:13:31.939 ERROR 19931 --- [ration.thread-0] c.h.map.impl.operation.EntryOperation : [192.168.1.55]:5701 [spring-cluster] [5.0.1] Failed to serialize 'org.springframework.session.MapSession'
com.hazelcast.nio.serialization.HazelcastSerializationException: Failed to serialize 'org.springframework.session.MapSession'
at com.hazelcast.internal.serialization.impl.SerializationUtil.handleSerializeException(SerializationUtil.java:129) ~[hazelcast-5.0.1.jar!/:5.0.1]
at com.hazelcast.internal.serialization.impl.AbstractSerializationService.toBytes(AbstractSerializationService.java:238) ~[hazelcast-5.0.1.jar!/:5.0.1]
at com.hazelcast.internal.serialization.impl.AbstractSerializationService.toBytes(AbstractSerializationService.java:214) ~[hazelcast-5.0.1.jar!/:5.0.1]
at com.hazelcast.internal.serialization.impl.AbstractSerializationService.toData(AbstractSerializationService.java:199) ~[hazelcast-5.0.1.jar!/:5.0.1]
at com.hazelcast.internal.serialization.impl.AbstractSerializationService.toData(AbstractSerializationService.java:154) ~[hazelcast-5.0.1.jar!/:5.0.1]
at com.hazelcast.map.impl.recordstore.StorageImpl.updateRecordValue(StorageImpl.java:90) ~[hazelcast-5.0.1.jar!/:5.0.1]
at com.hazelcast.map.impl.recordstore.StorageImpl.updateRecordValue(StorageImpl.java:44) ~[hazelcast-5.0.1.jar!/:5.0.1]
at com.hazelcast.map.impl.recordstore.DefaultRecordStore.updateRecord(DefaultRecordStore.java:952) ~[hazelcast-5.0.1.jar!/:5.0.1]
at com.hazelcast.map.impl.recordstore.DefaultRecordStore.putInternal(DefaultRecordStore.java:910) ~[hazelcast-5.0.1.jar!/:5.0.1]
at com.hazelcast.map.impl.recordstore.DefaultRecordStore.setWithUncountedAccess(DefaultRecordStore.java:1136) ~[hazelcast-5.0.1.jar!/:5.0.1]
at com.hazelcast.map.impl.operation.EntryOperator.onAddedOrUpdated(EntryOperator.java:268) ~[hazelcast-5.0.1.jar!/:5.0.1]
at com.hazelcast.map.impl.operation.EntryOperator.doPostOperateOps(EntryOperator.java:235) ~[hazelcast-5.0.1.jar!/:5.0.1]
at com.hazelcast.map.impl.operation.EntryOperation.call(EntryOperation.java:194) ~[hazelcast-5.0.1.jar!/:5.0.1]
at com.hazelcast.spi.impl.operationservice.impl.OperationRunnerImpl.call(OperationRunnerImpl.java:272) ~[hazelcast-5.0.1.jar!/:5.0.1]
at com.hazelcast.spi.impl.operationservice.impl.OperationRunnerImpl.run(OperationRunnerImpl.java:248) ~[hazelcast-5.0.1.jar!/:5.0.1]
at com.hazelcast.spi.impl.operationservice.impl.OperationRunnerImpl.run(OperationRunnerImpl.java:213) ~[hazelcast-5.0.1.jar!/:5.0.1]
at com.hazelcast.spi.impl.operationexecutor.impl.OperationThread.process(OperationThread.java:175) ~[hazelcast-5.0.1.jar!/:5.0.1]
at com.hazelcast.spi.impl.operationexecutor.impl.OperationThread.process(OperationThread.java:139) ~[hazelcast-5.0.1.jar!/:5.0.1]
at com.hazelcast.spi.impl.operationexecutor.impl.OperationThread.executeRun(OperationThread.java:123) ~[hazelcast-5.0.1.jar!/:5.0.1]
at com.hazelcast.internal.util.executor.HazelcastManagedThread.run(HazelcastManagedThread.java:102) ~[hazelcast-5.0.1.jar!/:5.0.1]
Caused by: com.hazelcast.nio.serialization.HazelcastSerializationException: Failed to serialize 'com.vaadin.flow.spring.SpringVaadinSession'
at com.hazelcast.internal.serialization.impl.SerializationUtil.handleSerializeException(SerializationUtil.java:129) ~[hazelcast-5.0.1.jar!/:5.0.1]
at com.hazelcast.internal.serialization.impl.AbstractSerializationService.writeObject(AbstractSerializationService.java:334) ~[hazelcast-5.0.1.jar!/:5.0.1]
at com.hazelcast.internal.serialization.impl.ByteArrayObjectDataOutput.writeObject(ByteArrayObjectDataOutput.java:402) ~[hazelcast-5.0.1.jar!/:5.0.1]
at org.springframework.session.hazelcast.HazelcastSessionSerializer.write(HazelcastSessionSerializer.java:99) ~[spring-session-hazelcast-2.6.1.jar!/:2.6.1]
at org.springframework.session.hazelcast.HazelcastSessionSerializer.write(HazelcastSessionSerializer.java:84) ~[spring-session-hazelcast-2.6.1.jar!/:2.6.1]
at com.hazelcast.internal.serialization.impl.StreamSerializerAdapter.write(StreamSerializerAdapter.java:39) ~[hazelcast-5.0.1.jar!/:5.0.1]
at com.hazelcast.internal.serialization.impl.AbstractSerializationService.toBytes(AbstractSerializationService.java:235) ~[hazelcast-5.0.1.jar!/:5.0.1]
... 18 common frames omitted
Caused by: java.lang.NullPointerException: Cannot invoke "com.vaadin.flow.server.VaadinService.getContext()" because the return value of "com.vaadin.flow.server.VaadinSession.getService()" is null
at com.vaadin.flow.server.VaadinSession.writeObject(VaadinSession.java:1070) ~[flow-server-9.0.2.jar!/:9.0.2]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[na:na]
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
at java.base/java.lang.reflect.Method.invoke(Method.java:568) ~[na:na]
at java.base/java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:1201) ~[na:na]
at java.base/java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1526) ~[na:na]
at java.base/java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1448) ~[na:na]
at java.base/java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1191) ~[na:na]
at java.base/java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:354) ~[na:na]
at com.hazelcast.internal.serialization.impl.defaultserializers.JavaDefaultSerializers$JavaSerializer.write(JavaDefaultSerializers.java:124) ~[hazelcast-5.0.1.jar!/:5.0.1]
at com.hazelcast.internal.serialization.impl.defaultserializers.JavaDefaultSerializers$JavaSerializer.write(JavaDefaultSerializers.java:117) ~[hazelcast-5.0.1.jar!/:5.0.1]
at com.hazelcast.internal.serialization.impl.StreamSerializerAdapter.write(StreamSerializerAdapter.java:39) ~[hazelcast-5.0.1.jar!/:5.0.1]
at com.hazelcast.internal.serialization.impl.AbstractSerializationService.writeObject(AbstractSerializationService.java:332) ~[hazelcast-5.0.1.jar!/:5.0.1]
... 23 common frames omitted
I think I understand what is happening, Hazelcast needs to serialize the vaadin session in order to replicate it, something breaks during the process (this null pointer on getService()
) and so the application crashes.
Every @Component
class is instantiated through @Autowired
, and all the @Entity
s implement the Serializable
interface, so I think i'm on the clear there.
As the stacktrace doesn't refer to my personal code once, I don't really know where to look to address this issue, and I hope you can help me.
What can trigger this NullPointerException? Why would VaadinService
be null?
I can share some code, but actually the application crashes before reaching any Vaadin Layout.
spring
spring-boot
vaadin
hazelcast
session-replication
0 Answers
Your Answer