Adding docs

This commit is contained in:
Viktor Klang 2009-12-26 15:09:44 +01:00
parent 3233da1e44
commit c97c887791
7 changed files with 41 additions and 7 deletions

View file

@ -12,6 +12,14 @@ import scala.reflect.{BeanProperty}
sealed trait ClusterCometMessageType
case class ClusterCometBroadcast(val name : String, val msg : AnyRef) extends ClusterCometMessageType
/**
* Enables explicit clustering of Atmosphere (Comet) resources
* Annotate the endpoint which has the @Broadcast annotation with
* @org.atmosphere.annotation.Cluster(Array(classOf[AkkClusterBroadcastFilter])){ name = "someUniqueName" }
* that's all folks!
* Note: In the future, clustering comet will be transparent
*/
class AkkaClusterBroadcastFilter extends Actor with ClusterBroadcastFilter[AnyRef] {
@BeanProperty var clusterName = ""
@BeanProperty var broadcaster : Broadcaster = null

View file

@ -46,11 +46,19 @@ class AkkaCometServlet extends org.atmosphere.cpr.AtmosphereServlet with Logging
}
}
/**
* We override this to avoid Atmosphere looking for it's atmosphere.xml file
* Instead we specify what semantics we want in code.
*/
override def loadConfiguration(sc: ServletConfig) {
config = new AtmosphereConfig { supportSession = false }
atmosphereHandlers.put("/*", new AtmosphereServlet.AtmosphereHandlerWrapper(servlet, new JerseyBroadcaster))
}
/**
* This method is overridden because Akka Kernel is bundles with Grizzly, so if we deploy the Kernel in another container,
* we need to handle that.
*/
override def createCometSupportResolver() : CometSupportResolver = {
import org.scala_tools.javautils.Imports._

View file

@ -12,7 +12,9 @@ import javax.ws.rs.core.UriBuilder
import se.scalablesolutions.akka.actor.BootableActorLoaderService
import se.scalablesolutions.akka.util.{Bootable,Logging}
/**
* Handles the Akka Comet Support (load/unload)
*/
trait BootableCometActorService extends Bootable with Logging {
self : BootableActorLoaderService =>
@ -40,7 +42,7 @@ trait BootableCometActorService extends Bootable with 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 [%s] and context path [%s]", adapter.getRootFolder, adapter.getContextPath)

View file

@ -8,6 +8,9 @@ import java.io.File
import java.net.URLClassLoader
import se.scalablesolutions.akka.util.{Bootable,Logging}
/**
* Handles all modules in the deploy directory (load and unload)
*/
trait BootableActorLoaderService extends Bootable with Logging {
import Config._

View file

@ -7,6 +7,11 @@ package se.scalablesolutions.akka.remote
import se.scalablesolutions.akka.actor.BootableActorLoaderService
import se.scalablesolutions.akka.util.{Bootable,Logging}
/**
* This bundle/service is responsible for booting up and shutting down the remote actors facility
* It's used in Kernel
*/
trait BootableRemoteActorService extends Bootable with Logging {
self : BootableActorLoaderService =>
@ -19,15 +24,19 @@ trait BootableRemoteActorService extends Bootable with Logging {
def startRemoteService = remoteServerThread.start
abstract override def onLoad = {
super.onLoad
if(config.getBool("akka.remote.server.service", true)) startRemoteService
super.onLoad //Make sure the actors facility is loaded before we load the remote service
if(config.getBool("akka.remote.server.service", true)){
log.info("Initializing Remote Actors Service...")
startRemoteService
log.info("Remote Actors Service initialized!")
}
}
abstract override def onUnload = {
super.onUnload
if (remoteServerThread.isAlive) {
log.info("Shutting down remote service")
log.info("Shutting down Remote Actors Service")
RemoteNode.shutdown
remoteServerThread.join(1000)
}

View file

@ -151,7 +151,7 @@ class JGroupsClusterActor extends ClusterActor {
def receive = {
case Zombie(x) => { //Ask the presumed zombie for papers and prematurely treat it as dead
log debug ("Zombie: %s", x)
log debug ("Killing Zombie Node: %s", x)
broadcast(x :: Nil, PapersPlease)
remotes = remotes - x
}

View file

@ -26,6 +26,7 @@ object Kernel extends Logging {
private val startTime = System.currentTimeMillis
//Bundles is what modules are to be loaded with the Kernel, this uses Jonas' AOP style mixin pattern
object Bundles extends BootableActorLoaderService with BootableRemoteActorService with BootableCometActorService
/**
@ -48,7 +49,9 @@ object Kernel extends Logging {
}
}
// TODO document Kernel.shutdown
/**
* Shuts down the kernel, unloads all of the bundles
*/
def shutdown = synchronized {
if (hasBooted) {
log.info("Shutting down Akka...")
@ -57,6 +60,7 @@ object Kernel extends Logging {
}
}
//FIXME This is only being called by a test
def startRemoteService = Bundles.startRemoteService
private def printBanner = {