/** * Copyright (C) 2009 Scalable Solutions. */ package sample.scala import se.scalablesolutions.akka.state.{PersistentState, TransactionalState, CassandraStorageConfig} import se.scalablesolutions.akka.actor.{SupervisorFactory, Actor} import se.scalablesolutions.akka.config.ScalaConfig._ import se.scalablesolutions.akka.util.Logging 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.util.XSSHtmlFilter import org.atmosphere.cpr.BroadcastFilter class Boot { object factory extends SupervisorFactory { override def getSupervisorConfig: SupervisorConfig = { SupervisorConfig( RestartStrategy(OneForOne, 3, 100), Supervise( new SimpleService, LifeCycle(Permanent, 100)) :: Supervise( new Chat, LifeCycle(Permanent, 100)) :: Supervise( new PersistentSimpleService, LifeCycle(Permanent, 100)) :: Nil) } } val supervisor = factory.newSupervisor supervisor.startSupervisor } /** * Try service out by invoking (multiple times): *
* curl http://localhost:9998/scalacount ** Or browse to the URL from a web browser. */ @Path("/scalacount") class SimpleService extends Actor { makeTransactionRequired case object Tick private val KEY = "COUNTER" private var hasStartedTicking = false private val storage = TransactionalState.newMap[String, Integer] @GET @Produces(Array("text/html")) def count = (this !! Tick).getOrElse(
* curl http://localhost:9998/persistentscalacount ** Or browse to the URL from a web browser. */ @Path("/persistentscalacount") class PersistentSimpleService extends Actor { makeTransactionRequired case object Tick private val KEY = "COUNTER" private var hasStartedTicking = false private val storage = PersistentState.newMap(CassandraStorageConfig()) @GET @Produces(Array("text/html")) def count = (this !! Tick).getOrElse(