X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fsal-clustering-commons%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fcluster%2Fcommon%2Factor%2FAbstractUntypedActor.java;h=6af52fbd04e2af4a60ce5865e46a0b51570347bd;hb=3bdf1493c0ce4218a1a3e26cdf7c5c4af1d2aeeb;hp=3a4419610a155d4cc6c853709cf0b8e1296ac544;hpb=4e696d9795fe7eef40369c05c340d137394126f3;p=controller.git 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..6af52fbd04 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 @@ -8,13 +8,16 @@ package org.opendaylight.controller.cluster.common.actor; +import akka.actor.AbstractActor; import akka.actor.ActorRef; -import akka.actor.UntypedActor; +import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; +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 AbstractActor implements ExecuteInSelfActor { // The member name should be lower case but it's referenced in many subclasses. Suppressing the CS warning for now. + @SuppressFBWarnings("SLF4J_LOGGER_SHOULD_BE_PRIVATE") @SuppressWarnings("checkstyle:MemberName") protected final Logger LOG = LoggerFactory.getLogger(getClass()); @@ -24,8 +27,17 @@ 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 Receive createReceive() { + return receiveBuilder() + .match(ExecuteInSelfMessage.class, ExecuteInSelfMessage::run) + .matchAny(this::handleReceive) + .build(); } /** @@ -33,20 +45,19 @@ public abstract class AbstractUntypedActor extends UntypedActor { * it should call {@link #ignoreMessage(Object)} or {@link #unknownMessage(Object)}. * * @param message the incoming message - * @throws Exception on message failure */ - protected abstract void handleReceive(Object message) throws Exception; + protected abstract void handleReceive(Object message); - 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);