首页 > 解决方案 > Hazelcast Spring Session SubZero(Kryo) EntryBackupProcessorImpl NullPointerException 问题

问题描述

我正在使用hazelcast-3.11.2SubZero-0.9作为全局序列化程序。我正在尝试使用此示例配置 Spring Session 。当集群中有多个节点时 - 尝试获取会话 ID 时出现下一个异常:

2019-03-20 15:01:59.088 错误 13635 --- [ration.thread-3] chmioperation.EntryBackupOperation : [xxxx]:5701 [hazelcast-group] [3.11.2] null

java.lang.NullPointerException:在 com.hazelcast.map.impl.operation.EntryOperator.process(EntryOperator.java:314) 在 com.hazelcast.map.AbstractEntryProcessor$EntryBackupProcessorImpl.processBackup(AbstractEntryProcessor.java:83) 处为空。 hazelcast.map.impl.operation.EntryOperator.operateOnKeyValueInternal(EntryOperator.java:181) 在 com.hazelcast.map.impl.operation.EntryOperator.operateOnKey(EntryOperator.java:166) 在 com.hazelcast.map.impl.operation。 EntryBackupOperation.run(EntryBackupOperation.java:60) 在 com.hazelcast.spi.impl.operationservice.impl.operations.Backup.run(Backup.java:158) 在 com.hazelcast.spi.Operation.call(Operation.java: 170) 在 com.hazelcast.spi.impl.operationservice.impl.OperationRunnerImpl.call(OperationRunnerImpl.java:208) 在 com.hazelcast.spi.impl.operationservice.impl。OperationRunnerImpl.run(OperationRunnerImpl.java:197) at com.hazelcast.spi.impl.operationservice.impl.OperationRunnerImpl.run(OperationRunnerImpl.java:413) at com.hazelcast.spi.impl.operationexecutor.impl.OperationThread.process( OperationThread.java:153) 在 com.hazelcast.spi.impl.operationexecutor.impl.OperationThread.process(OperationThread.java:123) 在 com.hazelcast.spi.impl.operationexecutor.impl.OperationThread.run(OperationThread.java: 110)hazelcast.spi.impl.operationexecutor.impl.OperationThread.run(OperationThread.java:110)hazelcast.spi.impl.operationexecutor.impl.OperationThread.run(OperationThread.java:110)

我的实例配置如下所示:

@Configuration
@EnableHazelcastHttpSession
public class HazelcastSessionConfig extends AbstractHttpSessionApplicationInitializer {

    @Bean
    public HazelcastInstance hazelcastInstance() {
        Config config = new Config();
        SubZero.useAsGlobalSerializer(config);
        MapAttributeConfig attributeConfig = new MapAttributeConfig()
                .setName(HazelcastSessionRepository.PRINCIPAL_NAME_ATTRIBUTE)
                .setExtractor(PrincipalNameExtractor.class.getName());


        config.getMapConfig(HazelcastSessionRepository.DEFAULT_SESSION_MAP_NAME)
                .addMapAttributeConfig(attributeConfig)
                .addMapIndexConfig(new MapIndexConfig(
                        HazelcastSessionRepository.PRINCIPAL_NAME_ATTRIBUTE, false));
        return Hazelcast.newHazelcastInstance(config);
    }
}

从配置中删除 SubZero 会删除异常,因此看起来是 SubZero 问题。我也使用这个实例作为我的缓存提供程序并休眠二级缓存,所以我无法摆脱 SubZero。

我的想法是:

  1. 有两个不同的集群:一个用于缓存,另一个用于会话。不要为我工作,因为我不知道如何配置 Spring Session 以使用特定的 hazelcast 实例(传递实例名称或 bean 本身等)

  2. 指定哪些类应该与 SubZero 一起使用 - 但由于我有很多新类要添加 - 这不是最好的主意

将不胜感激任何帮助。

标签: hazelcastspring-sessionkryo

解决方案


推荐阅读