diff --git a/akka-kernel/pom.xml b/akka-kernel/pom.xml index b964967624..9ed31850e0 100755 --- a/akka-kernel/pom.xml +++ b/akka-kernel/pom.xml @@ -232,12 +232,17 @@ org.atmosphere atmosphere-runtime - 0.4.1 + 0.5-SNAPSHOT org.atmosphere - atmosphere-core - 0.4-SNAPSHOT + atmosphere-jersey + 0.5-SNAPSHOT + + + org.atmosphere + atmosphere-annotations + 0.5-SNAPSHOT diff --git a/akka-kernel/src/main/scala/AkkaServlet.scala b/akka-kernel/src/main/scala/AkkaServlet.scala index f633835deb..3f18fc9dad 100755 --- a/akka-kernel/src/main/scala/AkkaServlet.scala +++ b/akka-kernel/src/main/scala/AkkaServlet.scala @@ -12,12 +12,15 @@ import com.sun.jersey.api.core.ResourceConfig import com.sun.jersey.spi.container.servlet.ServletContainer import com.sun.jersey.spi.container.WebApplication +import java.util.{List => JList} + import javax.servlet.{ServletConfig} import javax.servlet.http.{HttpServletRequest, HttpServletResponse} -import org.atmosphere.cpr.{AtmosphereServlet, AtmosphereServletProcessor, AtmosphereResource, AtmosphereResourceEvent,CometSupport} +import org.atmosphere.cpr.{AtmosphereServlet, AtmosphereServletProcessor, AtmosphereResource, AtmosphereResourceEvent,CometSupport,CometSupportResolver} +import org.atmosphere.container.{GrizzlyCometSupport,GlassFishv3CometSupport} import org.atmosphere.handler.{ReflectorServletProcessor, AbstractReflectorAtmosphereHandler} -import org.atmosphere.core.JerseyBroadcaster +import org.atmosphere.jersey.JerseyBroadcaster /** * Akka's servlet to be used when deploying actors exposed as REST services in a standard servlet container, @@ -73,22 +76,28 @@ class AkkaCometServlet extends org.atmosphere.cpr.AtmosphereServlet with Logging override def loadConfiguration(sc: ServletConfig) { atmosphereHandlers.put("/*", new AtmosphereServlet.AtmosphereHandlerWrapper(servlet, new JerseyBroadcaster)) - - loadCometSupport(sc.getInitParameter("cometSupport")) map( setCometSupport(_) ) } - private def loadCometSupport(fqn : String) = { + override def createCometSupportResolver() : CometSupportResolver = { + import org.scala_tools.javautils.Imports._ - log.info("Trying to load: " + fqn) - try { - Some(Class.forName(fqn) - .getConstructor(Array(classOf[AtmosphereConfig]): _*) - .newInstance(config) - .asInstanceOf[CometSupport[_ <: AtmosphereResource[_,_]]]) - } catch { - case e : Exception => - log.error(e, "Couldn't load comet support", fqn) - None + new CometSupportResolver(config) { + type CS = CometSupport[_ <: AtmosphereResource[_,_]] + override def resolveMultipleNativeSupportConflict(available : JList[Class[_ <: CS]]) : CS = { + available.asScala.filter(c => c != classOf[GrizzlyCometSupport] && c != classOf[GlassFishv3CometSupport]).toList match { + case Nil => new GrizzlyCometSupport(config) + case x :: Nil => newCometSupport(x) + case _ => super.resolveMultipleNativeSupportConflict(available) + } + } + + override def resolve(useNativeIfPossible : Boolean, useBlockingAsDefault : Boolean) : CS = { + val predef = config.getInitParameter("cometSupport") + if(testClassExists(predef)) + newCometSupport(predef) + else + super.resolve(useNativeIfPossible, useBlockingAsDefault) + } } } } diff --git a/akka-kernel/src/main/scala/Kernel.scala b/akka-kernel/src/main/scala/Kernel.scala index e4f66a9050..69813fdd18 100644 --- a/akka-kernel/src/main/scala/Kernel.scala +++ b/akka-kernel/src/main/scala/Kernel.scala @@ -70,7 +70,7 @@ object Kernel extends Logging { adapter.setServletInstance(new AkkaCometServlet) adapter.setContextPath(uri.getPath) //Using autodetection for now - adapter.addInitParameter("cometSupport", "org.atmosphere.container.GrizzlyCometSupport") + //adapter.addInitParameter("cometSupport", "org.atmosphere.container.GrizzlyCometSupport") if (HOME.isDefined) adapter.setRootFolder(HOME.get + "/deploy/root") log.info("REST service root path: [" + adapter.getRootFolder + "] and context path [" + adapter.getContextPath + "] ") diff --git a/akka-samples-scala/src/main/scala/SimpleService.scala b/akka-samples-scala/src/main/scala/SimpleService.scala index 6cb6ed0b8f..bbed4f9d75 100644 --- a/akka-samples-scala/src/main/scala/SimpleService.scala +++ b/akka-samples-scala/src/main/scala/SimpleService.scala @@ -13,7 +13,7 @@ import java.lang.Integer import javax.ws.rs.core.MultivaluedMap import javax.ws.rs.{GET, POST, Path, Produces, WebApplicationException, Consumes} -import org.atmosphere.core.annotation.{Broadcast, Suspend} +import org.atmosphere.annotation.{Broadcast, Suspend} import org.atmosphere.util.XSSHtmlFilter import org.atmosphere.cpr.BroadcastFilter diff --git a/pom.xml b/pom.xml index 7361426e9a..c6f161a0e4 100755 --- a/pom.xml +++ b/pom.xml @@ -67,16 +67,16 @@ - - repo1.maven - Maven Main Repository - http://repo1.maven.org/maven2 - project.embedded.module Project Embedded Repository file://${basedir}/../embedded-repo + + repo1.maven + Maven Main Repository + http://repo1.maven.org/maven2 + scala-tools-snapshots Scala-Tools Maven2 Snapshot Repository