Hazelcast + Hibernate + Spring in Payara/Glassfish environment: Type id must be positive! Current: -202

不羁岁月 提交于 2019-12-12 22:15:39

问题


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>

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.


回答1:


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

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);

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).



来源:https://stackoverflow.com/questions/32637634/hazelcast-hibernate-spring-in-payara-glassfish-environment-type-id-must-be

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!