Как исправить Hazelcast, выбрасывая «java.lang.IllegalStateException: развертывание кода пользователя не включено» для EntryProcessor - PullRequest
0 голосов
/ 01 февраля 2019

Я пытаюсь настроить код для Hazelcast, используя EntryProcessor для нашего приложения.Чтобы проанализировать, почему код для EntryProcessor не работал в нашем приложении, я пытаюсь настроить аналогичный пример на моем локальном компьютере, чтобы воспроизвести проблему.Однако даже прежде, чем я смогу воспроизвести ту же проблему, я столкнулся с другой проблемой, которую следует воспроизвести следующим образом:

  1. Загрузите Hazelcast IMDG 3.10.6 со страницы здесь .и распакуйте его.
  2. Создайте новое приложение Java и добавьте код, указанный в разделе Клиент Java -> EntryProcessor главной страницы *1009*.
  3. Добавить hazelcast-3.10.6и jazelcast-client-3.10.6, присутствующие в папке lib в разархивированной папке hazelcast.
  4. Запустите элемент hazelcast (сервер) из файла start.bat, который находится в папке bin.
  5. Запустите JavaКод клиента, указанный на шаге 2.

Я также вставляю приведенный ниже код клиента 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();
    }
} 

Я ожидал, что код будет работать без каких-либо проблем, посколькуПример карты, приведенный для Java-клиента на сайте hazelcast , работает просто отлично.Кроме того, поскольку мы явно разрешаем развертывание пользовательского кода для ClientConfig, я не понимаю, почему мы получаем эту проблему.

1 Ответ

0 голосов
/ 01 февраля 2019

Вам необходимо включить Развертывание кода пользователя и на стороне участника.

...