Looks promising!
This commit is contained in:
commit
5f405fb483
6 changed files with 36 additions and 53 deletions
|
|
@ -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 = {
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
|
|||
|
|
@ -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é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)
|
||||
}
|
||||
}
|
||||
|
|
@ -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)
|
||||
|
||||
|
|
|
|||
|
|
@ -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 = ""
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue