From a7dffdd44573c5adc6778b2dafa753f87a3ce8e2 Mon Sep 17 00:00:00 2001 From: Debasish Ghosh Date: Wed, 15 Jun 2011 13:42:22 +0530 Subject: [PATCH 1/4] pluggable serializers - changed entry name in akka.conf to serialization-bindings. Also updated akka-reference.conf with a commented section on pluggable serializers --- .../akka/serialization/akka-serializer.conf | 2 +- .../src/main/scala/akka/config/Config.scala | 2 +- config/akka-reference.conf | 17 +++++++++++++++++ 3 files changed, 19 insertions(+), 2 deletions(-) diff --git a/akka-actor-tests/src/test/scala/akka/serialization/akka-serializer.conf b/akka-actor-tests/src/test/scala/akka/serialization/akka-serializer.conf index 324adb5c96..d1e948840e 100644 --- a/akka-actor-tests/src/test/scala/akka/serialization/akka-serializer.conf +++ b/akka-actor-tests/src/test/scala/akka/serialization/akka-serializer.conf @@ -7,7 +7,7 @@ akka { default = "akka.serialization.JavaSerializer" } - bindings { + serialization-bindings { java = ["akka.serialization.SerializeSpec$Address", "akka.serialization.MyJavaSerializableActor", "akka.serialization.MyStatelessActorWithMessagesInMailbox", "akka.serialization.MyActorWithProtobufMessagesInMailbox"] sjson = ["akka.serialization.SerializeSpec$Person"] proto = ["com.google.protobuf.Message", "akka.actor.ProtobufProtocol$MyMessage"] diff --git a/akka-actor/src/main/scala/akka/config/Config.scala b/akka-actor/src/main/scala/akka/config/Config.scala index d1f8412d1a..1dc2fa4cf2 100644 --- a/akka-actor/src/main/scala/akka/config/Config.scala +++ b/akka-actor/src/main/scala/akka/config/Config.scala @@ -122,7 +122,7 @@ object Config { val serializers = config.getSection("akka.actor.serializers").map(_.map).getOrElse(Map("default" -> "akka.serialization.JavaSerializer")) - val bindings = config.getSection("akka.actor.bindings") + val bindings = config.getSection("akka.actor.serialization-bindings") .map(_.map) .map(m ⇒ Map() ++ m.map { case (k, v: List[String]) ⇒ Map() ++ v.map((_, k)) }.flatten) diff --git a/config/akka-reference.conf b/config/akka-reference.conf index edd36f3c92..187935a0b6 100644 --- a/config/akka-reference.conf +++ b/config/akka-reference.conf @@ -137,6 +137,23 @@ akka { message-time-to-live = 120 } } + + # entries for pluggable serializers and their bindings + # if a binding for a specific class is not found, then the default + # serializer is used + # + # serializers { + # java = "akka.serialization.JavaSerializer" + # proto = "akka.testing.ProtobufSerializer" + # sjson = "akka.testing.SJSONSerializer" + # default = "akka.serialization.JavaSerializer" + # } + + # serialization-bindings { + # java = ["akka.serialization.SerializeSpec$Address", "akka.serialization.MyJavaSerializableActor", "akka.serialization.MyStatelessActorWithMessagesInMailbox", "akka.serialization.MyActorWithProtobufMessagesInMailbox"] + # sjson = ["akka.serialization.SerializeSpec$Person"] + # proto = ["com.google.protobuf.Message", "akka.actor.ProtobufProtocol$MyMessage"] + # } } cluster { From 204f4e2c4c7db2c2b2906438b11af8b760578c73 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonas=20Bone=CC=81r?= Date: Wed, 15 Jun 2011 13:37:31 +0200 Subject: [PATCH 2/4] reformatted akka-reference.conf --- config/akka-reference.conf | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/config/akka-reference.conf b/config/akka-reference.conf index 187935a0b6..85a14d243c 100644 --- a/config/akka-reference.conf +++ b/config/akka-reference.conf @@ -138,9 +138,8 @@ akka { } } - # entries for pluggable serializers and their bindings - # if a binding for a specific class is not found, then the default - # serializer is used + # Entries for pluggable serializers and their bindings. If a binding for a specific class is not found, + # then the default serializer (Java serialization) is used. # # serializers { # java = "akka.serialization.JavaSerializer" @@ -150,9 +149,13 @@ akka { # } # serialization-bindings { - # java = ["akka.serialization.SerializeSpec$Address", "akka.serialization.MyJavaSerializableActor", "akka.serialization.MyStatelessActorWithMessagesInMailbox", "akka.serialization.MyActorWithProtobufMessagesInMailbox"] + # java = ["akka.serialization.SerializeSpec$Address", + # "akka.serialization.MyJavaSerializableActor", + # "akka.serialization.MyStatelessActorWithMessagesInMailbox", + # "akka.serialization.MyActorWithProtobufMessagesInMailbox"] # sjson = ["akka.serialization.SerializeSpec$Person"] - # proto = ["com.google.protobuf.Message", "akka.actor.ProtobufProtocol$MyMessage"] + # proto = ["com.google.protobuf.Message", + # "akka.actor.ProtobufProtocol$MyMessage"] # } } From 9bb5460cecae17eec82e6e0c3920473954b61301 Mon Sep 17 00:00:00 2001 From: Debasish Ghosh Date: Wed, 15 Jun 2011 17:21:20 +0530 Subject: [PATCH 3/4] removed duplicate copy of Serializer.scala --- .../scala/akka/serialization/Serializer.scala | 39 ------------------- 1 file changed, 39 deletions(-) delete mode 100644 akka-remote/src/main/scala/akka/serialization/Serializer.scala diff --git a/akka-remote/src/main/scala/akka/serialization/Serializer.scala b/akka-remote/src/main/scala/akka/serialization/Serializer.scala deleted file mode 100644 index 7ac3eea2df..0000000000 --- a/akka-remote/src/main/scala/akka/serialization/Serializer.scala +++ /dev/null @@ -1,39 +0,0 @@ -package akka.serialization - -/** - * Copyright (C) 2009-2011 Scalable Solutions AB - */ - -import java.io.{ ObjectOutputStream, ByteArrayOutputStream, ObjectInputStream, ByteArrayInputStream } -import akka.util.ClassLoaderObjectInputStream -import akka.actor.ActorRef - -trait Serializer extends scala.Serializable { - def toBinary(o: AnyRef): Array[Byte] - def fromBinary(bytes: Array[Byte], clazz: Option[Class[_]] = None, classLoader: Option[ClassLoader] = None): AnyRef -} - -class JavaSerializer extends Serializer { - def toBinary(o: AnyRef): Array[Byte] = { - val bos = new ByteArrayOutputStream - val out = new ObjectOutputStream(bos) - out.writeObject(o) - out.close() - bos.toByteArray - } - - def fromBinary(bytes: Array[Byte], clazz: Option[Class[_]] = None, - classLoader: Option[ClassLoader] = None): AnyRef = { - val in = - if (classLoader.isDefined) new ClassLoaderObjectInputStream(classLoader.get, new ByteArrayInputStream(bytes)) else - new ObjectInputStream(new ByteArrayInputStream(bytes)) - val obj = in.readObject - in.close() - obj - } -} - -object JavaSerializer extends JavaSerializer -object Serializer { - val defaultSerializerName = JavaSerializer.getClass.getName -} From e5de16ec2a450923ae40ad1366ff59d64fd14ba2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonas=20Bone=CC=81r?= Date: Wed, 15 Jun 2011 14:27:39 +0200 Subject: [PATCH 4/4] Fixed implicit deadlock in cluster deployment --- .../src/main/scala/akka/cluster/zookeeper/AkkaZkClient.scala | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/akka-cluster/src/main/scala/akka/cluster/zookeeper/AkkaZkClient.scala b/akka-cluster/src/main/scala/akka/cluster/zookeeper/AkkaZkClient.scala index a30fc41932..dfa8ed8be8 100644 --- a/akka-cluster/src/main/scala/akka/cluster/zookeeper/AkkaZkClient.scala +++ b/akka-cluster/src/main/scala/akka/cluster/zookeeper/AkkaZkClient.scala @@ -7,7 +7,7 @@ import org.I0Itec.zkclient._ import org.I0Itec.zkclient.serialize._ import org.I0Itec.zkclient.exception._ -import akka.event.EventHandler +//import akka.event.EventHandler /** * ZooKeeper client. Holds the ZooKeeper connection and manages its session. @@ -18,7 +18,7 @@ class AkkaZkClient(zkServers: String, zkSerializer: ZkSerializer = new SerializableSerializer) extends ZkClient(zkServers, sessionTimeout, connectionTimeout, zkSerializer) { - EventHandler.debug(this, "Connecting to ZooKeeper ensamble [%s]" format zkServers) + // EventHandler.debug(this, "Connecting to ZooKeeper ensamble [%s]" format zkServers) def connection: ZkConnection = _connection.asInstanceOf[ZkConnection]