1 year ago

#75284

test-img

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 @Entitys 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

Accepted video resources