diff --git a/akka.ipr b/akka.ipr
index 14bd9a9fdd..64165ef396 100644
--- a/akka.ipr
+++ b/akka.ipr
@@ -1467,6 +1467,149 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/akka.iws b/akka.iws
index ed6f042be5..29fb8867b0 100644
--- a/akka.iws
+++ b/akka.iws
@@ -6,17 +6,21 @@
-
-
-
-
+
+
+
+
+
+
+
+
+
-
-
+
-
+
@@ -46,7 +50,7 @@
-
+
@@ -59,7 +63,7 @@
-
+
@@ -135,33 +139,6 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -180,10 +157,37 @@
-
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -238,9 +242,6 @@
@@ -318,88 +322,6 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -481,6 +403,46 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -501,28 +463,6 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -554,14 +494,6 @@
-
-
-
-
-
-
-
-
@@ -615,127 +547,7 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
@@ -2186,7 +1998,7 @@
-
+
@@ -2196,9 +2008,9 @@
-
+
-
+
@@ -2253,27 +2065,6 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -2295,6 +2086,20 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -2316,13 +2121,6 @@
-
-
-
-
-
-
-
@@ -2344,23 +2142,37 @@
-
+
-
-
-
-
-
-
-
-
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/bin/start-akka-server.sh b/bin/start-akka-server.sh
index 3f9cee68e7..cdca5293e7 100755
--- a/bin/start-akka-server.sh
+++ b/bin/start-akka-server.sh
@@ -18,15 +18,17 @@ mkdir $BASE_DIR/storage/system
LIB_DIR=$BASE_DIR/lib
CLASSPATH=$BASE_DIR/config
-CLASSPATH=$CLASSPATH:$LIB_DIR/fscontext.jar
-CLASSPATH=$CLASSPATH:$LIB_DIR/providerutil.jar
CLASSPATH=$CLASSPATH:$LIB_DIR/akka-kernel-0.5.jar
CLASSPATH=$CLASSPATH:$LIB_DIR/akka-util-java-0.5.jar
CLASSPATH=$CLASSPATH:$LIB_DIR/akka-util-java.jar
+
CLASSPATH=$CLASSPATH:$LIB_DIR/antlr-3.1.3.jar
CLASSPATH=$CLASSPATH:$LIB_DIR/aopalliance-1.0.jar
CLASSPATH=$CLASSPATH:$LIB_DIR/asm-3.1.jar
CLASSPATH=$CLASSPATH:$LIB_DIR/aspectwerkz-nodeps-jdk5-2.1.jar
+CLASSPATH=$CLASSPATH:$LIB_DIR/atmosphere-core-0.3-SNAPSHOT.jar
+CLASSPATH=$CLASSPATH:$LIB_DIR/atmosphere-compat-0.3-SNAPSHOT.jar
+CLASSPATH=$CLASSPATH:$LIB_DIR/atmosphere-portable-runtime-0.3-SNAPSHOT.jar
CLASSPATH=$CLASSPATH:$LIB_DIR/camel-core-2.0-SNAPSHOT.jar
CLASSPATH=$CLASSPATH:$LIB_DIR/cassandra-0.4.0-dev.jar
CLASSPATH=$CLASSPATH:$LIB_DIR/cglib-2.2.jar
@@ -38,15 +40,9 @@ CLASSPATH=$CLASSPATH:$LIB_DIR/commons-lang-2.4.jar
CLASSPATH=$CLASSPATH:$LIB_DIR/commons-logging-1.0.4.jar
CLASSPATH=$CLASSPATH:$LIB_DIR/commons-math-1.1.jar
CLASSPATH=$CLASSPATH:$LIB_DIR/configgy-1.3.jar
+CLASSPATH=$CLASSPATH:$LIB_DIR/fscontext.jar
CLASSPATH=$CLASSPATH:$LIB_DIR/google-collect-snapshot-20090211.jar
-#CLASSPATH=$CLASSPATH:$LIB_DIR/grizzly-framework-1.8.6.3.jar
-#CLASSPATH=$CLASSPATH:$LIB_DIR/grizzly-http-1.8.6.3.jar
-#CLASSPATH=$CLASSPATH:$LIB_DIR/grizzly-http-servlet-1.8.6.3.jar
-#CLASSPATH=$CLASSPATH:$LIB_DIR/grizzly-http-utils-1.9.1.jar
-#CLASSPATH=$CLASSPATH:$LIB_DIR/grizzly-servlet-webserver-1.8.6.3.jar
-#CLASSPATH=$CLASSPATH:$LIB_DIR/grizzly-comet-1.8.6.3.jar
CLASSPATH=$CLASSPATH:$LIB_DIR/grizzly-comet-webserver-1.8.6.3.jar
-#CLASSPATH=$CLASSPATH:$LIB_DIR/grizzly-comet-webserver-1.9.17-RC2.jar
CLASSPATH=$CLASSPATH:$LIB_DIR/guice-core-2.0-SNAPSHOT.jar
CLASSPATH=$CLASSPATH:$LIB_DIR/guice-jsr250-2.0-SNAPSHOT.jar
CLASSPATH=$CLASSPATH:$LIB_DIR/high-scale-lib.jar
@@ -57,9 +53,6 @@ CLASSPATH=$CLASSPATH:$LIB_DIR/jersey-core-1.0.3.jar
CLASSPATH=$CLASSPATH:$LIB_DIR/jersey-json-1.0.3.jar
CLASSPATH=$CLASSPATH:$LIB_DIR/jersey-server-1.0.3.jar
CLASSPATH=$CLASSPATH:$LIB_DIR/jersey-scala-1.1.2-ea-SNAPSHOT.jar
-CLASSPATH=$CLASSPATH:$LIB_DIR/atmosphere-core-0.3-SNAPSHOT.jar
-CLASSPATH=$CLASSPATH:$LIB_DIR/atmosphere-portable-runtime-0.3-SNAPSHOT.jar
-CLASSPATH=$CLASSPATH:$LIB_DIR/atmosphere-compat-0.3-SNAPSHOT.jar
CLASSPATH=$CLASSPATH:$LIB_DIR/JSAP-2.1.jar
CLASSPATH=$CLASSPATH:$LIB_DIR/jsr250-api-1.0.jar
CLASSPATH=$CLASSPATH:$LIB_DIR/jsr311-api-1.0.jar
@@ -70,7 +63,8 @@ CLASSPATH=$CLASSPATH:$LIB_DIR/lift-util-1.1-M3.jar
CLASSPATH=$CLASSPATH:$LIB_DIR/log4j-1.2.15.jar
CLASSPATH=$CLASSPATH:$LIB_DIR/lucene-core-2.2.0.jar
CLASSPATH=$CLASSPATH:$LIB_DIR/netty-3.1.0.CR1.jar
-CLASSPATH=$CLASSPATH:$LIB_DIR/protobuf-java-2.0.3.jar
+CLASSPATH=$CLASSPATH:$LIB_DIR/providerutil.jar
+CLASSPATH=$CLASSPATH:$LIB_DIR/protobuf-java-2.1.0.jar
CLASSPATH=$CLASSPATH:$LIB_DIR/scala-library-2.7.5.jar
CLASSPATH=$CLASSPATH:$LIB_DIR/servlet-api-2.5.jar
CLASSPATH=$CLASSPATH:$LIB_DIR/slf4j-api-1.4.3.jar
diff --git a/fun-test-java/akka-fun-test-java.iml b/fun-test-java/akka-fun-test-java.iml
index 46e1b7eea9..37b3a96896 100644
--- a/fun-test-java/akka-fun-test-java.iml
+++ b/fun-test-java/akka-fun-test-java.iml
@@ -49,14 +49,15 @@
+
-
+
@@ -64,11 +65,16 @@
+
+
+
+
+
diff --git a/kernel/akka-kernel.iml b/kernel/akka-kernel.iml
index caa62dd171..b038a3bfbd 100644
--- a/kernel/akka-kernel.iml
+++ b/kernel/akka-kernel.iml
@@ -65,14 +65,16 @@
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
@@ -80,6 +82,10 @@
+
+
+
+
diff --git a/kernel/pom.xml b/kernel/pom.xml
index e1ec0f1850..0401adbe65 100644
--- a/kernel/pom.xml
+++ b/kernel/pom.xml
@@ -89,64 +89,95 @@
1.0
+
+
+ org.apache.cassandra
+ cassandra
+ 0.4.0-dev
+
+
+ com.facebook
+ thrift
+ 1.0
+
+
+ com.facebook
+ fb303
+ 1.0
+
+
+ commons-collections
+ commons-collections
+ 3.2.1
+
+
+ high-scale-lib
+ high-scale-lib
+ 1.0
+
+
+ commons-lang
+ commons-lang
+ 2.4
+
-
-
+
-
- com.sun.grizzly
- grizzly-comet-webserver
-
- 1.8.6.3
-
-
- com.sun.jersey
- jersey-server
- 1.0.3
-
-
- com.sun.jersey
- jersey-json
- 1.0.3
-
-
- javax.ws.rs
- jsr311-api
- 1.0
-
-
- com.sun.jersey.contribs
- jersey-scala
- 1.1.2-ea-SNAPSHOT
-
-
+ 1.8.6.3
+
+
+ com.sun.jersey
+ jersey-server
+ 1.0.3
+
+
+ com.sun.jersey
+ jersey-json
+ 1.0.3
+
+
+ javax.ws.rs
+ jsr311-api
+ 1.0
+
+
+ com.sun.jersey.contribs
+ jersey-scala
+ 1.1.2-ea-SNAPSHOT
+
+
-
-
- org.atmosphere
- atmosphere-core
- 0.3-SNAPSHOT
-
-
- org.atmosphere
- atmosphere-portable-runtime
- 0.3-SNAPSHOT
-
-
- org.atmosphere
- atmosphere-compat
- 0.3-SNAPSHOT
-
-
@@ -197,100 +228,100 @@
-
- src/main/scala
- src/test/scala
-
-
- org.scala-tools
- maven-scala-plugin
-
-
-
- compile
- testCompile
-
-
-
-
-
- -target:jvm-1.5
-
-
- ${scala.version}
- 1.1
-
-
-
- org.apache.maven.plugins
- maven-eclipse-plugin
-
- true
-
-
- ch.epfl.lamp.sdt.core.scalabuilder
-
-
-
-
- ch.epfl.lamp.sdt.core.scalanature
-
-
-
-
- org.eclipse.jdt.launching.JRE_CONTAINER
-
-
- ch.epfl.lamp.sdt.launching.SCALA_CONTAINER
-
-
-
-
-
- maven-antrun-plugin
-
-
- install
-
-
-
-
-
-
- run
-
-
-
-
-
-
-
- false
- src/main/resources
-
-
- false
- src/main/scala
-
- **
-
-
- **/*.scala
-
-
-
-
-
-
-
- org.scala-tools
- maven-scala-plugin
-
- 1.1
- ${scala.version}
-
-
-
-
+
+ src/main/scala
+ src/test/scala
+
+
+ org.scala-tools
+ maven-scala-plugin
+
+
+
+ compile
+ testCompile
+
+
+
+
+
+ -target:jvm-1.5
+
+
+ ${scala.version}
+ 1.1
+
+
+
+ org.apache.maven.plugins
+ maven-eclipse-plugin
+
+ true
+
+
+ ch.epfl.lamp.sdt.core.scalabuilder
+
+
+
+
+ ch.epfl.lamp.sdt.core.scalanature
+
+
+
+
+ org.eclipse.jdt.launching.JRE_CONTAINER
+
+
+ ch.epfl.lamp.sdt.launching.SCALA_CONTAINER
+
+
+
+
+
+ maven-antrun-plugin
+
+
+ install
+
+
+
+
+
+
+ run
+
+
+
+
+
+
+
+ false
+ src/main/resources
+
+
+ false
+ src/main/scala
+
+ **
+
+
+ **/*.scala
+
+
+
+
+
+
+
+ org.scala-tools
+ maven-scala-plugin
+
+ 1.1
+ ${scala.version}
+
+
+
+
diff --git a/kernel/src/main/scala/Kernel.scala b/kernel/src/main/scala/Kernel.scala
index 2bfb0df29f..78326d2dcf 100644
--- a/kernel/src/main/scala/Kernel.scala
+++ b/kernel/src/main/scala/Kernel.scala
@@ -116,7 +116,6 @@ object Kernel extends Logging {
private[akka] def startCassandra = if (config.getBool("akka.storage.cassandra.service", true)) {
System.setProperty("cassandra", "")
System.setProperty("storage-config", akka.Boot.CONFIG + "/")
- println("------------------------- " + akka.Boot.CONFIG + "/")
CassandraStorage.start
}
@@ -126,9 +125,7 @@ object Kernel extends Logging {
val scheme = uri.getScheme
if (!scheme.equalsIgnoreCase("http")) throw new IllegalArgumentException("The URI scheme, of the URI " + REST_URL + ", must be equal (ignoring case) to 'http'")
-
- val adapter = new ServletAdapter()
-
+ val adapter = new ServletAdapter
adapter.setHandleStaticResources(true)
adapter.setServletInstance(new AkkaCometServlet)
adapter.setContextPath(uri.getPath)
diff --git a/kernel/src/main/scala/jersey/AkkaServlet.scala b/kernel/src/main/scala/jersey/AkkaServlet.scala
index 9d67def133..2fb07e7b9f 100644
--- a/kernel/src/main/scala/jersey/AkkaServlet.scala
+++ b/kernel/src/main/scala/jersey/AkkaServlet.scala
@@ -8,99 +8,80 @@ import kernel.Kernel
import config.ConfiguratorRepository
import util.Logging
-import com.sun.jersey.api.core.{DefaultResourceConfig, ResourceConfig,ClasspathResourceConfig}
+import com.sun.jersey.api.core.ResourceConfig
import com.sun.jersey.spi.container.servlet.ServletContainer
import com.sun.jersey.spi.container.WebApplication
-import com.sun.jersey.server.impl.component.{IoCResourceFactory}
-
import javax.servlet.{ServletConfig}
-import javax.servlet.http.{HttpServletRequest,HttpServletResponse}
+import javax.servlet.http.{HttpServletRequest, HttpServletResponse}
-import org.atmosphere.cpr.{AtmosphereServlet,AtmosphereServletProcessor,AtmosphereEvent,DefaultBroadcaster}
-import org.atmosphere.cpr.AtmosphereServlet.{AtmosphereHandlerWrapper}
+import org.atmosphere.cpr.{AtmosphereServletProcessor, AtmosphereEvent}
import org.atmosphere.container.GrizzlyCometSupport
import org.atmosphere.handler.ReflectorServletProcessor
import org.atmosphere.core.{JerseyBroadcaster}
-import java.util.{HashSet, HashMap}
-import java.net.{URL,URLClassLoader}
-import java.io.{InputStream}
+import java.net.URLClassLoader
+import java.io.InputStream
import scala.collection.jcl.Conversions._
-
class AkkaServlet extends ServletContainer with AtmosphereServletProcessor with Logging {
-
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))
- 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))
+ wa.initiate(rc, new ActorComponentProviderFactory(configurators))
}
- //Borrowed from AbstractReflectorAtmosphereHandler
- override def onMessage(event : AtmosphereEvent[HttpServletRequest,HttpServletResponse]) : AtmosphereEvent[_,_] =
- {
- //log.info("onMessage: " + event.getMessage.toString)
-
- if(event.getMessage ne null)
- {
- var isUsingStream = false
- try {
- event.getResponse.getWriter
- } catch {
- case e: IllegalStateException => isUsingStream = true
- }
-
- val data = event.getMessage.toString
-
- 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
- }
- }
- else
- log.info("Null event message :/ req[ " + event.getRequest + "] res[" +event.getResponse + "]")
-
- event
- }
-
- override def onEvent(event : AtmosphereEvent[HttpServletRequest,HttpServletResponse]) : AtmosphereEvent[_,_] =
- {
- //log.info("onEvent: " + event.getMessage)
- 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 }
-
- atmosphereHandlers.put("", new AtmosphereHandlerWrapper(servlet,new JerseyBroadcaster))
-
- setCometSupport(new GrizzlyCometSupport(config))
- getCometSupport.init(sconf)
-
- servlet.init(sconf)
+ //Borrowed from AbstractReflectorAtmosphereHandler
+ override def onMessage(event: AtmosphereEvent[HttpServletRequest, HttpServletResponse]): AtmosphereEvent[_, _] = {
+ if (event.getMessage ne null) {
+ var isUsingStream = false
+ try {
+ event.getResponse.getWriter
+ } catch {
+ case e: IllegalStateException => isUsingStream = true
}
- override def loadAtmosphereDotXml(is : InputStream, urlc :URLClassLoader) = () //Hide it
+ val data = event.getMessage.toString
+ 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
+ }
+ } else log.info("Null event message :/ req[ " + event.getRequest + "] res[" + event.getResponse + "]")
+ event
+ }
+
+ override def onEvent(event: AtmosphereEvent[HttpServletRequest, HttpServletResponse]): AtmosphereEvent[_, _] = {
+ //log.info("onEvent: " + event.getMessage)
+ 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}
+
+ atmosphereHandlers.put("", new AtmosphereHandlerWrapper(servlet, new JerseyBroadcaster))
+
+ setCometSupport(new GrizzlyCometSupport(config))
+ getCometSupport.init(sconf)
+
+ servlet.init(sconf)
+ }
+
+ override def loadAtmosphereDotXml(is: InputStream, urlc: URLClassLoader) = () //Hide it
}
diff --git a/samples-java/akka-samples-java.iml b/samples-java/akka-samples-java.iml
index 0cbc7d505f..3df2c03adb 100644
--- a/samples-java/akka-samples-java.iml
+++ b/samples-java/akka-samples-java.iml
@@ -49,14 +49,16 @@
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
@@ -64,6 +66,10 @@
+
+
+
+
diff --git a/samples-scala/akka-samples-scala.iml b/samples-scala/akka-samples-scala.iml
index 13a15c04ed..856bfc3490 100644
--- a/samples-scala/akka-samples-scala.iml
+++ b/samples-scala/akka-samples-scala.iml
@@ -54,14 +54,16 @@
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
@@ -69,6 +71,10 @@
+
+
+
+
diff --git a/samples-scala/src/main/scala/SimpleService.scala b/samples-scala/src/main/scala/SimpleService.scala
index a766bccb0f..1210385562 100644
--- a/samples-scala/src/main/scala/SimpleService.scala
+++ b/samples-scala/src/main/scala/SimpleService.scala
@@ -14,20 +14,19 @@ import org.atmosphere.util.{XSSHtmlFilter}
import org.atmosphere.cpr.{BroadcastFilter}
-
class Boot {
- object factory extends SupervisorFactory {
- override def getSupervisorConfig: SupervisorConfig = {
- SupervisorConfig(
- RestartStrategy(OneForOne, 3, 100),
- Supervise(
- new Chat,
- LifeCycle(Permanent, 100))
+ object factory extends SupervisorFactory {
+ override def getSupervisorConfig: SupervisorConfig = {
+ SupervisorConfig(
+ RestartStrategy(OneForOne, 3, 100),
+ Supervise(
+ new Chat,
+ LifeCycle(Permanent, 100))
:: Nil)
- }
}
- val supervisor = factory.newSupervisor
- supervisor.startSupervisor
+ }
+ val supervisor = factory.newSupervisor
+ supervisor.startSupervisor
}
/**
@@ -39,96 +38,82 @@ class Boot {
*/
@Path("/scalacount")
class SimpleService extends Actor {
- uuid = "SimpleService"
- makeTransactionRequired
+ makeTransactionRequired
- case object Tick
- private val KEY = "COUNTER";
- private var hasStartedTicking = false;
- private val storage = TransactionalState.newPersistentMap(CassandraStorageConfig())
+ case object Tick
+ private val KEY = "COUNTER";
+ private var hasStartedTicking = false;
+ private val storage = TransactionalState.newPersistentMap(CassandraStorageConfig())
- @GET
- @Produces(Array("text/html"))
- def count() = {
- (this !! Tick).getOrElse(Error in counter)
- }
-
- override def receive: PartialFunction[Any, Unit] = {
- case Tick => if (hasStartedTicking) {
- val counter = storage.get(KEY).get.asInstanceOf[Integer].intValue
- storage.put(KEY, new Integer(counter + 1))
- reply(Tick: {counter + 1})
- } else {
- storage.put(KEY, new Integer(0))
- hasStartedTicking = true
- reply(Tick: 0)
- }
- }
-
- override protected def postRestart(reason: AnyRef, config: Option[AnyRef]) = {
- println("Restarting due to: " + reason.asInstanceOf[Exception].getMessage)
+ @GET
+ @Produces(Array("text/html"))
+ def count = (this !! Tick).getOrElse(Error in counter)
+
+ override def receive: PartialFunction[Any, Unit] = {
+ case Tick => if (hasStartedTicking) {
+ val counter = storage.get(KEY).get.asInstanceOf[Integer].intValue
+ storage.put(KEY, new Integer(counter + 1))
+ reply(Tick:{ counter + 1 })
+ } else {
+ storage.put(KEY, new Integer(0))
+ hasStartedTicking = true
+ reply(Tick: 0)
}
+ }
}
@Path("/chat")
-class Chat extends Actor with Logging{
- uuid = "Chat"
- makeTransactionRequired
+class Chat extends Actor with Logging {
+ makeTransactionRequired
- case class Chat(val who : String, val what : String,val msg : String)
+ case class Chat(val who: String, val what: String, val msg: String)
- override protected def postRestart(reason: AnyRef, config: Option[AnyRef]) = {
- println("Restarting due to: " + reason.asInstanceOf[Exception].getMessage)
- }
+ @Suspend
+ @GET
+ @Produces(Array("text/html"))
+ def suspend() = "\n"
- @Suspend
- @GET
- @Produces(Array("text/html"))
- def suspend() = "\n"
+ override def receive: PartialFunction[Any, Unit] = {
+ case Chat(who, what, msg) => {
- override def receive: PartialFunction[Any, Unit] = {
- case Chat(who,what,msg) => {
+ //log.info("Chat(" + who + ", " + what + ", " + msg + ")")
- //log.info("Chat(" + who + ", " + what + ", " + msg + ")")
-
- what match {
- case "login" => reply("System Message__"+who+" has joined.")
- case "post" => reply("" + who + "__" + msg)
- case _ => throw new WebApplicationException(422)
- }
- }
- case x => log.info("recieve unknown: " + x)
- }
-
- @Broadcast
- @Consumes(Array("application/x-www-form-urlencoded"))
- @POST
- @Produces(Array("text/html"))
- @FilterBroadcast(Array(classOf[XSSHtmlFilter],classOf[JsonpFilter]))
- def publishMessage(form: MultivaluedMap[String, String]) = (this !! Chat(form.getFirst("name"),form.getFirst("action"),form.getFirst("message"))).getOrElse("System__error")
- }
-
-
- class JsonpFilter extends BroadcastFilter[String] with Logging
- {
-
- val BEGIN_SCRIPT_TAG = "\n"
-
- def filter(m : String) = {
- var name = m
- var message = ""
-
- if (m.indexOf("__") > 0) {
- name = m.substring(0, m.indexOf("__"))
- message = m.substring(m.indexOf("__") + 2)
- }
-
- (BEGIN_SCRIPT_TAG + "window.parent.app.update({ name: \""
- + name + "\", message: \""
- + message + "\" });\n"
- + END_SCRIPT_TAG)
+ what match {
+ case "login" => reply("System Message__" + who + " has joined.")
+ case "post" => reply("" + who + "__" + msg)
+ case _ => throw new WebApplicationException(422)
}
- }
\ No newline at end of file
+ }
+ case x => log.info("recieve unknown: " + x)
+ }
+
+ @Broadcast
+ @Consumes(Array("application/x-www-form-urlencoded"))
+ @POST
+ @Produces(Array("text/html"))
+ @FilterBroadcast(Array(classOf[XSSHtmlFilter], classOf[JsonpFilter]))
+ def publishMessage(form: MultivaluedMap[String, String]) = (this !! Chat(form.getFirst("name"), form.getFirst("action"), form.getFirst("message"))).getOrElse("System__error")
+}
+
+
+class JsonpFilter extends BroadcastFilter[String] with Logging {
+ val BEGIN_SCRIPT_TAG = "\n"
+
+ def filter(m: String) = {
+ var name = m
+ var message = ""
+
+ if (m.indexOf("__") > 0) {
+ name = m.substring(0, m.indexOf("__"))
+ message = m.substring(m.indexOf("__") + 2)
+ }
+
+ (BEGIN_SCRIPT_TAG + "window.parent.app.update({ name: \""
+ + name + "\", message: \""
+ + message + "\" });\n"
+ + END_SCRIPT_TAG)
+ }
+}
\ No newline at end of file