Hazelcast и JCache: настраиваемые сериализаторы без использования XML

Вот что у меня есть:

  • Я использую Hazelcast v4.0.1
  • Я использую JCache v1.1.1
  • У меня есть несколько пользовательских Serializer, которые я хочу использовать.

Вот моя проблема:

  • Мои Serializer имеют зависимости конструкторов, поэтому их невозможно объявить через .xml.
  • JCache «автоматически» привязывается к Hazelcast при запуске с помощью .xml.
  • Настройка Config впоследствии (т. Е. Добавление Serializers в конфигурацию) не приводит к регистрации Serializers.

Решения, которые я ищу / которые я пробовал до сих пор:

  • Настройка зависимостей конструктора в .xml (невозможно, поскольку это конкретные объекты времени выполнения)
  • Предотвращение "автомагической" привязки из JCache, настройка HazelcastInstance вручную и каким-то образом привязать его к JCache (не знаю, как этого добиться, даже не знаю, возможно ли это)
  • Добавление Serializers к существующему _8 _ / _ 9_ (как было сказано ранее, похоже, не работает)

Вопрос (ы):

Есть ли способ заставить его работать? Я упустил что-то совершенно очевидное? Я неправильно использую фреймворки?


person Michel Michael Meyer    schedule 03.06.2020    source источник


Ответы (1)


Предполагая, что вы программно создаете свой Hazelcast Config с пользовательскими Serializers, вот один из способов запустить именованный встроенный элемент Hazelcast и ссылаться на него по имени:

    Config config = new Config();
    // apart from your config, setup the instance name
    config.setInstanceName("jcache-test");

    HazelcastInstance hz = Hazelcast.newHazelcastInstance(config);

    // request the server-side caching provider
    // same method to bind by instance name also applies to client-side caching provider
    CachingProvider cachingProvider = Caching.getCachingProvider(HazelcastCachingProvider.SERVER_CACHING_PROVIDER);

    // request the default CacheManager(url = null & ClassLoader = null)
    // indicating it should be bound to the named HazelcastInstance
    CacheManager cacheManager = cachingProvider.getCacheManager(null, null,
            HazelcastCachingProvider.propertiesByInstanceName("jcache-test"));

    // use the CacheManager as usual
    Cache<String, String> cache = cacheManager.createCache("cache", new MutableConfiguration<>());
    cache.put("1", "a");
    System.out.println(cache.get("1"));

Есть и другие способы привязки CacheManager к явно настроенному HazelcastInstance, вы можете посмотреть примеры в этот раздел справочного руководства.

В качестве примечания: в целом Hazelcast ожидает, что Config, с которого он был запущен, будет окончательным при запуске. Мутации объекта Config после запуска Hazelcast не учитываются, за исключением конкретной конфигурации структуры данных, которая может быть добавлена ​​после запуска, как описано здесь.

person Vassilis Bekiaris    schedule 03.06.2020