Issues logging messages from Socko Websocket

120 views
Skip to first unread message

Tsume

unread,
Sep 24, 2013, 2:56:04 PM9/24/13
to events...@googlegroups.com
Hi,

I'm using Eventsourced to log websocket messages received from Socko. When I try and pass an Eventsourced Message containing a Socko WebSocketFrameEvent the following error gets thrown:

[info] [ERROR] [09/24/2013 20:35:04.124] [WebSocketExampleActorSystem-akka.actor.default-dispatcher-3] [akka://WebSocketExampleActorSystem/user/$a] org.jboss.netty.channel.socket.nio.NioAcceptedSocketChannel
[info] java.io.NotSerializableException: org.jboss.netty.channel.socket.nio.NioAcceptedSocketChannel
[info] at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1180)
[info] at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1528)
[info] at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1493)
[info] at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1416)
[info] at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1174)
[info] at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:346)
[info] at akka.serialization.JavaSerializer$$anonfun$toBinary$1.apply$mcV$sp(Serializer.scala:129)
[info] at akka.serialization.JavaSerializer$$anonfun$toBinary$1.apply(Serializer.scala:129)
[info] at akka.serialization.JavaSerializer$$anonfun$toBinary$1.apply(Serializer.scala:129)
[info] at scala.util.DynamicVariable.withValue(DynamicVariable.scala:57)
[info] at akka.serialization.JavaSerializer.toBinary(Serializer.scala:129)
[info] at org.eligosource.eventsourced.journal.common.serialization.MessageSerialization.messageProtocolBuilder(MessageSerialization.scala:86)
[info] at org.eligosource.eventsourced.journal.common.serialization.MessageSerialization.serializeMessage(MessageSerialization.scala:71)
[info] at org.eligosource.eventsourced.journal.leveldb.LeveldbJournalPS.msgToBytes(LeveldbJournalPS.scala:51)
[info] at org.eligosource.eventsourced.journal.leveldb.LeveldbJournalPS$$anonfun$executeWriteInMsg$1.apply(LeveldbJournalPS.scala:57)
[info] at org.eligosource.eventsourced.journal.leveldb.LeveldbJournalPS$$anonfun$executeWriteInMsg$1.apply(LeveldbJournalPS.scala:54)
[info] at org.eligosource.eventsourced.journal.leveldb.LeveldbJournalPS.withBatch(LeveldbJournalPS.scala:152)
[info] at org.eligosource.eventsourced.journal.leveldb.LeveldbJournalPS.executeWriteInMsg(LeveldbJournalPS.scala:54)
[info] at org.eligosource.eventsourced.journal.common.support.SynchronousWriteReplaySupport$$anonfun$receive$1.applyOrElse(SynchronousWriteReplaySupport.scala:39)
[info] at akka.actor.ActorCell.receiveMessage(ActorCell.scala:498)
[info] at akka.actor.ActorCell.invoke(ActorCell.scala:456)
[info] at akka.dispatch.Mailbox.processMailbox(Mailbox.scala:237)
[info] at akka.dispatch.Mailbox.run(Mailbox.scala:219)
[info] at akka.dispatch.ForkJoinExecutorConfigurator$AkkaForkJoinTask.exec(AbstractDispatcher.scala:386)
[info] at scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:262)
[info] at scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:975)
[info] at scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1478)
[info] at scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:104)
[info] 
[info] 20:35:23.804 [New I/O worker #1] DEBUG o.m.socko.webserver.RequestHandler - WS EndPoint(GET,127.0.0.1:8888,/websocket?) CHANNEL=-746091765 

From what I can tell seems to be an interference with Socko's Netty IO interface, I'll ask on the Socko forum as well what could lead to this. I attached the files which I used to run the example which created the error.

build.sbt
WebSocketApp.scala
WebSocketHandler.scala

Volker Stampa

unread,
Sep 25, 2013, 2:07:43 AM9/25/13
to events...@googlegroups.com
Hi Tsume,

I did not try things out, but from what I read from the source code and the exception, I would guess that the WebSocketFrameEvent that you wrap in a Message has a reference to a org.jboss.netty.channel.socket.nio.NioAcceptedSocketChannel which in turn is not serializable. By default eventsourced (i.e. akka) is using standard java-serialization, so all "events" (and the objects they reference) wrapped in a Message need to implement Serializable. However you can configure your custom serializers: https://github.com/eligosource/eventsourced#serialization

Hope this helps
Volker


--
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/groups/opt_out.

Tsume

unread,
Sep 25, 2013, 5:31:58 PM9/25/13
to events...@googlegroups.com
Hi Volker,

It seems you might be onto something. I added the following in my configuration file but my application still crashed

  serializers {
        java = "akka.serialization.JavaSerializer"
        
      }
 
      serialization-bindings {
        "org.mashupbots.socko.events.WebSocketFrameEvent" = java
        "org.jboss.netty.channel.socket.nio.NioAcceptedSocketChannel" = java
      }


I then tried  to programmatically serialize the WebSocketFrameEvent. Through process of elimination I found that the my application that error occurs when I try to the WebSocketFrameEvent into bytes: val bytes = serializer.toBinary(wsFrame)
 
The error seems to be the same as before.

[info] 23:30:41.272 [New I/O worker #1] ERROR o.m.socko.webserver.RequestHandler - Exception caught in HttpRequestHandler
[info] java.io.NotSerializableException: org.jboss.netty.channel.socket.nio.NioAcceptedSocketChannel
[info] at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1180) ~[na:1.7.0_10]
[info] at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1528) ~[na:1.7.0_10]
[info] at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1493) ~[na:1.7.0_10]
[info] at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1416) ~[na:1.7.0_10]
[info] at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1174) ~[na:1.7.0_10]
[info] at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:346) ~[na:1.7.0_10]
[info] at akka.serialization.JavaSerializer$$anonfun$toBinary$1.apply$mcV$sp(Serializer.scala:129) ~[akka-actor_2.10-2.2.0.jar:2.2.0]
[info] at akka.serialization.JavaSerializer$$anonfun$toBinary$1.apply(Serializer.scala:129) ~[akka-actor_2.10-2.2.0.jar:2.2.0]
[info] at akka.serialization.JavaSerializer$$anonfun$toBinary$1.apply(Serializer.scala:129) ~[akka-actor_2.10-2.2.0.jar:2.2.0]
[info] at scala.util.DynamicVariable.withValue(DynamicVariable.scala:57) ~[na:na]
[info] at akka.serialization.JavaSerializer.toBinary(Serializer.scala:129) ~[akka-actor_2.10-2.2.0.jar:2.2.0]
[info] at WebSocketApp$$anonfun$1.applyOrElse(WebSocketApp.scala:55) ~[classes/:na]
[info] at WebSocketApp$$anonfun$1.applyOrElse(WebSocketApp.scala:37) ~[classes/:na]
[info] at scala.runtime.AbstractPartialFunction$mcVL$sp.apply$mcVL$sp(AbstractPartialFunction.scala:33) ~[na:na]
[info] at scala.runtime.AbstractPartialFunction$mcVL$sp.apply(AbstractPartialFunction.scala:33) ~[na:na]
[info] at scala.runtime.AbstractPartialFunction$mcVL$sp.apply(AbstractPartialFunction.scala:25) ~[na:na]
[info] at org.mashupbots.socko.webserver.RequestHandler.messageReceived(RequestHandler.scala:137) ~[socko-webserver_2.10-0.3.0.jar:0.3.0]
[info] at org.jboss.netty.handler.stream.ChunkedWriteHandler.handleUpstream(ChunkedWriteHandler.java:142) ~[netty-3.6.5.Final.jar:na]
[info] at org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:296) ~[netty-3.6.5.Final.jar:na]
[info] at org.jboss.netty.handler.codec.frame.FrameDecoder.unfoldAndFireMessageReceived(FrameDecoder.java:462) ~[netty-3.6.5.Final.jar:na]
[info] at org.jboss.netty.handler.codec.replay.ReplayingDecoder.callDecode(ReplayingDecoder.java:536) ~[netty-3.6.5.Final.jar:na]
[info] at org.jboss.netty.handler.codec.replay.ReplayingDecoder.messageReceived(ReplayingDecoder.java:435) ~[netty-3.6.5.Final.jar:na]
[info] at org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:268) ~[netty-3.6.5.Final.jar:na]
[info] at org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:255) ~[netty-3.6.5.Final.jar:na]
[info] at org.jboss.netty.channel.socket.nio.NioWorker.read(NioWorker.java:88) ~[netty-3.6.5.Final.jar:na]
[info] at org.jboss.netty.channel.socket.nio.AbstractNioWorker.process(AbstractNioWorker.java:107) ~[netty-3.6.5.Final.jar:na]
[info] at org.jboss.netty.channel.socket.nio.AbstractNioSelector.run(AbstractNioSelector.java:312) ~[netty-3.6.5.Final.jar:na]
[info] at org.jboss.netty.channel.socket.nio.AbstractNioWorker.run(AbstractNioWorker.java:88) ~[netty-3.6.5.Final.jar:na]
[info] at org.jboss.netty.channel.socket.nio.NioWorker.run(NioWorker.java:178) ~[netty-3.6.5.Final.jar:na]
[info] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110) [na:1.7.0_10]
[info] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603) [na:1.7.0_10]
[info] at java.lang.Thread.run(Thread.java:722) [na:1.7.0_10]
[info] 23:30:41.286 [New I/O worker #1] DEBUG o.m.socko.webserver.RequestHandler - Error handling request
[info] java.io.NotSerializableException: org.jboss.netty.channel.socket.nio.NioAcceptedSocketChannel
[info] at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1180) ~[na:1.7.0_10]
[info] at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1528) ~[na:1.7.0_10]
[info] at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1493) ~[na:1.7.0_10]
[info] at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1416) ~[na:1.7.0_10]
[info] at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1174) ~[na:1.7.0_10]
[info] at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:346) ~[na:1.7.0_10]
[info] at akka.serialization.JavaSerializer$$anonfun$toBinary$1.apply$mcV$sp(Serializer.scala:129) ~[akka-actor_2.10-2.2.0.jar:2.2.0]
[info] at akka.serialization.JavaSerializer$$anonfun$toBinary$1.apply(Serializer.scala:129) ~[akka-actor_2.10-2.2.0.jar:2.2.0]
[info] at akka.serialization.JavaSerializer$$anonfun$toBinary$1.apply(Serializer.scala:129) ~[akka-actor_2.10-2.2.0.jar:2.2.0]
[info] at scala.util.DynamicVariable.withValue(DynamicVariable.scala:57) ~[na:na]
[info] at akka.serialization.JavaSerializer.toBinary(Serializer.scala:129) ~[akka-actor_2.10-2.2.0.jar:2.2.0]
[info] at WebSocketApp$$anonfun$1.applyOrElse(WebSocketApp.scala:55) ~[classes/:na]
[info] at WebSocketApp$$anonfun$1.applyOrElse(WebSocketApp.scala:37) ~[classes/:na]
[info] at scala.runtime.AbstractPartialFunction$mcVL$sp.apply$mcVL$sp(AbstractPartialFunction.scala:33) ~[na:na]
[info] at scala.runtime.AbstractPartialFunction$mcVL$sp.apply(AbstractPartialFunction.scala:33) ~[na:na]
[info] at scala.runtime.AbstractPartialFunction$mcVL$sp.apply(AbstractPartialFunction.scala:25) ~[na:na]
[info] at org.mashupbots.socko.webserver.RequestHandler.messageReceived(RequestHandler.scala:137) ~[socko-webserver_2.10-0.3.0.jar:0.3.0]
[info] at org.jboss.netty.handler.stream.ChunkedWriteHandler.handleUpstream(ChunkedWriteHandler.java:142) ~[netty-3.6.5.Final.jar:na]
[info] at org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:296) ~[netty-3.6.5.Final.jar:na]
[info] at org.jboss.netty.handler.codec.frame.FrameDecoder.unfoldAndFireMessageReceived(FrameDecoder.java:462) ~[netty-3.6.5.Final.jar:na]
[info] at org.jboss.netty.handler.codec.replay.ReplayingDecoder.callDecode(ReplayingDecoder.java:536) ~[netty-3.6.5.Final.jar:na]
[info] at org.jboss.netty.handler.codec.replay.ReplayingDecoder.messageReceived(ReplayingDecoder.java:435) ~[netty-3.6.5.Final.jar:na]
[info] at org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:268) ~[netty-3.6.5.Final.jar:na]
[info] at org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:255) ~[netty-3.6.5.Final.jar:na]
[info] at org.jboss.netty.channel.socket.nio.NioWorker.read(NioWorker.java:88) ~[netty-3.6.5.Final.jar:na]
[info] at org.jboss.netty.channel.socket.nio.AbstractNioWorker.process(AbstractNioWorker.java:107) ~[netty-3.6.5.Final.jar:na]
[info] at org.jboss.netty.channel.socket.nio.AbstractNioSelector.run(AbstractNioSelector.java:312) ~[netty-3.6.5.Final.jar:na]
[info] at org.jboss.netty.channel.socket.nio.AbstractNioWorker.run(AbstractNioWorker.java:88) ~[netty-3.6.5.Final.jar:na]
[info] at org.jboss.netty.channel.socket.nio.NioWorker.run(NioWorker.java:178) ~[netty-3.6.5.Final.jar:na]
[info] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110) [na:1.7.0_10]
[info] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603) [na:1.7.0_10]
[info] at java.lang.Thread.run(Thread.java:722) [na:1.7.0_10]
It seems you might be onto something there. I added this

