diff --git a/akka-actor/src/main/scala/akka/dispatch/Mailbox.scala b/akka-actor/src/main/scala/akka/dispatch/Mailbox.scala index 9940b16aa3..d9951c61e8 100644 --- a/akka-actor/src/main/scala/akka/dispatch/Mailbox.scala +++ b/akka-actor/src/main/scala/akka/dispatch/Mailbox.scala @@ -374,11 +374,23 @@ case class BoundedPriorityMailbox( final val cmp: Comparator[Envelope], final va } } +/** + * Mailbox factory that creates instantiates the implementation from a + * fully qualified class name. The implementation class must have + * a constructor with a [[akka.actor.ActorContext]] parameter. + * E.g. + *
+ * class MyMailbox(owner: ActorContext) extends CustomMailbox(owner)
+ * with QueueBasedMessageQueue with UnboundedMessageQueueSemantics with DefaultSystemMessageQueue {
+ * val queue = new ConcurrentLinkedQueue[Envelope]()
+ * }
+ *
+ */
class CustomMailboxType(mailboxFQN: String) extends MailboxType {
override def create(receiver: ActorContext): Mailbox = {
val constructorSignature = Array[Class[_]](classOf[ActorContext])
- ReflectiveAccess.createInstance[AnyRef](mailboxClass, constructorSignature, Array[AnyRef](receiver)) match {
+ ReflectiveAccess.createInstance[AnyRef](mailboxFQN, constructorSignature, Array[AnyRef](receiver)) match {
case Right(instance) ⇒ instance.asInstanceOf[Mailbox]
case Left(exception) ⇒
val cause = exception match {
@@ -386,19 +398,9 @@ class CustomMailboxType(mailboxFQN: String) extends MailboxType {
case _ ⇒ exception
}
throw new IllegalArgumentException("Cannot instantiate mailbox [%s] due to: %s".
- format(mailboxClass.getName, cause.toString))
+ format(mailboxFQN, cause.toString))
}
}
- private def mailboxClass: Class[_] = ReflectiveAccess.getClassFor(mailboxFQN, classOf[ActorContext].getClassLoader) match {
- case Right(clazz) ⇒ clazz
- case Left(exception) ⇒
- val cause = exception match {
- case i: InvocationTargetException ⇒ i.getTargetException
- case _ ⇒ exception
- }
- throw new IllegalArgumentException("Cannot find mailbox class [%s] due to: %s".
- format(mailboxFQN, cause.toString))
- }
}
diff --git a/akka-docs/modules/code/akka/docs/actor/mailbox/DurableMailboxDocSpec.scala b/akka-docs/modules/code/akka/docs/actor/mailbox/DurableMailboxDocSpec.scala
index 7140da03bb..863c48a15b 100644
--- a/akka-docs/modules/code/akka/docs/actor/mailbox/DurableMailboxDocSpec.scala
+++ b/akka-docs/modules/code/akka/docs/actor/mailbox/DurableMailboxDocSpec.scala
@@ -8,10 +8,6 @@ import akka.actor.Props
//#imports
-//#imports2
-import akka.actor.mailbox.FileDurableMailboxType
-//#imports2
-
import org.scalatest.{ BeforeAndAfterAll, WordSpec }
import org.scalatest.matchers.MustMatchers
import akka.testkit.AkkaSpec
@@ -42,13 +38,4 @@ class DurableMailboxDocSpec extends AkkaSpec(DurableMailboxDocSpec.config) {
//#dispatcher-config-use
}
- "programatically define dispatcher with durable mailbox" in {
- //#prog-define-dispatcher
- val dispatcher = system.dispatcherFactory.newDispatcher(
- "my-dispatcher", throughput = 1, mailboxType = FileDurableMailboxType).build
- val myActor = system.actorOf(Props[MyActor].withDispatcher(dispatcher))
- //#prog-define-dispatcher
- myActor ! "hello"
- }
-
}
diff --git a/akka-docs/modules/code/akka/docs/actor/mailbox/DurableMailboxDocTestBase.java b/akka-docs/modules/code/akka/docs/actor/mailbox/DurableMailboxDocTestBase.java
index 02066d8673..8b904f5ef6 100644
--- a/akka-docs/modules/code/akka/docs/actor/mailbox/DurableMailboxDocTestBase.java
+++ b/akka-docs/modules/code/akka/docs/actor/mailbox/DurableMailboxDocTestBase.java
@@ -11,16 +11,11 @@ import akka.actor.Props;
//#imports
-//#imports2
-import akka.actor.mailbox.DurableMailboxType;
-//#imports2
-
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import akka.testkit.AkkaSpec;
-import akka.docs.dispatcher.DispatcherDocSpec;
import com.typesafe.config.ConfigFactory;
import akka.actor.ActorRef;
import akka.actor.ActorSystem;
@@ -55,22 +50,9 @@ public class DurableMailboxDocTestBase {
myActor.tell("test");
}
- @Test
- public void programaticallyDefinedDispatcher() {
- //#prog-define-dispatcher
- MessageDispatcher dispatcher = system.dispatcherFactory()
- .newDispatcher("my-dispatcher", 1, DurableMailboxType.fileDurableMailboxType()).build();
- ActorRef myActor = system.actorOf(new Props().withDispatcher(dispatcher).withCreator(new UntypedActorFactory() {
- public UntypedActor create() {
- return new MyUntypedActor();
- }
- }), "myactor");
- //#prog-define-dispatcher
- myActor.tell("test");
- }
-
public static class MyUntypedActor extends UntypedActor {
public void onReceive(Object message) {
}
}
+
}
diff --git a/akka-durable-mailboxes/akka-beanstalk-mailbox/src/test/scala/akka/actor/mailbox/BeanstalkBasedMailboxSpec.scala b/akka-durable-mailboxes/akka-beanstalk-mailbox/src/test/scala/akka/actor/mailbox/BeanstalkBasedMailboxSpec.scala
index 88b1bf85ae..f011352d2b 100644
--- a/akka-durable-mailboxes/akka-beanstalk-mailbox/src/test/scala/akka/actor/mailbox/BeanstalkBasedMailboxSpec.scala
+++ b/akka-durable-mailboxes/akka-beanstalk-mailbox/src/test/scala/akka/actor/mailbox/BeanstalkBasedMailboxSpec.scala
@@ -1,4 +1,7 @@
package akka.actor.mailbox
+import akka.dispatch.CustomMailboxType
+
@org.junit.runner.RunWith(classOf[org.scalatest.junit.JUnitRunner])
-class BeanstalkBasedMailboxSpec extends DurableMailboxSpec("Beanstalkd", BeanstalkDurableMailboxType)
+class BeanstalkBasedMailboxSpec extends DurableMailboxSpec("Beanstalkd",
+ new CustomMailboxType("akka.actor.mailbox.BeanstalkBasedMailbox"))
diff --git a/akka-durable-mailboxes/akka-file-mailbox/src/test/scala/akka/actor/mailbox/FileBasedMailboxSpec.scala b/akka-durable-mailboxes/akka-file-mailbox/src/test/scala/akka/actor/mailbox/FileBasedMailboxSpec.scala
index d1a36d14eb..43b8b2c048 100644
--- a/akka-durable-mailboxes/akka-file-mailbox/src/test/scala/akka/actor/mailbox/FileBasedMailboxSpec.scala
+++ b/akka-durable-mailboxes/akka-file-mailbox/src/test/scala/akka/actor/mailbox/FileBasedMailboxSpec.scala
@@ -1,9 +1,11 @@
package akka.actor.mailbox
import org.apache.commons.io.FileUtils
+import akka.dispatch.CustomMailboxType
@org.junit.runner.RunWith(classOf[org.scalatest.junit.JUnitRunner])
-class FileBasedMailboxSpec extends DurableMailboxSpec("File", FileDurableMailboxType) {
+class FileBasedMailboxSpec extends DurableMailboxSpec("File",
+ new CustomMailboxType("akka.actor.mailbox.FileBasedMailbox")) {
def clean {
val queuePath = FileBasedMailboxExtension(system).QueuePath
diff --git a/akka-durable-mailboxes/akka-mailboxes-common/src/main/scala/akka/actor/mailbox/DurableMailbox.scala b/akka-durable-mailboxes/akka-mailboxes-common/src/main/scala/akka/actor/mailbox/DurableMailbox.scala
index aa27a731e5..f94dfe83ca 100644
--- a/akka-durable-mailboxes/akka-mailboxes-common/src/main/scala/akka/actor/mailbox/DurableMailbox.scala
+++ b/akka-durable-mailboxes/akka-mailboxes-common/src/main/scala/akka/actor/mailbox/DurableMailbox.scala
@@ -74,23 +74,3 @@ trait DurableMessageSerialization {
}
-case object RedisDurableMailboxType extends CustomMailboxType("akka.actor.mailbox.RedisBasedMailbox")
-case object MongoDurableMailboxType extends CustomMailboxType("akka.actor.mailbox.MongoBasedMailbox")
-case object BeanstalkDurableMailboxType extends CustomMailboxType("akka.actor.mailbox.BeanstalkBasedMailbox")
-case object FileDurableMailboxType extends CustomMailboxType("akka.actor.mailbox.FileBasedMailbox")
-case object ZooKeeperDurableMailboxType extends CustomMailboxType("akka.actor.mailbox.ZooKeeperBasedMailbox")
-
-/**
- * Java API for the mailbox types. Usage:
- *
- * MessageDispatcher dispatcher = system.dispatcherFactory()
- * .newDispatcher("my-dispatcher", 1, DurableMailboxType.redisDurableMailboxType()).build();
- *
- */
-object DurableMailboxType {
- def redisDurableMailboxType(): MailboxType = RedisDurableMailboxType
- def mongoDurableMailboxType(): MailboxType = MongoDurableMailboxType
- def beanstalkDurableMailboxType(): MailboxType = BeanstalkDurableMailboxType
- def fileDurableMailboxType(): MailboxType = FileDurableMailboxType
- def zooKeeperDurableMailboxType(): MailboxType = ZooKeeperDurableMailboxType
-}
diff --git a/akka-durable-mailboxes/akka-mongo-mailbox/src/test/scala/akka/actor/mailbox/MongoBasedMailboxSpec.scala b/akka-durable-mailboxes/akka-mongo-mailbox/src/test/scala/akka/actor/mailbox/MongoBasedMailboxSpec.scala
index ec13cff17f..4746a47242 100644
--- a/akka-durable-mailboxes/akka-mongo-mailbox/src/test/scala/akka/actor/mailbox/MongoBasedMailboxSpec.scala
+++ b/akka-durable-mailboxes/akka-mongo-mailbox/src/test/scala/akka/actor/mailbox/MongoBasedMailboxSpec.scala
@@ -1,18 +1,19 @@
package akka.actor.mailbox
import java.util.concurrent.TimeUnit
-
import org.scalatest.WordSpec
import org.scalatest.matchers.MustMatchers
import org.scalatest.{ BeforeAndAfterEach, BeforeAndAfterAll }
-
import akka.actor._
import akka.actor.Actor._
import java.util.concurrent.CountDownLatch
import akka.dispatch.MessageDispatcher
+import akka.dispatch.CustomMailboxType
@org.junit.runner.RunWith(classOf[org.scalatest.junit.JUnitRunner])
-class MongoBasedMailboxSpec extends DurableMailboxSpec("mongodb", MongoDurableMailboxType) {
+class MongoBasedMailboxSpec extends DurableMailboxSpec("mongodb",
+ new CustomMailboxType("akka.actor.mailbox.MongoBasedMailbox")) {
+
import org.apache.log4j.{ Logger, Level }
import com.mongodb.async._
diff --git a/akka-durable-mailboxes/akka-redis-mailbox/src/test/scala/akka/actor/mailbox/RedisBasedMailboxSpec.scala b/akka-durable-mailboxes/akka-redis-mailbox/src/test/scala/akka/actor/mailbox/RedisBasedMailboxSpec.scala
index 8b8ea6d611..ecb700d383 100644
--- a/akka-durable-mailboxes/akka-redis-mailbox/src/test/scala/akka/actor/mailbox/RedisBasedMailboxSpec.scala
+++ b/akka-durable-mailboxes/akka-redis-mailbox/src/test/scala/akka/actor/mailbox/RedisBasedMailboxSpec.scala
@@ -1,4 +1,6 @@
package akka.actor.mailbox
+import akka.dispatch.CustomMailboxType
@org.junit.runner.RunWith(classOf[org.scalatest.junit.JUnitRunner])
-class RedisBasedMailboxSpec extends DurableMailboxSpec("Redis", RedisDurableMailboxType)
+class RedisBasedMailboxSpec extends DurableMailboxSpec("Redis",
+ new CustomMailboxType("akka.actor.mailbox.RedisBasedMailbox"))
diff --git a/akka-durable-mailboxes/akka-zookeeper-mailbox/src/test/scala/akka/actor/mailbox/ZooKeeperBasedMailboxSpec.scala b/akka-durable-mailboxes/akka-zookeeper-mailbox/src/test/scala/akka/actor/mailbox/ZooKeeperBasedMailboxSpec.scala
index 3cdc734830..888c46c1ea 100644
--- a/akka-durable-mailboxes/akka-zookeeper-mailbox/src/test/scala/akka/actor/mailbox/ZooKeeperBasedMailboxSpec.scala
+++ b/akka-durable-mailboxes/akka-zookeeper-mailbox/src/test/scala/akka/actor/mailbox/ZooKeeperBasedMailboxSpec.scala
@@ -4,10 +4,13 @@ import akka.actor.{ Actor, LocalActorRef }
import akka.cluster.zookeeper._
import org.I0Itec.zkclient._
import akka.dispatch.MessageDispatcher
+import akka.dispatch.CustomMailboxType
import akka.actor.ActorRef
@org.junit.runner.RunWith(classOf[org.scalatest.junit.JUnitRunner])
-class ZooKeeperBasedMailboxSpec extends DurableMailboxSpec("ZooKeeper", ZooKeeperDurableMailboxType) {
+class ZooKeeperBasedMailboxSpec extends DurableMailboxSpec("ZooKeeper",
+ new CustomMailboxType("akka.actor.mailbox.ZooKeeperBasedMailbox")) {
+
val dataPath = "_akka_cluster/data"
val logPath = "_akka_cluster/log"