Hazelcast + Hibernate + Spring在Payara / Glassfish环境中:类型ID必须是正数!目前:-202 [英] Hazelcast + Hibernate + Spring in Payara/Glassfish environment: Type id must be positive! Current: -202

查看:120
本文介绍了Hazelcast + Hibernate + Spring在Payara / Glassfish环境中:类型ID必须是正数!目前:-202的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想使用Hazelcast作为二级缓存提供程序。当我在Spring上启动本地应用程序时,它工作正常。但是当我创建一个EAR在Payara(Glassfish)上部署和运行时,我得到错误

I want to use Hazelcast as 2nd Level Cache Provider. When I start my application local as Spring it works fine. But when I create an EAR to deploy and run on Payara (Glassfish), I get the error


   Caused by: java.lang.IllegalArgumentException: Type id must be positive! Current: -203, Serializer:   
    com.hazelcast.hibernate.serialization.Hibernate42CacheEntrySerializer@7f08093f
    at com.hazelcast.nio.serialization.SerializationServiceImpl.register(SerializationServiceImpl.java:416)
    at com.hazelcast.nio.serialization.DefaultSerializationServiceBuilder.registerSerializerHooks(DefaultSerializationServiceBuilder.java:245)
    at com.hazelcast.nio.serialization.DefaultSerializationServiceBuilder.build(DefaultSerializationServiceBuilder.java:196)
    at com.hazelcast.instance.DefaultNodeExtension.createSerializationService(DefaultNodeExtension.java:113)
    at com.hazelcast.instance.Node.(Node.java:160)
    at com.hazelcast.instance.HazelcastInstanceImpl.(HazelcastInstanceImpl.java:120)
    at com.hazelcast.instance.HazelcastInstanceFactory.constructHazelcastInstance(HazelcastInstanceFactory.java:152)
    at com.hazelcast.instance.HazelcastInstanceFactory.newHazelcastInstance(HazelcastInstanceFactory.java:135)
    at com.hazelcast.instance.HazelcastInstanceFactory.newHazelcastInstance(HazelcastInstanceFactory.java:111)
    at com.hazelcast.core.Hazelcast.newHazelcastInstance(Hazelcast.java:58)
    at com.hazelcast.hibernate.instance.HazelcastInstanceLoader.createOrGetInstance(HazelcastInstanceLoader.java:91)
    at com.hazelcast.hibernate.instance.HazelcastInstanceLoader.loadInstance(HazelcastInstanceLoader.java:81)
    at com.hazelcast.hibernate.AbstractHazelcastCacheRegionFactory.start(AbstractHazelcastCacheRegionFactory.java:88)
    at org.hibernate.internal.CacheImpl.(CacheImpl.java:70)
    at org.hibernate.engine.spi.CacheInitiator.initiateService(CacheInitiator.java:40)
    at org.hibernate.engine.spi.CacheInitiator.initiateService(CacheInitiator.java:35)
    at org.hibernate.service.internal.SessionFactoryServiceRegistryImpl.initiateService(SessionFactoryServiceRegistryImpl.java:91)
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:251)

我添加了以下依赖项:

I added the following dependencies

    <dependency>
       <groupId>com.hazelcast</groupId>
       <artifactId>hazelcast</artifactId>
       <version>3.5</version>
  </dependency>

    <dependency>
       <groupId>javax.cache</groupId>
       <artifactId>cache-api</artifactId>
       <version>1.0.0</version>
    </dependency>

    <dependency>
       <groupId>com.hazelcast</groupId>
       <artifactId>hazelcast-hibernate4</artifactId>
       <version>3.5</version>
    </dependency>

这些属性添加到我的配置中

And these properties I added to my configuration

        <prop key="hibernate.cache.region.factory_class">com.hazelcast.hibernate.HazelcastLocalCacheRegionFactory</prop>
        <prop key="hibernate.cache.provider_configuration_file_resource_path">classpath:hazelcastServer.xml</prop>
        <prop key="hibernate.cache.hazelcast.use_native_client">false</prop>

有谁知道问题是什么以及如何解决?我认为它可以取决于具有集成Hazelcast实例的payara服务器。 intern函数被禁用。

Does anyone know what the problem is and how to solve? I think it can depend on the payara server which has an integrated Hazelcast instance. The intern function is disabled.

推荐答案

这是一个老话题,但如果有人遇到这个问题......

This is a bit old topic, but if anyone runs into this...

看来hazelcast对内部序列化器使用负面ID,对外部使用负面ID。
然而,isInternal注册检查确实如此:

It appears hazelcast uses negative IDs for internal serializers and positive ones for external. The isInternal registration check however does:

return type.getClassLoader() == classLoader && name.startsWith(HAZELCAST_BASE_PACKAGE);

因此,如果hazelcast-hibernate4在不同的类加载器中加载,而不是hazelcast内核(I如果我将hazelcast jar放在tomcat / lib中,并将hazelcast-hibernate4包含在我的应用程序中),则可以重现此操作。

So this exception will happen if the hazelcast-hibernate4 is loaded in different classloader than the hazelcast core (I can reproduce this if I put hazelcast jar in tomcat/lib and package hazelcast-hibernate4 within my application war).

这篇关于Hazelcast + Hibernate + Spring在Payara / Glassfish环境中:类型ID必须是正数!目前:-202的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