How to fix Hazelcast from throwing #39;java.lang.IllegalStateException: User Code Deployment is not enabled#39; for EntryProcessor(如何修复因引发java.lang.IlLegalStateException而引发的Hazelcast:未为EntryProcessor启用用户代码部署)
问题描述
我正在尝试使用EntryProcessor为我们的应用程序设置一个用于Hazelcast的代码。为了分析为什么EntryProcessor的代码在我们的应用程序中不起作用,我尝试在我的本地计算机上设置一个类似的示例来重现该问题。然而,即使在我可以复制相同的问题之前,我还面临着另一个问题,该问题应该如下所示:
- 从here下载Hazelcast IMDG 3.10.6。然后将其解压缩。
- 新建Java应用程序并添加main page的Java客户端-->EntryProcessor下给出的代码。
- 将Hazelcast-3.10.6和Hazelcast-Client-3.10.6 Jars添加到解压缩的Hazelcast文件夹的lib文件夹下。
- 从bin文件夹下的start.bat文件启动Hazelcast成员(服务器)。
- 运行步骤2中给出的Java客户端代码。
我还粘贴了下面的Java客户端代码以供参考。
package client;
import com.hazelcast.client.HazelcastClient;
import com.hazelcast.client.config.ClientConfig;
import com.hazelcast.client.config.ClientUserCodeDeploymentConfig;
import com.hazelcast.core.HazelcastInstance;
import com.hazelcast.core.IMap;
import com.hazelcast.map.AbstractEntryProcessor;
import java.io.Serializable;
import java.util.Map;
public class EntryProcessorSample {
public static class IncEntryProcessor extends AbstractEntryProcessor<String, Integer> implements Serializable {
@Override
public Object process(Map.Entry<String, Integer> entry) {
// Get the value passed
int oldValue = entry.getValue();
// Update the value
int newValue = oldValue + 1;
// Update the value back to the entry stored in the Hazelcast Member this EntryProcessor is running on.
entry.setValue(newValue);
// No need to return anything back to the caller, we can return whatever we like here.
return null;
}
}
public static void main(String[] args) {
// Enable Code Deployment from this Client classpath to the Cluster Members classpath
// User Code Deployment needs to be enabled on the Cluster Members as well.
ClientConfig config = new ClientConfig();
ClientUserCodeDeploymentConfig userCodeDeploymentConfig = config.getUserCodeDeploymentConfig();
userCodeDeploymentConfig.setEnabled(true);
userCodeDeploymentConfig.addClass(EntryProcessorSample.IncEntryProcessor.class);
// Start the Hazelcast Client and connect to an already running Hazelcast Cluster on 127.0.0.1
HazelcastInstance hz = HazelcastClient.newHazelcastClient(config);
// Get the Distributed Map from Cluster.
IMap<String, Integer> map = hz.getMap("my-distributed-map");
// Put the integer value of 0 into the Distributed Map
map.put("key", 0);
// Run the IncEntryProcessor class on the Hazelcast Cluster Member holding the key called "key"
map.executeOnKey("key", new IncEntryProcessor());
// Show that the IncEntryProcessor updated the value.
System.out.println("new value:" + map.get("key"));
// Shutdown this Hazelcast Client
hz.shutdown();
}
}
我希望代码运行时没有任何问题,因为hazelcast site中给出的Java客户端的Map示例运行得很好。另外,由于我们显式启用了客户端配置的用户代码部署,我不明白为什么会出现此问题。
推荐答案
您也需要在成员端开启User Code Deployment。
这篇关于如何修复因引发java.lang.IlLegalStateException而引发的Hazelcast:未为EntryProcessor启用用户代码部署的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:如何修复因引发java.lang.IlLegalStateException而引发的Hazelcast:未为EntryProcessor启用用户代码部署
基础教程推荐
- 在螺旋中写一个字符串 2022-01-01
- 如何使用 Stream 在集合中拆分奇数和偶数以及两者的总和 2022-01-01
- 如何使用 Eclipse 检查调试符号状态? 2022-01-01
- 由于对所需库 rt.jar 的限制,对类的访问限制? 2022-01-01
- 如何在不安装整个 WTP 包的情况下将 Tomcat 8 添加到 Eclipse Kepler 2022-01-01
- 首次使用 Hadoop,MapReduce Job 不运行 Reduce Phase 2022-01-01
- 如何强制对超级方法进行多态调用? 2022-01-01
- 如何对 HashSet 进行排序? 2022-01-01
- Spring Boot Freemarker从2.2.0升级失败 2022-01-01
- Java 中保存最后 N 个元素的大小受限队列 2022-01-01