2016-11-28 1 views
10

나는 사용자 정의 클래스의 일부 개체를 직렬화하기 위해 노력하고있어 나는 다음과 같은 예외가 있어요 :Kryo 충돌 EnvironmentFailureException

com.esotericsoftware.kryo.KryoException: com.sleepycat.je.EnvironmentFailureException: (JE 5.0.73) IdentityHashMap.entrySet() should not be used. See [#18167]. UNEXPECTED_STATE: Unexpected internal state, may have side effects. 
Serialization trace: 
highestFlushLevels (com.sleepycat.je.recovery.DirtyINMap) 
checkpointDirtyMap (com.sleepycat.je.recovery.Checkpointer) 
checkpointer (com.sleepycat.je.dbi.EnvironmentImpl) 
envImpl (com.sleepycat.je.dbi.MemoryBudget) 
budget (com.sleepycat.je.cleaner.DbFileSummaryMap) 
dbFileSummaries (com.sleepycat.je.dbi.DatabaseImpl) 
databaseImpl (com.sleepycat.je.Database) 
db (com.thinkaurelius.titan.diskstorage.berkeleyje.BerkeleyJEKeyValueStore) 
store (com.thinkaurelius.titan.diskstorage.keycolumnvalue.keyvalue.OrderedKeyValueStoreAdapter) 
store (com.thinkaurelius.titan.diskstorage.keycolumnvalue.cache.NoKCVSCache) 
edgeStore (com.thinkaurelius.titan.diskstorage.Backend) 
backend (com.thinkaurelius.titan.graphdb.database.StandardTitanGraph) 
graph (com.thinkaurelius.titan.graphdb.transaction.StandardTitanTx) 
tx (com.thinkaurelius.titan.graphdb.types.vertices.PropertyKeyVertex) 
key (com.thinkaurelius.titan.graphdb.relations.SimpleTitanProperty) 
properties (main.java.com.bag.util.storage.RelationshipStorage) 
    at com.esotericsoftware.kryo.serializers.ObjectField.write(ObjectField.java:101) 
    at com.esotericsoftware.kryo.serializers.FieldSerializer.write(FieldSerializer.java:505) 
    at com.esotericsoftware.kryo.Kryo.writeObject(Kryo.java:575) 
    at com.esotericsoftware.kryo.serializers.ObjectField.write(ObjectField.java:80) 
    at com.esotericsoftware.kryo.serializers.FieldSerializer.write(FieldSerializer.java:505) 
    at com.esotericsoftware.kryo.Kryo.writeObject(Kryo.java:575) 
    at com.esotericsoftware.kryo.serializers.ObjectField.write(ObjectField.java:80) 
    at com.esotericsoftware.kryo.serializers.FieldSerializer.write(FieldSerializer.java:505) 
    at com.esotericsoftware.kryo.Kryo.writeObject(Kryo.java:575) 
    at com.esotericsoftware.kryo.serializers.ObjectField.write(ObjectField.java:80) 
    at com.esotericsoftware.kryo.serializers.FieldSerializer.write(FieldSerializer.java:505) 
    at com.esotericsoftware.kryo.Kryo.writeObject(Kryo.java:575) 
    at com.esotericsoftware.kryo.serializers.ObjectField.write(ObjectField.java:80) 
    at com.esotericsoftware.kryo.serializers.FieldSerializer.write(FieldSerializer.java:505) 
    at com.esotericsoftware.kryo.Kryo.writeObject(Kryo.java:575) 
    at com.esotericsoftware.kryo.serializers.ObjectField.write(ObjectField.java:80) 
    at com.esotericsoftware.kryo.serializers.FieldSerializer.write(FieldSerializer.java:505) 
    at com.esotericsoftware.kryo.Kryo.writeObject(Kryo.java:575) 
    at com.esotericsoftware.kryo.serializers.ObjectField.write(ObjectField.java:80) 
    at com.esotericsoftware.kryo.serializers.FieldSerializer.write(FieldSerializer.java:505) 
    at com.esotericsoftware.kryo.Kryo.writeObject(Kryo.java:575) 
    at com.esotericsoftware.kryo.serializers.ObjectField.write(ObjectField.java:80) 
    at com.esotericsoftware.kryo.serializers.FieldSerializer.write(FieldSerializer.java:505) 
    at com.esotericsoftware.kryo.Kryo.writeObject(Kryo.java:575) 
    at com.esotericsoftware.kryo.serializers.ObjectField.write(ObjectField.java:80) 
    at com.esotericsoftware.kryo.serializers.FieldSerializer.write(FieldSerializer.java:505) 
    at com.esotericsoftware.kryo.Kryo.writeObject(Kryo.java:575) 
    at com.esotericsoftware.kryo.serializers.ObjectField.write(ObjectField.java:80) 
    at com.esotericsoftware.kryo.serializers.FieldSerializer.write(FieldSerializer.java:505) 
    at com.esotericsoftware.kryo.Kryo.writeObject(Kryo.java:575) 
    at com.esotericsoftware.kryo.serializers.ObjectField.write(ObjectField.java:80) 
    at com.esotericsoftware.kryo.serializers.FieldSerializer.write(FieldSerializer.java:505) 
    at com.esotericsoftware.kryo.Kryo.writeObject(Kryo.java:575) 
    at com.esotericsoftware.kryo.serializers.ObjectField.write(ObjectField.java:80) 
    at com.esotericsoftware.kryo.serializers.FieldSerializer.write(FieldSerializer.java:505) 
    at com.esotericsoftware.kryo.Kryo.writeObject(Kryo.java:575) 
    at com.esotericsoftware.kryo.serializers.ObjectField.write(ObjectField.java:80) 
    at com.esotericsoftware.kryo.serializers.FieldSerializer.write(FieldSerializer.java:505) 
    at com.esotericsoftware.kryo.Kryo.writeObject(Kryo.java:575) 
    at com.esotericsoftware.kryo.serializers.ObjectField.write(ObjectField.java:80) 
    at com.esotericsoftware.kryo.serializers.FieldSerializer.write(FieldSerializer.java:505) 
    at com.esotericsoftware.kryo.Kryo.writeObject(Kryo.java:575) 
    at com.esotericsoftware.kryo.serializers.ObjectField.write(ObjectField.java:80) 
    at com.esotericsoftware.kryo.serializers.FieldSerializer.write(FieldSerializer.java:505) 
    at com.esotericsoftware.kryo.Kryo.writeClassAndObject(Kryo.java:651) 
    at com.esotericsoftware.kryo.serializers.MapSerializer.write(MapSerializer.java:113) 
    at com.esotericsoftware.kryo.serializers.MapSerializer.write(MapSerializer.java:39) 
    at com.esotericsoftware.kryo.Kryo.writeObject(Kryo.java:575) 
    at com.esotericsoftware.kryo.serializers.ObjectField.write(ObjectField.java:80) 
    at com.esotericsoftware.kryo.serializers.FieldSerializer.write(FieldSerializer.java:505) 
    at com.esotericsoftware.kryo.Kryo.writeClassAndObject(Kryo.java:651) 
    at com.esotericsoftware.kryo.serializers.CollectionSerializer.write(CollectionSerializer.java:100) 
    at com.esotericsoftware.kryo.serializers.CollectionSerializer.write(CollectionSerializer.java:40) 
    at com.esotericsoftware.kryo.Kryo.writeClassAndObject(Kryo.java:651) 
    at main.java.com.bag.server.TestServer.handleRelationshipRead(TestServer.java:299) 
    at main.java.com.bag.server.TestServer.appExecuteUnordered(TestServer.java:219) 
    at bftsmart.tom.server.defaultservices.DefaultRecoverable.executeUnordered(DefaultRecoverable.java:417) 
    at bftsmart.tom.ServiceReplica.receiveReadonlyMessage(ServiceReplica.java:214) 
    at bftsmart.tom.core.DeliveryThread.deliverUnordered(DeliveryThread.java:289) 
    at bftsmart.tom.core.TOMLayer.requestReceived(TOMLayer.java:290) 
    at bftsmart.communication.client.netty.NettyClientServerCommunicationSystemServerSide.channelRead0(NettyClientServerCommunicationSystemServerSide.java:184) 
    at bftsmart.communication.client.netty.NettyClientServerCommunicationSystemServerSide.channelRead0(NettyClientServerCommunicationSystemServerSide.java:61) 
    at io.netty.channel.SimpleChannelInboundHandler.channelRead(SimpleChannelInboundHandler.java:105) 
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:292) 
    at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:278) 
    at io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:277) 
    at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:264) 
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:292) 
    at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:278) 
    at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:962) 
    at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:131) 
    at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:528) 
    at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:485) 
    at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:399) 
    at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:371) 
    at io.netty.util.concurrent.SingleThreadEventExecutor$2.run(SingleThreadEventExecutor.java:112) 
    at io.netty.util.concurrent.DefaultThreadFactory$DefaultRunnableDecorator.run(DefaultThreadFactory.java:137) 
    at java.lang.Thread.run(Thread.java:745) 
