Junit тестирует синглтон-актера Akka: не вызывается preStart ()

1

Я хотел бы протестировать синглтон-актера, используя java в Scala IDE-сборке Eclipse SDK (Build id: 3.0.2-vfinal-20131028-1923-Typesafe), а Akka - 2.3.1.

public class WorkerTest {

static ActorSystem system;

@BeforeClass
public static void setup() {
    system = ActorSystem.create("ClusterSystem");
}

@AfterClass
public static void teardown() {
    JavaTestKit.shutdownActorSystem(system);
    system = null;
}

@Test
public void testWorkers() throws Exception {
    new JavaTestKit(system) {{

        system.actorOf(ClusterSingletonManager.defaultProps(
                Props.create(ClassSingleton.class), "class",
                PoisonPill.getInstance(),"backend"), "classsingleton");

        ActorRef selection = system.actorOf(ClusterSingletonProxy.defaultProps("user/classsingleton/class", "backend"), "proxy");
        System.out.println(selection);
    }};
}
}

classSingleton.java:

public class ClassSingleton extends UntypedActor {

LoggingAdapter log = Logging.getLogger(getContext().system(), this);

public ClassSingleton() {
    System.out.println("Constructor is done");
}

public static Props props() {
    return Props.create(ClassOperator.class);
}

@Override
public void preStart() throws Exception {
    ActorRef selection = getSelf();
    System.out.println("ClassSingleton ActorRef...  " + selection);
}   

@Override
public void onReceive(Object message) {
}

@Override
public void postStop() throws Exception {
    System.out.println("postStop ...  ");
}   


}

Актер ClassSingleton ничего не делает, распечатка: только Actor [akka://ClusterSystem/user/proxy # -893814405], который печатается из ClusterSingletonProxy. Никаких исключений и Junit не сделано, зеленый флаг. При отладке ClassSingleton не вызывается (включая contructor и preStart()). Конечно, это я, но в чем ошибка? Еще более запутанно, что тот же класс ClassSingleton ClusterSingletonManager работает отлично за пределами javatestkit и junit.

Я подозреваю, что настройка кластера может быть отчитана, поэтому я попытался включить и исключить следующий код (без эффекта). Однако я хотел бы понять, зачем нам это нужно, если нам это нужно (это из примера кода). Большое спасибо за вашу помощь.

Address clusterAddress = Cluster.get(system).selfAddress();
Cluster.get(system).join(clusterAddress);
Теги:
junit
akka

1 ответ

2
Лучший ответ

Стандартное поведение шаблона прокси-сервера заключается в том, чтобы найти самый старый узел и развернуть "настоящего" актера, а актеры-посредники запускаются на всех узлах. Я подозреваю, что конфигурация кластера не была завершена, и поэтому ваш актер никогда не начинал.

Метод join делает узел членом кластера. Поэтому, если никто не присоединяется к кластеру, актер с прокси не может быть создан.

Вопрос в том, что ваши файлы конфигурации, которые читаются во время теста junit, имеют всю информацию для создания кластера? Семенной-узлы? Установлен ли порт таким же, как у семенного узла?

  • 0
    Не удалось, я проверил конфигурацию, порт и т. Д. Я подписался на события кластерного домена, нет событий, нет тупиков, однако без JUnit все в порядке. Я признателен, если кто-нибудь может дать мне рабочий пример junit (с конфигом).
  • 0
    Обновление: я могу настроить простых актеров, отправлять и обрабатывать сообщения, другие по-прежнему не удается.
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню