首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Hazelcast - java.lang.IllegalArgumentException:键不能是数据类型

Hazelcast - java.lang.IllegalArgumentException:键不能是数据类型
EN

Stack Overflow用户
提问于 2018-06-12 22:11:05
回答 1查看 401关注 0票数 0

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

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

代码语言:javascript
复制
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)

我百分之百确定我们使用的"key“是一个字符串。代码片段如下所示:

代码语言:javascript
复制
 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();
     }

抛出错误的代码行是:

代码语言:javascript
复制
prefs = dataMap.get(key);

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

代码语言:javascript
复制
String key = getKey(blah, blah);

还有下面这句话:(

根据源代码,TransactionalMapProxySupport的方法"toNearCacheKeyWithStrategy“具有以下逻辑:

代码语言:javascript
复制
final Object toNearCacheKeyWithStrategy(Object key) {
    if (!nearCacheEnabled) {
        return key;
    }

    return serializeKeys ? ss.toData(key, partitionStrategy) : key;
}

然后,"DefaultNearCache“对象执行一个

代码语言:javascript
复制
private void checkKeyFormat(K key) {
    if (!serializeKeys) {
        checkNotInstanceOf(Data.class, key, "key cannot be of type Data!");
    }
}

因此,看起来"TransactionalMapProxySupport“的属性"serializeKeyes”肯定是假的,但“DefaultNearCache”中同名的属性一定是真的:(

git中"DefaultNearCache“的历史记录显示,代码在一年前被更改,并显示消息:"Changed serialize-keys for Near Cache from true to false”

有没有我应该设置的配置?

我对map的配置很简单:

代码语言:javascript
复制
<near-cache name="AppPrefsCache">
  <!-- Cache locally for 10 mins -->
  <max-idle-seconds>600</max-idle-seconds>
</near-cache>

阿!看起来我可以向这个xml添加一个(true|false)的“serialize-keys”标记并设置值。

似乎Hazelcast代码库的不同位为"serialize-keys“采用了不同的默认值。或者它应该是配置中的强制元素,或者默认值应该在所有地方都是相同的,对吗?

EN

回答 1

Stack Overflow用户

发布于 2018-06-27 17:21:48

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

受该错误影响的版本的解决方法是在near-cache配置中将serialize-keys设置为truefalse值在这里帮不上忙。

代码语言:javascript
复制
Config config = new Config();
config.getMapConfig(testName)
    .setNearCacheConfig(new NearCacheConfig().setSerializeKeys(true));

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50819286

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档