Caused by: com.sleepycat.je.EnvironmentFailureException: (JE 5.0.73) IdentityHashMap.entrySet() should not be used. See [#18167]. UNEXPECTED_STATE: Unexpected internal state, may have side effects. 
    at com.sleepycat.je.EnvironmentFailureException.unexpectedState(EnvironmentFailureException.java:376) 
    at com.sleepycat.je.utilint.IdentityHashMap.entrySet(IdentityHashMap.java:31) 
    at com.esotericsoftware.kryo.serializers.MapSerializer.write(MapSerializer.java:98) 
    at com.esotericsoftware.kryo.serializers.MapSerializer.write(MapSerializer.java:39) 
    at com.esotericsoftware.kryo.Kryo.writeObject(Kryo.java:575) 
    at com.esotericsoftware.kryo.serializers.ObjectField.write(ObjectField.java:80) 
    ... 77 more 

을 내가 가지고 ArrayList :

ArrayList<RelationshipStorage> relationshipStorage = new ArrayList<>(); 

스토리지가 직렬화 모든 내용 그것도 있습니다.

하지만 여전히이 오류가있어서 그 이유를 모르겠습니다. 속성 맵에는 하나의 키와 값만 있습니다. 키는 문자열이며 값은 긴 문자열 (전체 개체의 해시)입니다.

+0

최소, 완전하고 검증 가능한 예제 (http://stackoverflow.com/help/mcve)의 형태로 충돌이 발생한 곳에서 코드를 제공 할 수 있습니까? 그것은 정말로 도움이 될 것입니다. – entpnerd

+0

데이터베이스 중 하나가 고전 HashMap이 아닌 IdentityHashMap으로 객체를 채우고 있음을 알게되었습니다. 이것이 문제의 원인이되었습니다. – user2524707

답변

2

내 저장소 개체는 모든 종류의 맵을 허용하므로 데이터베이스 중 하나가 IdentityHashMap 인스턴스를 반환했음을 알지 못했습니다. 이것을 제거하고 보통의 사용을 시행 HashMap이 문제를 해결했습니다.

관련 문제