Looks promising!

This commit is contained in:
Viktor Klang 2010-05-28 23:13:37 +02:00
commit 5f405fb483
6 changed files with 36 additions and 53 deletions

View file

@ -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 = {

View file

@ -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.

View file

@ -1,32 +0,0 @@
/**
* Copyright (C) 2009-2010 Scalable Solutions AB <http://scalablesolutions.se>
*/
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 <a href="http://jonasboner.com">Jonas Bon&#233;r</a>
*/
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)
}
}

View file

@ -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)

View file

@ -8,7 +8,7 @@
<log>
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 = ""

View file

@ -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