首页 > 解决方案 > 使用 MapStore 的 HazelCast 和 DB2 集成

问题描述

我正在尝试通过执行存储过程,使用 MapStore(和 MapLoader)将数据从 DB2 加载到 HazelCast。我能够从 DB2 中检索数据,但是当它尝试将数据加载到 HazelCast 时,我收到以下异常

java.util.concurrent.ExecutionException: java.util.concurrent.ExecutionException: java.lang.IllegalStateException: MapLoader 加载的项目属于 com.hazelcast.util.executor.CompletableFutureTask.run(CompletableFutureTask.java:69) 的不同分区at com.hazelcast.util.executor.CachedExecutorServiceDelegate$Worker.run(CachedExecutorServiceDelegate.java:227) at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source ) 在 java.lang.Thread.run(Unknown Source) 在 com.hazelcast.util.executor.HazelcastManagedThread.executeRun(HazelcastManagedThread.java:64) 在 com.hazelcast.util.executor.HazelcastManagedThread.run(HazelcastManagedThread.java:80 ) 引起:java.util.concurrent.ExecutionException: java.lang。IllegalStateException:MapLoader 加载的项目属于 com.hazelcast.spi.impl.operationservice.impl.InvocationFuture.resolveAndThrowIfException(InvocationFuture.java:92) 的不同分区在 com.hazelcast.spi.impl.AbstractInvocationFuture.get(AbstractInvocationFuture.java :162) com.hazelcast.map.impl.recordstore.BasicRecordStoreLoader.loadValuesInternal(BasicRecordStoreLoader.java:141) com.hazelcast.map.impl.recordstore.BasicRecordStoreLoader.access$100(BasicRecordStoreLoader.java:52) com.hazelcast .map.impl.recordstore.BasicRecordStoreLoader$GivenKeysLoaderTask.call(BasicRecordStoreLoader.java:109) at com.hazelcast.util.executor.CompletableFutureTask.run(CompletableFutureTask.java:67) ... 6 更多原因:java.lang。非法状态异常:MapLoader 加载的项目属于 com.hazelcast.map.impl.recordstore.DefaultRecordStore.isKeyAndValueLoadable(DefaultRecordStore.java:1031) 的不同分区,位于 com.hazelcast.map.impl.recordstore.DefaultRecordStore.putFromLoadInternal(DefaultRecordStore.java:987) ) 在 com.hazelcast.map.impl.operation.PutFromLoadAllOperation.run(PutFromLoadAllOperation.java:74) 在 com.hazelcast.spi 的 com.hazelcast.map.impl.recordstore.DefaultRecordStore.putFromLoad(DefaultRecordStore.java:978)。 Operation.call(Operation.java:148) 在 com.hazelcast.spi.impl.operationservice.impl.OperationRunnerImpl.call(OperationRunnerImpl.java:202) 在 com.hazelcast.spi.impl.operationservice.impl.OperationRunnerImpl.run( OperationRunnerImpl.java:191) 在 com.hazelcast.spi.impl.operationexecutor.impl.OperationThread。process(OperationThread.java:120) at com.hazelcast.spi.impl.operationexecutor.impl.OperationThread.run(OperationThread.java:100) at ------ 从 ------ 提交。(未知来源) 在 com.hazelcast.spi.impl.operationservice.impl.InvocationFuture.resolve(InvocationFuture.java:127) 在 com.hazelcast.spi.impl.operationservice.impl.InvocationFuture.resolveAndThrowIfException(InvocationFuture.java:79) ...还有 11 个

如果有人通过执行“存储过程”将 HazelCast 和 DB2 与 MapStore 集成。

谢谢,拉姆

标签: hazelcasthazelcast-imap

解决方案


@katteriamma,问题是PutFromLoadAllOperation操作。方法的签名loadAllMap<K,V> loadAll(Collection<K> keys).

在您的情况下发生的是您的loadAll方法返回不属于调用方分区的额外键值对。您需要确保只返回 的键值映射Collection<K> keys,仅此而已。loadAll无论如何都会为每个分区调用方法。所以你需要确保你的存储过程只返回给定键的数据,或者你需要过滤额外的键值对。


推荐阅读