Migrating from 0.5.1 to 0.6.0

20 views
Skip to first unread message

Andrea Salvadore

unread,
May 13, 2014, 12:23:31 PM5/13/14
to events...@googlegroups.com
Hi all,
I've noticed that there are some changes in the Message case class that cause incompatibility between the version 0.5.1 and 0.6.0.
What is the recommended way of upgrading?

Thanks

Martin Krasser

unread,
May 14, 2014, 1:47:58 AM5/14/14
to events...@googlegroups.com
Hi Andrea,

what problems/errors do you see?

Cheers,
Martin
--
You received this message because you are subscribed to the Google Groups "Eventsourced User List" group.
To unsubscribe from this group and stop receiving emails from it, send an email to eventsourced...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

-- 
Martin Krasser

blog:    http://krasserm.blogspot.com
code:    http://github.com/krasserm
twitter: http://twitter.com/mrt1nz

Andrea Salvadore

unread,
May 14, 2014, 1:56:58 PM5/14/14
to events...@googlegroups.com, kras...@googlemail.com
Hi Martin,
I get some errors when trying to deserialize those messages. Here is the stacktrace. When googling I got some other people saying that there is some incompatibility between scala 2.10.0 and 2.10.3. 
I tried changing scala version and it didn't help.

Thanks for looking at this.

java.io.OptionalDataException
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1368)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:370)
at scala.collection.immutable.$colon$colon.readObject(List.scala:366)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:1004)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1891)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1796)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1348)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:370)
at scala.collection.immutable.$colon$colon.readObject(List.scala:366)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:1004)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1891)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1796)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1348)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:370)
at scala.collection.immutable.$colon$colon.readObject(List.scala:366)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:1004)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1891)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1796)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1348)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:370)
at scala.collection.immutable.$colon$colon.readObject(List.scala:366)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:1004)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1891)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1796)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1348)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:370)
at scala.collection.immutable.$colon$colon.readObject(List.scala:366)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:1004)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1891)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1796)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1348)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:370)
at scala.collection.immutable.$colon$colon.readObject(List.scala:366)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:1004)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1891)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1796)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1348)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:370)
at scala.collection.immutable.$colon$colon.readObject(List.scala:366)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:1004)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1891)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1796)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1348)
at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1989)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1913)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1796)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1348)
at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1989)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1913)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1796)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1348)
at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1989)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1913)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1796)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1348)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:370)
at akka.serialization.JavaSerializer$$anonfun$1.apply(Serializer.scala:136)
at scala.util.DynamicVariable.withValue(DynamicVariable.scala:57)
at akka.serialization.JavaSerializer.fromBinary(Serializer.scala:136)
at akka.serialization.Serialization$$anonfun$deserialize$1.apply(Serialization.scala:104)
at scala.util.Try$.apply(Try.scala:161)
at akka.serialization.Serialization.deserialize(Serialization.scala:98)
at org.eligosource.eventsourced.journal.common.serialization.MessageSerialization.message(MessageSerialization.scala:112)
at org.eligosource.eventsourced.journal.common.serialization.MessageSerialization.deserializeMessage(MessageSerialization.scala:80)
at org.eligosource.eventsourced.journal.mongodb.casbah.MongodbCasbahJournal.msgFromBytes(MongodbCasbahJournal.scala:39)
at org.eligosource.eventsourced.journal.mongodb.casbah.MongodbCasbahJournal.replay(MongodbCasbahJournal.scala:117)
at org.eligosource.eventsourced.journal.mongodb.casbah.MongodbCasbahJournal.org$eligosource$eventsourced$journal$mongodb$casbah$MongodbCasbahJournal$$replay(MongodbCasbahJournal.scala:102)
at org.eligosource.eventsourced.journal.mongodb.casbah.MongodbCasbahJournal$$anonfun$executeBatchReplayInMsgs$1.apply(MongodbCasbahJournal.scala:69)
at org.eligosource.eventsourced.journal.mongodb.casbah.MongodbCasbahJournal$$anonfun$executeBatchReplayInMsgs$1.apply(MongodbCasbahJournal.scala:69)
at scala.collection.immutable.List.foreach(List.scala:318)
at org.eligosource.eventsourced.journal.mongodb.casbah.MongodbCasbahJournal.executeBatchReplayInMsgs(MongodbCasbahJournal.scala:69)
at org.eligosource.eventsourced.journal.common.support.SynchronousWriteReplaySupport$$anonfun$receive$1.applyOrElse(SynchronousWriteReplaySupport.scala:64)
at akka.actor.ActorCell.receiveMessage(ActorCell.scala:498)
at akka.actor.ActorCell.invoke(ActorCell.scala:456)
at akka.dispatch.Mailbox.processMailbox(Mailbox.scala:237)
at akka.dispatch.Mailbox.run(Mailbox.scala:219)
at akka.dispatch.ForkJoinExecutorConfigurator$AkkaForkJoinTask.exec(AbstractDispatcher.scala:386)
at scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260)
at scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1339)
at scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979)
at scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107)

Martin Krasser

unread,
May 15, 2014, 1:14:29 AM5/15/14
to events...@googlegroups.com

On 14.05.14 19:56, Andrea Salvadore wrote:
Hi Martin,
I get some errors when trying to deserialize those messages. Here is the stacktrace.

Looking at the stackstrace, the problem is not related to (de)serialization of the Message class. Message is (de)serialized with an eventsourced-internal protobuf serializer that keeps 0.5.1 Messages readable in 0.6.0. This serializer delegates (de)serialization of the Message's event/payload to another Akka serializer. In your case, you probably didn't configure a custom serializer, so Akka's default Java serializer is used - which is perfectly ok, in general.

However, it seems that your serialized event/payload is a Scala List and a change to its readObject() method did break (de)serialization between Scala version 2.10.1 (used by eventsourced 0.5.1) and 2.10.2 (used by eventsourced 0.6.0). See also this thread which reports the same error independent of eventsourced.

I didn't dig into the deserialization issues of List further, but, as a general advice, use a custom serializer instead of the default Java serializer for your events to ensure backwards compatibility. Java serialization isn't a good idea for long-term storage of objects.

Cheers,
Martin

Andrea Salvadore

unread,
May 15, 2014, 3:48:39 AM5/15/14
to events...@googlegroups.com, kras...@googlemail.com
Hi Martin, thanks for your help.
I did actually read the other thread. I'm case classes for the payload and I just realized that one of them has a Seq in it which is likely to be of type List.
Totally agree with you about custom serializers, should have done that earlier! Now I need to find a way to get the data out and back in with the new format..

Thanks again. 
Reply all
Reply to author
Forward
0 new messages