From ef9c01ecee03c520f709e8a2abe81fca0aa183fd Mon Sep 17 00:00:00 2001 From: Viktor Klang Date: Tue, 28 Dec 2010 11:36:23 +0100 Subject: [PATCH 1/3] Making EmbeddedAppServer work without AKKA_HOME --- .../akka/actor/BootableActorLoaderService.scala | 11 +++++------ .../main/scala/akka/http/EmbeddedAppServer.scala | 14 +++++++++----- 2 files changed, 14 insertions(+), 11 deletions(-) diff --git a/akka-actor/src/main/scala/akka/actor/BootableActorLoaderService.scala b/akka-actor/src/main/scala/akka/actor/BootableActorLoaderService.scala index 0463196eaf..2288a1cba9 100644 --- a/akka-actor/src/main/scala/akka/actor/BootableActorLoaderService.scala +++ b/akka-actor/src/main/scala/akka/actor/BootableActorLoaderService.scala @@ -19,11 +19,10 @@ trait BootableActorLoaderService extends Bootable with Logging { val BOOT_CLASSES = config.getList("akka.boot") lazy val applicationLoader: Option[ClassLoader] = createApplicationClassLoader - protected def createApplicationClassLoader : Option[ClassLoader] = { - Some( + protected def createApplicationClassLoader : Option[ClassLoader] = Some({ if (HOME.isDefined) { - val CONFIG = HOME.getOrElse(throwNoAkkaHomeException) + "/config" - val DEPLOY = HOME.getOrElse(throwNoAkkaHomeException) + "/deploy" + val CONFIG = HOME.get + "/config" + val DEPLOY = HOME.get + "/deploy" val DEPLOY_DIR = new File(DEPLOY) if (!DEPLOY_DIR.exists) { log.slf4j.error("Could not find a deploy directory at [{}]", DEPLOY) @@ -47,8 +46,8 @@ trait BootableActorLoaderService extends Bootable with Logging { val allJars = toDeploy ::: dependencyJars new URLClassLoader(allJars.toArray,Thread.currentThread.getContextClassLoader) - } else Thread.currentThread.getContextClassLoader) - } + } else Thread.currentThread.getContextClassLoader + }) abstract override def onLoad = { applicationLoader.foreach(_ => log.slf4j.info("Creating /deploy class-loader")) diff --git a/akka-http/src/main/scala/akka/http/EmbeddedAppServer.scala b/akka-http/src/main/scala/akka/http/EmbeddedAppServer.scala index 7fd63d8456..d881459817 100644 --- a/akka-http/src/main/scala/akka/http/EmbeddedAppServer.scala +++ b/akka-http/src/main/scala/akka/http/EmbeddedAppServer.scala @@ -11,11 +11,11 @@ import java.io.File import akka.actor.BootableActorLoaderService import akka.util.{Bootable, Logging} -//import akka.comet.AkkaServlet - import org.eclipse.jetty.xml.XmlConfiguration import org.eclipse.jetty.server.{Handler, Server} import org.eclipse.jetty.server.handler.{HandlerList, HandlerCollection, ContextHandler} +import java.net.URL +import akka.AkkaException /** * Handles the Akka Comet Support (load/unload) @@ -32,17 +32,21 @@ trait EmbeddedAppServer extends Bootable with Logging { protected var server: Option[Server] = None + protected def findJettyConfigXML: Option[URL] = + Option(applicationLoader.getOrElse(this.getClass.getClassLoader).getResource("microkernel-server.xml")) orElse + HOME.map(home => new File(home + "/config/microkernel-server.xml").toURI.toURL) + abstract override def onLoad = { super.onLoad if (isRestEnabled) { log.slf4j.info("Attempting to start Akka HTTP service") + val configuration = new XmlConfiguration(findJettyConfigXML.getOrElse(error("microkernel-server.xml not found!"))) + System.setProperty("jetty.port", REST_PORT.toString) System.setProperty("jetty.host", REST_HOSTNAME) - System.setProperty("jetty.home", HOME.getOrElse(throwNoAkkaHomeException) + "/deploy/root") - val configuration = new XmlConfiguration( - new File(HOME.getOrElse(throwNoAkkaHomeException) + "/config/microkernel-server.xml").toURI.toURL) + HOME.foreach( home => System.setProperty("jetty.home", home + "/deploy/root") ) server = Option(configuration.configure.asInstanceOf[Server]) map { s => //Set the correct classloader to our contexts applicationLoader foreach { loader => From 953d15554374b2c0ef9bea5ce59dce52b4c823ba Mon Sep 17 00:00:00 2001 From: Viktor Klang Date: Tue, 28 Dec 2010 11:53:28 +0100 Subject: [PATCH 2/3] Fixed logging glitch in ReflectiveAccess --- .../src/main/scala/akka/util/ReflectiveAccess.scala | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/akka-actor/src/main/scala/akka/util/ReflectiveAccess.scala b/akka-actor/src/main/scala/akka/util/ReflectiveAccess.scala index 22c9e6cab9..4e4bcdb7e1 100644 --- a/akka-actor/src/main/scala/akka/util/ReflectiveAccess.scala +++ b/akka-actor/src/main/scala/akka/util/ReflectiveAccess.scala @@ -229,7 +229,8 @@ object ReflectiveAccess extends Logging { Some(ctor.newInstance(args: _*).asInstanceOf[T]) } catch { case e => - log.slf4j.warn("Could not instantiate class [{}] due to [{}]", clazz.getName, e.getCause) + log.slf4j.warn("Could not instantiate class [{}]", clazz.getName) + log.slf4j.warn("createInstance",e.getCause) None } @@ -246,7 +247,8 @@ object ReflectiveAccess extends Logging { Some(ctor.newInstance(args: _*).asInstanceOf[T]) } catch { case e => - log.slf4j.warn("Could not instantiate class [{}] due to [{}]", fqn, e.getCause) + log.slf4j.warn("Could not instantiate class [{}]", fqn) + log.slf4j.warn("createInstance",e.getCause) None } @@ -258,12 +260,13 @@ object ReflectiveAccess extends Logging { Option(instance.get(null).asInstanceOf[T]) } catch { case e: ClassNotFoundException => { - log.slf4j.debug("Could not get object [{}] due to [{}]", fqn, e) + log.slf4j.debug("Could not get object [{}]", fqn) + log.slf4j.debug("getObjectFor", e) None } case ei: ExceptionInInitializerError => { - log.error("Exception in initializer for object [%s]".format(fqn)) - log.error(ei.getCause, "Cause was:") + log.slf4j.error("Exception in initializer for object [{}]",fqn) + log.slf4j.error("Cause was:",ei.getCause) throw ei } } From 0bdb5d545445c026cbb186561ae5c0f0b9500222 Mon Sep 17 00:00:00 2001 From: Viktor Klang Date: Thu, 30 Dec 2010 13:23:09 +0100 Subject: [PATCH 3/3] Adding possibility to set id for TypedActor --- .../src/main/scala/akka/actor/TypedActor.scala | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/akka-typed-actor/src/main/scala/akka/actor/TypedActor.scala b/akka-typed-actor/src/main/scala/akka/actor/TypedActor.scala index 786a4c3763..d0f09b3130 100644 --- a/akka-typed-actor/src/main/scala/akka/actor/TypedActor.scala +++ b/akka-typed-actor/src/main/scala/akka/actor/TypedActor.scala @@ -380,6 +380,7 @@ final class TypedActorConfiguration { private[akka] var _host: Option[InetSocketAddress] = None private[akka] var _messageDispatcher: Option[MessageDispatcher] = None private[akka] var _threadBasedDispatcher: Option[Boolean] = None + private[akka] var _id: Option[String] = None def timeout = _timeout def timeout(timeout: Duration) : TypedActorConfiguration = { @@ -387,6 +388,12 @@ final class TypedActorConfiguration { this } + def id = _id + def id(id: String): TypedActorConfiguration = { + _id = Option(id) + this + } + def makeRemote(hostname: String, port: Int): TypedActorConfiguration = makeRemote(new InetSocketAddress(hostname, port)) def makeRemote(remoteAddress: InetSocketAddress): TypedActorConfiguration = { @@ -557,6 +564,7 @@ object TypedActor extends Logging { if (config._messageDispatcher.isDefined) actorRef.dispatcher = config._messageDispatcher.get if (config._threadBasedDispatcher.isDefined) actorRef.dispatcher = Dispatchers.newThreadBasedDispatcher(actorRef) if (config._host.isDefined) actorRef.makeRemote(config._host.get) + if (config._id.isDefined) actorRef.id = config._id.get actorRef.timeout = config.timeout AspectInitRegistry.register(proxy, AspectInit(intfClass, typedActor, actorRef, actorRef.remoteAddress, actorRef.timeout)) actorRef.start