On Wednesday, 25 September 2013 08:07:43 UTC+2, Volker Stampa wrote:
Hi Tsume,

Volker Stampa

unread,
Sep 26, 2013, 1:57:48 AM9/26/13
to events...@googlegroups.com
Hi Tsume,


On Wed, Sep 25, 2013 at 11:31 PM, Tsume <alpha...@gmail.com> wrote:
Hi Volker,

It seems you might be onto something. I added the following in my configuration file but my application still crashed

  serializers {
        java = "akka.serialization.JavaSerializer"
        
      }
 
      serialization-bindings {
        "org.mashupbots.socko.events.WebSocketFrameEvent" = java
        "org.jboss.netty.channel.socket.nio.NioAcceptedSocketChannel" = java
      }


I then tried  to programmatically serialize the WebSocketFrameEvent. Through process of elimination I found that the my application that error occurs when I try to the WebSocketFrameEvent into bytes: val bytes = serializer.toBinary(wsFrame)

Actually that is what I would expect. I guess org.jboss.netty.channel.socket.nio.NioAcceptedSocketChannel does not implement java.io.Serializable and thus is not serializable using standard java-serialization. That is why I proposed to implement a custom serializer for this that is not using standard java-serialization. The WebSocketFrameEvent seems to contain a reference to the socket, however when it comes to journalling you are probably not interested in storing the socket in the journal, but just the data it contains.

Does that make sense?

Volker
Reply all
Reply to author
Forward
0 new messages