我们刚刚将我们的应用程序从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>
提到的行为确实是Hazelcast中的一个bug。我为它创建了一个新的GitHub问题,所以我们可以正确地处理它--Hazelcast/Hazelcast#13371。
受此错误影响的版本的解决办法是在near-cache
配置中将serialize-keys
设置为true
。false
值在这里没有帮助。
Config config = new Config();
config.getMapConfig(testName)
.setNearCacheConfig(new NearCacheConfig().setSerializeKeys(true));
谢谢你的报告和伟大的调查,彼得。
我正在使用和。它在这里 我有一个像这样的域名。而且,似乎不推荐使用注释,所以我使用了。 类如下所示 使用该类的如下所示 但当我启动应用程序时,我得到了错误 问题出在哪里?
我正在尝试运行一个非常简单的Spring Boot应用程序,但是我得到以下错误消息: 下面是我的主要应用程序类代码: 下面是Todo类: 我尝试将相应的包名添加到我的@ComponentScan注释中,并尝试将@Component注释添加到我的Todo类中,但都没有奏效。
StackTrace如下所示:
我正在尝试创建一个自定义注释。我有这样的注释: 我有一个方面的切入点: 但我得到了这个错误,我不明白为什么: org.springframework.security.config.annotation.configuration.objectPostProcessorConfiguration':bean初始化失败;嵌套异常为java.lang.IllegalArgumentException:
本文向大家介绍不能做switch()的参数类型是:相关面试题,主要包含被问及不能做switch()的参数类型是:时的应答技巧和注意事项,需要的朋友参考一下 switch 的参数不能为实型。
我正在尝试使用dart中的以下代码构建一个多芯片选择字段。 测试页面。飞奔 这是主要的。飞奔 但是,当我在multi-select中选择任何对象时,我会得到以下错误 ════════ 异常捕获手势 ═══════════════════════════════════════════ 处理手势时抛出以下_TypeError:键入列表 抛出异常时,这是堆栈#0 FormFieldState。didC