[java] сереализация, разные JVM
Может кто-нибудь дать пояснения, почему может фейлиться десереализация между двумя машинами с одним и тем же кодом, запущенном на разных JVM? Я почему-то думал, что формат сериализации это стандарт и от реализации не зависит =/. (например между HotSpot1.6.43 и HotSpot1.6.45)эксепшен, код, например?
ага, именно эксэпшн, объекты нормально пересылаются.
А на исходной машине то оно точно десериализуется?
А serialVersionUID в классе есть? И да, обе JVM одного вендора?
да, одного. serialVersionUID не указаны
если разные - то падает на десериализации именно ошибки.
библиотека чужая, клиентская часть с открытыми исходниками, серверная - бинарник.
Вообще, крайне рекомендуется явно указывать serialVersionUID в сериализуемых объектах, так как иначе он генерируется автоматически и на его значение потенциально может даже влиять порядок методов в классе, не говоря уже о версии компилятора.
Вообще, крайне рекомендуется явно указывать serialVersionUID в сериализуемых объектах, так как иначе он генерируется автоматически и на его значение потенциально может даже влиять порядок методов в классе, не говоря уже о версии компилятора.Ошибка в используемой библиотеке, не в моих исходниках.
Подозреваю, что это был не вопрос, а просьба скопировать эксепшен и пример кодая запускаю на никсовой машине(JVM 1.6.43) elasticsearch (хз чем он там сбилден).
Если томкат, который к ней коннектится на той же машине (и на той же JVM), то всё ок работает.
Если я запускаю томкат на своей виндовой машине с такой же JVM, то тоже всё ок.
Если на своей машине запускаю томкат на 1.6.45, то возникает ошибка что-то вроде:
org.elasticsearch.transport.TransportSerializationException: Failed to deserialize exception response from stream
at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:115)
at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:87)
at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:248)
... 45 more
Caused by: org.elasticsearch.transport.TransportSerializationException: Failed to deserialize exception response from stream
at org.elasticsearch.transport.netty.MessageChannelHandler.handlerResponseError(MessageChannelHandler.java:277)
at org.elasticsearch.transport.netty.MessageChannelHandler.process(MessageChannelHandler.java:231)
at org.elasticsearch.transport.netty.MessageChannelHandler.callDecode(MessageChannelHandler.java:141)
at org.elasticsearch.transport.netty.MessageChannelHandler.messageReceived(MessageChannelHandler.java:93)
at org.elasticsearch.common.netty.channel.SimpleChannelUpstreamHandler.handleUpstream(SimpleChannelUpstreamHandler.java:75)
at org.elasticsearch.common.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:564)
at org.elasticsearch.common.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:559)
at org.elasticsearch.common.netty.channel.Channels.fireMessageReceived(Channels.java:268)
at org.elasticsearch.common.netty.channel.Channels.fireMessageReceived(Channels.java:255)
at org.elasticsearch.common.netty.channel.socket.nio.NioWorker.read(NioWorker.java:94)
at org.elasticsearch.common.netty.channel.socket.nio.AbstractNioWorker.processSelectedKeys(AbstractNioWorker.java:364)
at org.elasticsearch.common.netty.channel.socket.nio.AbstractNioWorker.run(AbstractNioWorker.java:238)
at org.elasticsearch.common.netty.channel.socket.nio.NioWorker.run(NioWorker.java:38)
at org.elasticsearch.common.netty.util.internal.DeadLockProofWorker$1.run(DeadLockProofWorker.java:42)
При этом на чём сбилден war абсолютно пофиг.
З.Ы. версия сервера elasticsearch и клиентской библиотеки одна и та же.
Сереализация — это когда всем в обязательном порядке выдают на завтрак кашу?
Оставить комментарий
kill-still
Может кто-нибудь дать пояснения, почему может фейлиться десереализация между двумя машинами с одним и тем же кодом, запущенном на разных JVM? Я почему-то думал, что формат сериализации это стандарт и от реализации не зависит =/. (например между HotSpot1.6.43 и HotSpot1.6.45)