X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fsal-clustering-commons%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fcluster%2Fcommon%2Factor%2FAbstractUntypedActor.java;h=d40ec55b94ac96caa4dcd0a7f01de091e3685f74;hp=3a4419610a155d4cc6c853709cf0b8e1296ac544;hb=ed0c0135e2563fbbfcec41975338cece15c62cc2;hpb=7f16cee52c607089a05d19f14a33c28a3e82df97 diff --git a/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/common/actor/AbstractUntypedActor.java b/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/common/actor/AbstractUntypedActor.java index 3a4419610a..d40ec55b94 100644 --- a/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/common/actor/AbstractUntypedActor.java +++ b/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/common/actor/AbstractUntypedActor.java @@ -10,10 +10,11 @@ package org.opendaylight.controller.cluster.common.actor; import akka.actor.ActorRef; import akka.actor.UntypedActor; +import org.eclipse.jdt.annotation.NonNull; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -public abstract class AbstractUntypedActor extends UntypedActor { +public abstract class AbstractUntypedActor extends UntypedActor implements ExecuteInSelfActor { // The member name should be lower case but it's referenced in many subclasses. Suppressing the CS warning for now. @SuppressWarnings("checkstyle:MemberName") protected final Logger LOG = LoggerFactory.getLogger(getClass()); @@ -24,8 +25,18 @@ public abstract class AbstractUntypedActor extends UntypedActor { } @Override - public final void onReceive(Object message) throws Exception { - handleReceive(message); + public final void executeInSelf(@NonNull final Runnable runnable) { + final ExecuteInSelfMessage message = new ExecuteInSelfMessage(runnable); + self().tell(message, ActorRef.noSender()); + } + + @Override + public final void onReceive(final Object message) throws Exception { + if (message instanceof ExecuteInSelfMessage) { + ((ExecuteInSelfMessage) message).run(); + } else { + handleReceive(message); + } } /** @@ -37,16 +48,16 @@ public abstract class AbstractUntypedActor extends UntypedActor { */ protected abstract void handleReceive(Object message) throws Exception; - protected final void ignoreMessage(Object message) { + protected final void ignoreMessage(final Object message) { LOG.debug("Ignoring unhandled message {}", message); } - protected final void unknownMessage(Object message) { + protected final void unknownMessage(final Object message) { LOG.debug("Received unhandled message {}", message); unhandled(message); } - protected boolean isValidSender(ActorRef sender) { + protected boolean isValidSender(final ActorRef sender) { // If the caller passes in a null sender (ActorRef.noSender()), akka translates that to the // deadLetters actor. return sender != null && !getContext().system().deadLetters().equals(sender);