renamed ..comet.AkkaCometServlet to ..comet.AkkaServlet

This commit is contained in:
Jonas Bonér 2009-12-26 17:19:35 +01:00
parent 600565773d
commit ed233e4318
6 changed files with 69 additions and 65 deletions

View file

@ -25,6 +25,11 @@
<groupId>${project.groupId}</groupId> <groupId>${project.groupId}</groupId>
<version>${project.version}</version> <version>${project.version}</version>
</dependency> </dependency>
<!--dependency>
<groupId>com.rabbitmq</groupId>
<artifactId>amqp-client</artifactId>
<version>1.7.0</version>
</dependency-->
<dependency> <dependency>
<groupId>com.rabbitmq</groupId> <groupId>com.rabbitmq</groupId>
<artifactId>rabbitmq-client</artifactId> <artifactId>rabbitmq-client</artifactId>

View file

@ -4,27 +4,26 @@
package se.scalablesolutions.akka.comet package se.scalablesolutions.akka.comet
import se.scalablesolutions.akka.rest.AkkaServlet
import se.scalablesolutions.akka.util.Logging import se.scalablesolutions.akka.util.Logging
import se.scalablesolutions.akka.rest.{AkkaServlet => RestServlet}
import java.util.{List => JList} import java.util.{List => JList}
import javax.servlet.ServletConfig
import javax.servlet.{ServletConfig}
import javax.servlet.http.{HttpServletRequest, HttpServletResponse} import javax.servlet.http.{HttpServletRequest, HttpServletResponse}
import org.atmosphere.container.{GrizzlyCometSupport}
import org.atmosphere.container.GrizzlyCometSupport
import org.atmosphere.cpr.{AtmosphereServlet, AtmosphereServletProcessor, AtmosphereResource, AtmosphereResourceEvent,CometSupport,CometSupportResolver,DefaultCometSupportResolver} import org.atmosphere.cpr.{AtmosphereServlet, AtmosphereServletProcessor, AtmosphereResource, AtmosphereResourceEvent,CometSupport,CometSupportResolver,DefaultCometSupportResolver}
import org.atmosphere.handler.{ReflectorServletProcessor, AbstractReflectorAtmosphereHandler} import org.atmosphere.handler.{ReflectorServletProcessor, AbstractReflectorAtmosphereHandler}
import org.atmosphere.jersey.JerseyBroadcaster import org.atmosphere.jersey.JerseyBroadcaster
/** /**
* Akka's Comet servlet to be used when deploying actors exposed as Comet (and REST) services in a * Akka's Comet servlet to be used when deploying actors exposed as Comet (and REST) services in a
* standard servlet container, e.g. not using the Akka Kernel. * standard servlet container, e.g. not using the Akka Kernel.
* <p/> * <p/>
* Used by the Akka Kernel to bootstrap REST and Comet. * Used by the Akka Kernel to bootstrap REST and Comet.
*/ */
class AkkaCometServlet extends org.atmosphere.cpr.AtmosphereServlet with Logging { class AkkaServlet extends org.atmosphere.cpr.AtmosphereServlet with Logging {
val servlet = new AkkaServlet with AtmosphereServletProcessor { val servlet = new RestServlet with AtmosphereServletProcessor {
//Delegate to implement the behavior for AtmosphereHandler //Delegate to implement the behavior for AtmosphereHandler
private val handler = new AbstractReflectorAtmosphereHandler { private val handler = new AbstractReflectorAtmosphereHandler {
@ -74,10 +73,8 @@ class AkkaCometServlet extends org.atmosphere.cpr.AtmosphereServlet with Logging
override def resolve(useNativeIfPossible : Boolean, useBlockingAsDefault : Boolean) : CS = { override def resolve(useNativeIfPossible : Boolean, useBlockingAsDefault : Boolean) : CS = {
val predef = config.getInitParameter("cometSupport") val predef = config.getInitParameter("cometSupport")
if(testClassExists(predef)) if (testClassExists(predef)) newCometSupport(predef)
newCometSupport(predef) else super.resolve(useNativeIfPossible, useBlockingAsDefault)
else
super.resolve(useNativeIfPossible, useBlockingAsDefault)
} }
} }
} }

View file

@ -39,7 +39,7 @@ trait BootableCometActorService extends Bootable with Logging {
val adapter = new ServletAdapter val adapter = new ServletAdapter
adapter.setHandleStaticResources(true) adapter.setHandleStaticResources(true)
adapter.setServletInstance(new AkkaCometServlet) adapter.setServletInstance(new AkkaServlet)
adapter.setContextPath(uri.getPath) adapter.setContextPath(uri.getPath)
//Using autodetection for now //Using autodetection for now
//adapter.addInitParameter("cometSupport", "org.atmosphere.container.GrizzlyCometSupport") //adapter.addInitParameter("cometSupport", "org.atmosphere.container.GrizzlyCometSupport")

View file

@ -10,7 +10,7 @@ import se.scalablesolutions.akka.remote.{RemoteServer, RemoteClient}
import se.scalablesolutions.akka.dispatch.Dispatchers import se.scalablesolutions.akka.dispatch.Dispatchers
object Global { object Global {
var oneWay = "nada" var oneWay = "nada"
var remoteReply = "nada" var remoteReply = "nada"
} }
class RemoteActorSpecActorUnidirectional extends Actor { class RemoteActorSpecActorUnidirectional extends Actor {
@ -31,22 +31,22 @@ class RemoteActorSpecActorBidirectional extends Actor {
} }
} }
case class Send(actor:Actor) case class Send(actor: Actor)
class RemoteActorSpecActorAsyncSender extends Actor { class RemoteActorSpecActorAsyncSender extends Actor {
def receive = { def receive = {
case Send(actor:Actor) => case Send(actor: Actor) =>
actor ! "Hello" actor ! "Hello"
case "World" => case "World" =>
Global.remoteReply = "replied" Global.remoteReply = "replied"
} }
def send(actor:Actor) { def send(actor: Actor) {
this ! Send(actor) this ! Send(actor)
} }
} }
class RemoteActorTest extends JUnitSuite { class RemoteActorTest extends JUnitSuite {
import Actor.Sender.Self import Actor.Sender.Self
akka.Config.config akka.Config.config
@ -54,17 +54,17 @@ class RemoteActorTest extends JUnitSuite {
val HOSTNAME = "localhost" val HOSTNAME = "localhost"
val PORT1 = 9990 val PORT1 = 9990
val PORT2 = 9991 val PORT2 = 9991
var s1:RemoteServer = null var s1: RemoteServer = null
var s2:RemoteServer = null var s2: RemoteServer = null
@Before @Before
def init() { def init() {
s1 = new RemoteServer() s1 = new RemoteServer()
s2 = new RemoteServer() s2 = new RemoteServer()
s1.start(HOSTNAME, PORT1) s1.start(HOSTNAME, PORT1)
s2.start(HOSTNAME, PORT2) s2.start(HOSTNAME, PORT2)
Thread.sleep(1000) Thread.sleep(1000)
} }
private val unit = TimeUnit.MILLISECONDS private val unit = TimeUnit.MILLISECONDS
@ -73,10 +73,10 @@ class RemoteActorTest extends JUnitSuite {
// finished // finished
@After @After
def finished() { def finished() {
s1.shutdown s1.shutdown
s2.shutdown s2.shutdown
RemoteClient.shutdownAll RemoteClient.shutdownAll
Thread.sleep(1000) Thread.sleep(1000)
} }
@Test @Test
@ -85,7 +85,7 @@ class RemoteActorTest extends JUnitSuite {
actor.makeRemote(HOSTNAME, PORT1) actor.makeRemote(HOSTNAME, PORT1)
actor.start actor.start
val result = actor ! "OneWay" val result = actor ! "OneWay"
Thread.sleep(100) Thread.sleep(1000)
assert("received" === Global.oneWay) assert("received" === Global.oneWay)
actor.stop actor.stop
} }
@ -107,35 +107,35 @@ class RemoteActorTest extends JUnitSuite {
actor.makeRemote(HOSTNAME, PORT2) actor.makeRemote(HOSTNAME, PORT2)
actor.start actor.start
val sender = new RemoteActorSpecActorAsyncSender val sender = new RemoteActorSpecActorAsyncSender
sender.setContactAddress(HOSTNAME, PORT1) sender.setContactAddress(HOSTNAME, PORT1)
sender.start sender.start
sender.send(actor) sender.send(actor)
Thread.sleep(500) Thread.sleep(1000)
assert("replied" === Global.remoteReply) assert("replied" === Global.remoteReply)
actor.stop actor.stop
} }
/* /*
This test does not throw an exception since the This test does not throw an exception since the
_contactAddress is always defined via the _contactAddress is always defined via the
global configuration if not set explicitly. global configuration if not set explicitly.
@Test
def shouldSendRemoteReplyException = {
implicit val timeout = 500000000L
val actor = new RemoteActorSpecActorBidirectional
actor.makeRemote(HOSTNAME, PORT1)
actor.start
val sender = new RemoteActorSpecActorAsyncSender @Test
sender.start def shouldSendRemoteReplyException = {
sender.send(actor) implicit val timeout = 500000000L
Thread.sleep(500) val actor = new RemoteActorSpecActorBidirectional
assert("exception" === Global.remoteReply) actor.makeRemote(HOSTNAME, PORT1)
actor.stop actor.start
}
*/ val sender = new RemoteActorSpecActorAsyncSender
sender.start
sender.send(actor)
Thread.sleep(500)
assert("exception" === Global.remoteReply)
actor.stop
}
*/
@Test @Test
def shouldSendReceiveException = { def shouldSendReceiveException = {
implicit val timeout = 500000000L implicit val timeout = 500000000L

View file

@ -76,9 +76,9 @@ public class InMemNestedStateTest extends TestCase {
nested.setVectorState("init"); // set init state nested.setVectorState("init"); // set init state
Thread.sleep(100); Thread.sleep(100);
stateful.success("testShouldNotRollbackStateForStatefulServerInCaseOfSuccess", "new state", nested); // transactionrequired stateful.success("testShouldNotRollbackStateForStatefulServerInCaseOfSuccess", "new state", nested); // transactionrequired
Thread.sleep(1000); Thread.sleep(100);
assertEquals("new state", stateful.getVectorState()); assertEquals("new state", stateful.getVectorState());
Thread.sleep(1000); Thread.sleep(100);
assertEquals("new state", nested.getVectorState()); assertEquals("new state", nested.getVectorState());
} }

View file

@ -5,11 +5,11 @@
package se.scalablesolutions.akka package se.scalablesolutions.akka
import se.scalablesolutions.akka.comet.BootableCometActorService import se.scalablesolutions.akka.comet.BootableCometActorService
import se.scalablesolutions.akka.remote.{RemoteNode,BootableRemoteActorService} import se.scalablesolutions.akka.remote.BootableRemoteActorService
import se.scalablesolutions.akka.actor.BootableActorLoaderService
import se.scalablesolutions.akka.util.Logging import se.scalablesolutions.akka.util.Logging
import se.scalablesolutions.akka.actor.{ActorRegistry,BootableActorLoaderService}
import javax.servlet.{ServletContextListener,ServletContextEvent} import javax.servlet.{ServletContextListener, ServletContextEvent}
object Main { object Main {
def main(args: Array[String]) = Kernel.boot def main(args: Array[String]) = Kernel.boot
@ -25,13 +25,15 @@ object Kernel extends Logging {
@volatile private var hasBooted = false @volatile private var hasBooted = false
private val startTime = System.currentTimeMillis private val startTime = System.currentTimeMillis
//Bundles is what modules are to be loaded with the Kernel, this uses Jonas' AOP style mixin pattern /**
* 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 object Bundles extends BootableActorLoaderService with BootableRemoteActorService with BootableCometActorService
/** /**
* Boots up the Kernel. * Boots up the Kernel.
*/ */
def boot: Unit = boot(true) def boot: Unit = boot(true)
/** /**