diff --git a/akka-core/src/main/scala/actor/BootableActorLoaderService.scala b/akka-core/src/main/scala/actor/BootableActorLoaderService.scala index 1f8b76bfc9..a44db8fd07 100644 --- a/akka-core/src/main/scala/actor/BootableActorLoaderService.scala +++ b/akka-core/src/main/scala/actor/BootableActorLoaderService.scala @@ -48,8 +48,9 @@ trait BootableActorLoaderService extends Bootable with Logging { URLClassLoader.newInstance( allJars.toArray.asInstanceOf[Array[URL]], - ClassLoader.getSystemClassLoader) - } else getClass.getClassLoader) + Thread.currentThread.getContextClassLoader) + //parentClassLoader) + } else Thread.currentThread.getContextClassLoader) } abstract override def onLoad = { diff --git a/akka-http/src/main/scala/AkkaCometServlet.scala b/akka-http/src/main/scala/AkkaCometServlet.scala index 73590fe9f6..01fe5272be 100644 --- a/akka-http/src/main/scala/AkkaCometServlet.scala +++ b/akka-http/src/main/scala/AkkaCometServlet.scala @@ -5,17 +5,17 @@ package se.scalablesolutions.akka.comet import se.scalablesolutions.akka.util.Logging -import se.scalablesolutions.akka.rest.{AkkaServlet => RestServlet} import java.util.{List => JList} import javax.servlet.ServletConfig import javax.servlet.http.{HttpServletRequest, HttpServletResponse} +import com.sun.jersey.spi.container.servlet.ServletContainer import org.atmosphere.container.GrizzlyCometSupport import org.atmosphere.cpr.{AtmosphereServlet, AtmosphereServletProcessor, AtmosphereResource, AtmosphereResourceEvent,CometSupport,CometSupportResolver,DefaultCometSupportResolver} import org.atmosphere.handler.{ReflectorServletProcessor, AbstractReflectorAtmosphereHandler} -class AtmosphereRestServlet extends RestServlet with AtmosphereServletProcessor { +class AtmosphereRestServlet extends ServletContainer with AtmosphereServletProcessor { //Delegate to implement the behavior for AtmosphereHandler private val handler = new AbstractReflectorAtmosphereHandler { override def onRequest(event: AtmosphereResource[HttpServletRequest, HttpServletResponse]) { @@ -45,7 +45,9 @@ class AtmosphereRestServlet extends RestServlet with AtmosphereServletProcessor class AkkaServlet extends org.atmosphere.cpr.AtmosphereServlet with Logging { lazy val servlet = createRestServlet - protected def createRestServlet : AtmosphereRestServlet = new AtmosphereRestServlet + protected def createRestServlet : AtmosphereRestServlet = new AtmosphereRestServlet { + override def getInitParameter(key : String) = AkkaServlet.this.getInitParameter(key) + } /** * We override this to avoid Atmosphere looking for it's atmosphere.xml file * Instead we specify what semantics we want in code. diff --git a/akka-http/src/main/scala/AkkaServlet.scala b/akka-http/src/main/scala/AkkaServlet.scala deleted file mode 100644 index b9dd9a652d..0000000000 --- a/akka-http/src/main/scala/AkkaServlet.scala +++ /dev/null @@ -1,32 +0,0 @@ -/** - * Copyright (C) 2009-2010 Scalable Solutions AB - */ - -package se.scalablesolutions.akka.rest - -import se.scalablesolutions.akka.config.Config.config -import com.sun.jersey.api.core.ResourceConfig -import com.sun.jersey.spi.container.servlet.ServletContainer -import com.sun.jersey.spi.container.WebApplication - -/** - * Akka's servlet to be used when deploying actors exposed as REST services in a standard servlet container, - * e.g. not using the Akka Kernel. - * - * @author Jonas Bonér - */ -class AkkaServlet extends ServletContainer { - import scala.collection.JavaConversions._ - - override def initiate(resourceConfig: ResourceConfig, webApplication: WebApplication) = { - resourceConfig.getProperties.put( - "com.sun.jersey.config.property.packages", - config.getList("akka.rest.resource_packages").mkString(";") - ) - resourceConfig.getProperties.put( - "com.sun.jersey.spi.container.ResourceFilters", - config.getList("akka.rest.filters").mkString(",")) - - webApplication.initiate(resourceConfig) - } -} diff --git a/akka-kernel/src/main/scala/EmbeddedAppServer.scala b/akka-kernel/src/main/scala/EmbeddedAppServer.scala index f7d5325626..41e6dd44ae 100644 --- a/akka-kernel/src/main/scala/EmbeddedAppServer.scala +++ b/akka-kernel/src/main/scala/EmbeddedAppServer.scala @@ -5,16 +5,15 @@ package se.scalablesolutions.akka.kernel import com.sun.grizzly.http.SelectorThread -import com.sun.grizzly.http.servlet.ServletAdapter +import com.sun.grizzly.http.servlet.{ ServletAdapter } import com.sun.grizzly.standalone.StaticStreamAlgorithm import javax.ws.rs.core.UriBuilder -import com.sun.jersey.api.core.ResourceConfig -import com.sun.jersey.spi.container.WebApplication +import javax.servlet.ServletConfig import se.scalablesolutions.akka.actor.BootableActorLoaderService import se.scalablesolutions.akka.util.{Bootable, Logging} -import se.scalablesolutions.akka.comet.{ AkkaServlet, AtmosphereRestServlet } +import se.scalablesolutions.akka.comet.{ AkkaServlet } /** * Handles the Akka Comet Support (load/unload) @@ -45,20 +44,30 @@ trait EmbeddedAppServer extends Bootable with Logging { val adapter = new ServletAdapter adapter.setHandleStaticResources(true) adapter.setServletInstance(new AkkaServlet { - override def createRestServlet = new AtmosphereRestServlet { - override def initiate(resourceConfig: ResourceConfig, webApplication: WebApplication) = { - val cl = Thread.currentThread.getContextClassLoader - try { - Thread.currentThread.setContextClassLoader(applicationLoader.get) - super.initiate(resourceConfig,webApplication) - } finally { - Thread.currentThread.setContextClassLoader(cl) - } - } + override def init(sc : ServletConfig) : Unit = { + val cl = Thread.currentThread.getContextClassLoader + try { + Thread.currentThread.setContextClassLoader(applicationLoader.get) + super.init(sc) + } + finally { + Thread.currentThread.setContextClassLoader(cl) + } } }) + adapter.setContextPath(uri.getPath) - adapter.addInitParameter("cometSupport", "org.atmosphere.container.GrizzlyCometSupport") + adapter.addInitParameter("cometSupport", + "org.atmosphere.container.GrizzlyCometSupport") + adapter.addInitParameter("com.sun.jersey.config.property.resourceConfigClass", + "com.sun.jersey.api.core.PackagesResourceConfig") + adapter.addInitParameter("com.sun.jersey.config.property.packages", + config.getList("akka.rest.resource_packages").mkString(";") + ) + adapter.addInitParameter("com.sun.jersey.spi.container.ResourceFilters", + config.getList("akka.rest.filters").mkString(",") + ) + if (HOME.isDefined) adapter.addRootFolder(HOME.get + "/deploy/root") log.info("REST service root path [%s] and context path [%s]", adapter.getRootFolders, adapter.getContextPath) diff --git a/config/akka-reference.conf b/config/akka-reference.conf index 9b99861be5..447b4b30c9 100644 --- a/config/akka-reference.conf +++ b/config/akka-reference.conf @@ -8,7 +8,7 @@ filename = "./logs/akka.log" roll = "daily" # Options: never, hourly, daily, sunday/monday/... - level = "trace" # Options: fatal, critical, error, warning, info, debug, trace + level = "DEBUG" # Options: fatal, critical, error, warning, info, debug, trace console = on # syslog_host = "" # syslog_server_name = "" diff --git a/project/build/AkkaProject.scala b/project/build/AkkaProject.scala index 1f7bd27a94..ec55352ed6 100644 --- a/project/build/AkkaProject.scala +++ b/project/build/AkkaProject.scala @@ -106,6 +106,9 @@ class AkkaParent(info: ProjectInfo) extends DefaultProject(info) { " dist/akka-jta_%s-%s.jar".format(buildScalaVersion, version) ) + //Exclude slf4j1.5.11 from the classpath, it's conflicting... + override def runClasspath = super.runClasspath --- (super.runClasspath ** "slf4j*1.5.11.jar") + // ------------------------------------------------------------ // publishing override def managedStyle = ManagedStyle.Maven