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