当前位置: 首页 > 知识库问答 >
问题:

HazelCast-java.lang.IllegalArgumentException:键的类型不能是Data

叶国兴
2023-03-14

我们刚刚将我们的应用程序从Hazelcast 3.8.0升级到了3.10.1。

我们收到一条错误消息:“键不能是数据类型!”在HazelCast中访问数据时。

java.lang.IllegalArgumentException: key cannot be of type Data!
at com.hazelcast.util.Preconditions.checkNotInstanceOf(Preconditions.java:300)
at com.hazelcast.internal.nearcache.impl.DefaultNearCache.checkKeyFormat(DefaultNearCache.java:226)
at com.hazelcast.internal.nearcache.impl.DefaultNearCache.get(DefaultNearCache.java:114)
at com.hazelcast.map.impl.tx.TransactionalMapProxySupport.getCachedValue(TransactionalMapProxySupport.java:183)
at com.hazelcast.map.impl.tx.TransactionalMapProxySupport.getInternal(TransactionalMapProxySupport.java:132)
at com.hazelcast.map.impl.tx.TransactionalMapProxy.get(TransactionalMapProxy.java:110)
at com.hazelcast.client.impl.protocol.task.transactionalmap.TransactionalMapGetMessageTask.innerCall(TransactionalMapGetMessageTask.java:43)
at com.hazelcast.client.impl.protocol.task.AbstractTransactionalMessageTask.call(AbstractTransactionalMessageTask.java:34)
at com.hazelcast.client.impl.protocol.task.AbstractCallableMessageTask.processMessage(AbstractCallableMessageTask.java:35)
at com.hazelcast.client.impl.protocol.task.AbstractMessageTask.initializeAndProcessMessage(AbstractMessageTask.java:130)
at com.hazelcast.client.impl.protocol.task.AbstractMessageTask.run(AbstractMessageTask.java:110)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
at com.hazelcast.util.executor.HazelcastManagedThread.executeRun(HazelcastManagedThread.java:64)
at com.hazelcast.util.executor.HazelcastManagedThread.run(HazelcastManagedThread.java:80)
at ------ submitted from ------.(Unknown Source)

我百分之百肯定我们使用的“键”是一个字符串。代码段如下所示:

 String key = getKey(blah, blah);

 TransactionContext context = client.newTransactionContext();
 context.beginTransaction();
 TransactionalMap<String, AppPrefs> dataMap = context.getMap(MAP_NAME);
 try {
        prefs = dataMap.get(key);
        context.commitTransaction();

     } catch (Throwable t) {
        LOGGER.error("Error getting AppPrefs.", t);
        context.rollbackTransaction();
     }

抛出错误的代码行是:

prefs = dataMap.get(key);

设置字符串的代码行之间没有任何内容

String key = getKey(blah, blah);

而击打的那条线:(

final Object toNearCacheKeyWithStrategy(Object key) {
    if (!nearCacheEnabled) {
        return key;
    }

    return serializeKeys ? ss.toData(key, partitionStrategy) : key;
}
private void checkKeyFormat(K key) {
    if (!serializeKeys) {
        checkNotInstanceOf(Data.class, key, "key cannot be of type Data!");
    }
}

因此,看起来“TransactionalMApproxySupport”的属性“SerializeKeyes”必须为FALSE,但“DefaultNearCache”中的同名属性必须为true:(

git中“defaultnearcache”的历史记录显示,该代码在一年前被更改,并带有消息:“changed serialize-keys default for Near Cache from true to false”

是否有我应该设置的配置?

映射的配置简单地说是:

<near-cache name="AppPrefsCache">
  <!-- Cache locally for 10 mins -->
  <max-idle-seconds>600</max-idle-seconds>
</near-cache>

共有1个答案

轩辕越泽
2023-03-14

提到的行为确实是Hazelcast中的一个bug。我为它创建了一个新的GitHub问题,所以我们可以正确地处理它--Hazelcast/Hazelcast#13371。

受此错误影响的版本的解决办法是在near-cache配置中将serialize-keys设置为truefalse值在这里没有帮助。

Config config = new Config();
config.getMapConfig(testName)
    .setNearCacheConfig(new NearCacheConfig().setSerializeKeys(true));

谢谢你的报告和伟大的调查,彼得。

 类似资料:
  • 我正在使用和。它在这里 我有一个像这样的域名。而且,似乎不推荐使用注释,所以我使用了。 类如下所示 使用该类的如下所示 但当我启动应用程序时,我得到了错误 问题出在哪里?

  • 我正在尝试运行一个非常简单的Spring Boot应用程序,但是我得到以下错误消息: 下面是我的主要应用程序类代码: 下面是Todo类: 我尝试将相应的包名添加到我的@ComponentScan注释中,并尝试将@Component注释添加到我的Todo类中,但都没有奏效。

  • 我正在尝试创建一个自定义注释。我有这样的注释: 我有一个方面的切入点: 但我得到了这个错误,我不明白为什么: org.springframework.security.config.annotation.configuration.objectPostProcessorConfiguration':bean初始化失败;嵌套异常为java.lang.IllegalArgumentException:

  • 本文向大家介绍不能做switch()的参数类型是:相关面试题,主要包含被问及不能做switch()的参数类型是:时的应答技巧和注意事项,需要的朋友参考一下 switch 的参数不能为实型。    

  • 我正在尝试使用dart中的以下代码构建一个多芯片选择字段。 测试页面。飞奔 这是主要的。飞奔 但是,当我在multi-select中选择任何对象时,我会得到以下错误 ════════ 异常捕获手势 ═══════════════════════════════════════════ 处理手势时抛出以下_TypeError:键入列表 抛出异常时,这是堆栈#0 FormFieldState。didC