diff --git a/akka.ipr b/akka.ipr index 64165ef396..850de50c34 100644 --- a/akka.ipr +++ b/akka.ipr @@ -1357,17 +1357,6 @@ - - - - - - - - - - - @@ -1577,37 +1566,92 @@ - + - + - + - + - + - + - + - + - + - + - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/akka.iws b/akka.iws index 0d0368ea74..c7223bfe8c 100644 --- a/akka.iws +++ b/akka.iws @@ -6,27 +6,15 @@ - - - - - - - - - - - - - - - - + + + - - + + + - + @@ -158,19 +146,37 @@ - + - + - + + + + + + + + + + + + + + + + + + + - + @@ -237,10 +243,10 @@ @@ -2109,13 +2115,6 @@ - - - - - - - @@ -2144,13 +2143,6 @@ - - - - - - - @@ -2158,16 +2150,30 @@ - + - + - + - + + + + + + + + + + + + + + + diff --git a/fun-test-java/akka-fun-test-java.iml b/fun-test-java/akka-fun-test-java.iml index 37b3a96896..5ed087eeb7 100644 --- a/fun-test-java/akka-fun-test-java.iml +++ b/fun-test-java/akka-fun-test-java.iml @@ -66,9 +66,9 @@ - - - + + + diff --git a/kernel/akka-kernel.iml b/kernel/akka-kernel.iml index b038a3bfbd..6bdaaa9535 100644 --- a/kernel/akka-kernel.iml +++ b/kernel/akka-kernel.iml @@ -75,17 +75,17 @@ - - + + - - + + - - - + + + diff --git a/kernel/src/main/scala/Kernel.scala b/kernel/src/main/scala/Kernel.scala index 78326d2dcf..ec8652a191 100644 --- a/kernel/src/main/scala/Kernel.scala +++ b/kernel/src/main/scala/Kernel.scala @@ -14,7 +14,7 @@ import java.net.URLClassLoader import net.lag.configgy.{Config, Configgy, RuntimeEnvironment} -import kernel.jersey.{AkkaServlet,AkkaCometServlet} +import kernel.jersey.AkkaCometServlet import kernel.nio.RemoteServer import kernel.state.CassandraStorage import kernel.util.Logging diff --git a/kernel/src/main/scala/jersey/AkkaServlet.scala b/kernel/src/main/scala/jersey/AkkaServlet.scala index de3c89dea5..2f8356e29e 100644 --- a/kernel/src/main/scala/jersey/AkkaServlet.scala +++ b/kernel/src/main/scala/jersey/AkkaServlet.scala @@ -16,6 +16,7 @@ import javax.servlet.{ServletConfig} import javax.servlet.http.{HttpServletRequest, HttpServletResponse} import org.atmosphere.cpr.{AtmosphereServletProcessor, AtmosphereEvent} +import org.atmosphere.cpr.AtmosphereServlet.AtmosphereHandlerWrapper import org.atmosphere.container.GrizzlyCometSupport import org.atmosphere.handler.ReflectorServletProcessor import org.atmosphere.core.{JerseyBroadcaster} @@ -29,29 +30,27 @@ import scala.collection.jcl.Conversions._ * @author Jonas Bonér */ class AkkaServlet extends ServletContainer with AtmosphereServletProcessor with Logging { - override def initiate(rc: ResourceConfig, wa: WebApplication) = { + override def initiate(rc: ResourceConfig, wa: WebApplication) = { Kernel.boot // will boot if not already booted by 'main' val configurators = ConfiguratorRepository.getConfiguratorsFor(getServletContext) rc.getClasses.addAll(configurators.flatMap(_.getComponentInterfaces)) log.info("Starting AkkaServlet with ResourceFilters: " + rc.getProperty("com.sun.jersey.spi.container.ResourceFilters")); - rc.getProperties.put("com.sun.jersey.spi.container.ResourceFilters","org.atmosphere.core.AtmosphereFilter") + rc.getProperties.put("com.sun.jersey.spi.container.ResourceFilters", "org.atmosphere.core.AtmosphereFilter") //rc.getFeatures.put("com.sun.jersey.config.feature.Redirect", true) //rc.getFeatures.put("com.sun.jersey.config.feature.ImplicitViewables",true) wa.initiate(rc, new ActorComponentProviderFactory(configurators)) } - //Borrowed from AbstractReflectorAtmosphereHandler + // Borrowed from AbstractReflectorAtmosphereHandler override def onMessage(event: AtmosphereEvent[HttpServletRequest, HttpServletResponse]): AtmosphereEvent[_, _] = { if (event.getMessage ne null) { - var isUsingStream = false - try { + val isUsingStream = try { event.getResponse.getWriter - } catch { - case e: IllegalStateException => isUsingStream = true - } + false + } catch {case e: IllegalStateException => true} val data = event.getMessage.toString if (isUsingStream) { @@ -61,49 +60,25 @@ class AkkaServlet extends ServletContainer with AtmosphereServletProcessor with event.getResponse.getWriter.write(data) event.getResponse.getWriter.flush } - } else log.info("Null event message :/ req[ " + event.getRequest + "] res[" + event.getResponse + "]") + } else log.info("Null event message :/ req[%s] res[%s]", event.getRequest, event.getResponse) event } - //Borrowed from AbstractReflectorAtmosphereHandler - override def onMessage(event: AtmosphereEvent[HttpServletRequest,HttpServletResponse]): AtmosphereEvent[_,_] = { - var isUsingStream = false - try { - event.getResponse.getWriter - } catch { - case e: IllegalStateException => isUsingStream = true - } - - val data = if (event.getMessage ne null) event.getMessage.toString else null - - if (isUsingStream){ - if (data != null) event.getResponse.getOutputStream.write(data.getBytes) - event.getResponse.getOutputStream.flush - } else { - event.getResponse.getWriter.write(data) - event.getResponse.getWriter.flush - } - event - } - - override def onEvent(event: AtmosphereEvent[HttpServletRequest,HttpServletResponse]): AtmosphereEvent[_,_] = { - event.getRequest.setAttribute(ReflectorServletProcessor.ATMOSPHERE_EVENT, event) - event.getRequest.setAttribute(ReflectorServletProcessor.ATMOSPHERE_HANDLER, this) - service(event.getRequest, event.getResponse) - event - } + override def onEvent(event: AtmosphereEvent[HttpServletRequest, HttpServletResponse]): AtmosphereEvent[_, _] = { + event.getRequest.setAttribute(ReflectorServletProcessor.ATMOSPHERE_EVENT, event) + event.getRequest.setAttribute(ReflectorServletProcessor.ATMOSPHERE_HANDLER, this) + service(event.getRequest, event.getResponse) + event + } } class AkkaCometServlet extends org.atmosphere.cpr.AtmosphereServlet { override def init(sconf: ServletConfig) = { val servlet = new AkkaServlet - this.config = new AtmosphereConfig {ah = servlet} - + config = new AtmosphereConfig { ah = servlet } atmosphereHandlers.put("", new AtmosphereHandlerWrapper(servlet, new JerseyBroadcaster)) - setCometSupport(new GrizzlyCometSupport(config)) getCometSupport.init(sconf) - servlet.init(sconf) } diff --git a/samples-java/akka-samples-java.iml b/samples-java/akka-samples-java.iml index 3df2c03adb..2d10b95f15 100644 --- a/samples-java/akka-samples-java.iml +++ b/samples-java/akka-samples-java.iml @@ -59,17 +59,17 @@ - - + + - - + + - - - + + + diff --git a/samples-scala/akka-samples-scala.iml b/samples-scala/akka-samples-scala.iml index 856bfc3490..c2e08e6b04 100644 --- a/samples-scala/akka-samples-scala.iml +++ b/samples-scala/akka-samples-scala.iml @@ -64,17 +64,17 @@ - - + + - - + + - - - + + + diff --git a/samples-scala/src/main/scala/SimpleService.scala b/samples-scala/src/main/scala/SimpleService.scala index fbb8a4ba6a..79eaaad468 100644 --- a/samples-scala/src/main/scala/SimpleService.scala +++ b/samples-scala/src/main/scala/SimpleService.scala @@ -4,18 +4,17 @@ package sample.scala -import javax.ws.rs.{GET, POST, Path, Produces, WebApplicationException, Consumes} import se.scalablesolutions.akka.kernel.state.{TransactionalState, CassandraStorageConfig} import se.scalablesolutions.akka.kernel.actor.{SupervisorFactory, Actor} import se.scalablesolutions.akka.kernel.config.ScalaConfig._ +import se.scalablesolutions.akka.kernel.util.Logging + import javax.ws.rs.core.MultivaluedMap +import javax.ws.rs.{GET, POST, Path, Produces, WebApplicationException, Consumes} - -import se.scalablesolutions.akka.kernel.util.{Logging} import org.atmosphere.core.annotation.{Broadcast, BroadcastFilter => FilterBroadcast, Suspend} -import org.atmosphere.util.{XSSHtmlFilter} -import org.atmosphere.cpr.{BroadcastFilter} - +import org.atmosphere.util.XSSHtmlFilter +import org.atmosphere.cpr.BroadcastFilter class Boot { object factory extends SupervisorFactory { @@ -74,18 +73,11 @@ class Chat extends Actor with Logging { case class Chat(val who: String, val what: String, val msg: String) - @Suspend - @GET - @Produces(Array("text/html")) - def suspend() = "\n" - @Suspend @GET @Produces(Array("text/html")) @FilterBroadcast(Array(classOf[XSSHtmlFilter], classOf[JsonpFilter])) - def suspend() = + def suspend = override def receive: PartialFunction[Any, Unit] = { case Chat(who, what, msg) => { @@ -117,6 +109,9 @@ class JsonpFilter extends BroadcastFilter[String] with Logging { message = m.substring(m.indexOf("__") + 2) } - ("\n") + ("\n") } } \ No newline at end of file