Hazelcast和JCache:自定义序列化器,不使用XML

问题描述 投票:0回答:1

这是我所拥有的:

  • 我正在使用Hazelcast v4.0.1
  • 我正在使用JCache v1.1.1
  • 我有几个要使用的自定义Serializer

这是我的问题:

  • 我的Serializer具有构造函数依赖项,因此无法通过.xml声明它们。
  • JCache在启动时使用.xml将其自身自动绑定到Hazelcast。
  • [配置Config 之后(即,将Serializer添加到配置中])不会导致Serializer被注册。

我正在寻找/到目前为止已经尝试过的解决方案:

  • 将构造函数依赖项配置为.xml(无法完成,因为它们是特定的运行时对象)
  • 防止通过JCache进行“自动”绑定,手动设置HazelcastInstance并以某种方式将其绑定到JCache(不知道该如何实现,甚至不知道是否可行)
  • Serializer添加到现有的HazelcastInstance / Config(如前所述,似乎不起作用)

问题:

有什么方法可以使其正常工作?我是否缺少一些显而易见的东西?我使用的框架错误吗?

java caching hazelcast jcache
1个回答
0
投票

假设您以编程方式使用自定义Config构建Hazelcast Serializer,这是一种启动命名的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,您可以查看this reference manual section中的示例。

作为旁注,通常,Hazelcast期望启动时所用的Config是最终的。 Hazelcast启动后,不考虑对Config对象的更改,除了可以在启动后添加的特定数据结构配置外,如here所述。

© www.soinside.com 2019 - 2024. All rights reserved.