首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在JCache的客户服务器拓扑中使用Hazelcast?

如何在JCache的客户服务器拓扑中使用Hazelcast?
EN

Stack Overflow用户
提问于 2021-07-30 05:40:02
回答 1查看 150关注 0票数 0

我正在使用Jakarta 8、JCache API1.1.1和Hazelcast客户机4.2.1以及服务器(尝试了4.2.1和5.0-beta)。我为缓存管理器创建了提供程序:

代码语言:javascript
复制
@ApplicationScoped
public class MyCacheManager {

   private CacheManager manager;

   @Produces
   public CacheManager getCacheManager() {
       if (manager == null) {
           var provider = Caching.getCachingProvider();
           manager = provider.getCacheManager();
       }
       return manager;
   }

   public void close(@Disposes final CacheManager instance) {
       var provider = instance.getCachingProvider();
       provider.close();
   }
}

这样我就可以创建缓存:

代码语言:javascript
复制
@ApplicationScoped
public class SessionCacheBean extends CacheBean{
    @Inject
    private CacheManager manager;
    @Override
    protected Cache getCache() {
        if (manager.getCache("session-cache") == null) {
            var config = new MutableConfiguration<String, Object>();
            config.setTypes(String.class, Object.class);
            config.setStoreByValue(true);
            config.setExpiryPolicyFactory(TouchedExpiryPolicy.factoryOf(
                    new Duration(TimeUnit.MINUTES, 30)));
            return manager.createCache("session-cache", config);
        } else {
            return manager.getCache("session-cache");
        }
    }
}

如果应用程序配置为群集成员,则此代码将正确工作。但是现在它被配置为一个客户机:

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<hazelcast-client xmlns="http://www.hazelcast.com/schema/client-config"
                  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                  xsi:schemaLocation="http://www.hazelcast.com/schema/client-config
                  http://www.hazelcast.com/schema/client-config/hazelcast-client-config-5.0.xsd">
    <cluster-name>mimedia-session</cluster-name>
    <network>
        <aws enabled="true">
            <access-key>*****</access-key>
            <secret-key>*****</secret-key>
            <region>****</region>
            <tag-key>****</tag-key>
            <tag-value>****</tag-value>
            <use-public-ip>true</use-public-ip>
        </aws>
    </network>
</hazelcast-client>

服务器以命令sudo hz start -c /usr/share/hazelcast4/bin/hazelcast.xml -j /lib/cache-api-1.1.1.jar启动,具有相同的hazelcast.xml:

代码语言:javascript
复制
<hazelcast xmlns="http://www.hazelcast.com/schema/config"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://www.hazelcast.com/schema/config
           http://www.hazelcast.com/schema/config/hazelcast-config-4.2.xsd">

    <cluster-name>mimedia-session</cluster-name>

    <network>
        <port auto-increment="true" port-count="100">5701</port>
        <join>
            <auto-detection enabled="true"/>
            <multicast enabled="false"/>
            <aws enabled="true">
                <tag-key>****</tag-key>
                <tag-value>****</tag-value>
            </aws>
        </join>
    </network>
    <cache name="session-cache">
        <key-type class-name="java.lang.String"/>
        <value-type class-name="java.lang.Object"/>
        <management-enabled>true</management-enabled>
        <expiry-policy-factory>
            <timed-expiry-policy-factory expiry-policy-type="TOUCHED"
                                                    duration-amount="30"
                                                    time-unit="MINUTES"/>
        </expiry-policy-factory>
    </cache>
</hazelcast>

现在,应用程序返回if (manager.getCache("session-cache") == null)行的错误

代码语言:javascript
复制
"java.io.InvalidClassException: javax.cache.configuration.FactoryBuilder$SingletonFactory; local class incompatible: stream classdesc serialVersionUID = 201305101634, local class serialVersionUID = 201402"

当我在服务器配置应用程序中删除<cache name="session-cache">时,在return manager.createCache("session-cache", config);行返回错误

代码语言:javascript
复制
"java.io.InvalidClassException: javax.cache.configuration.FactoryBuilder$SingletonFactory; local class incompatible: stream classdesc serialVersionUID = 201402, local class serialVersionUID = 201305101634"

我需要在哪里修复类错配?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-08-02 04:19:39

我认为问题在于我正在使用TomEE。因为serialVersionUID = 201402位于geronimo-jcache_1.0_spec中,但我在项目中使用jsr107spec。一旦我找到了这个问题的解决方案,我将更新答案。

更新

解决办法:我为TomEE创建了'cache-server.war‘,它作为服务器工作

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68585952

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档