Реализация EventBus для PlayFramework 1.2.x - PullRequest
0 голосов
/ 16 февраля 2012

По мере роста моего проекта Play 1.2.x я обнаруживаю, что добавляю кое-что, когда выполняю определенные действия (сохраняющиеся объекты и т. Д.), И мой код довольно сильно перепутан.Я думаю, что лучший способ справиться с подобными вариантами использования - использовать Eventbus ... но какой?Есть

и, возможно, еще немного ....

Я видел, что Play 2.x может использовать шину событий akka 2.0... но так как плагин scala все еще использует старую версию sbt / scala, я не могу использовать Akka 2 с play 1.2.x

Я был бы рад прочитать, какие сообщения вы используетеиспользовать в ваших проектах Play.Пожалуйста, также объясните, как ваше решение обрабатывает персистентные операции, например, как использовать JPA Session от слушателя.

Спасибо, Доминик

Ответы [ 2 ]

2 голосов
/ 29 января 2013

Вы все еще хотите интегрировать AKKA с Play 1.2?Я только что завершил интеграцию с Play 1.2.5.Я посмотрел на модуль для АККА, но он был довольно устаревшим, поэтому я решил интегрировать АККА сам.

Все довольно просто, вот несколько основных шагов:

  • В вашем файле dependencies.yml включить строку

    com.typesafe.akka -> akka-actor_2.10 2.1.0 // this was the latest version at time of writing

  • выполнить из командной строки play deps , чтобы загрузить соответствующуюбиблиотеки в вашей папке lib

  • сделайте немного IDE, чтобы получить зависимости библиотек в настройках вашего каталога conf в файле reference.conf (он будет содержать информацию о конфигурации для akka при запуске) - посмотрите на: http://doc.akka.io/docs/akka/2.1.0/general/configuration.html
  • добавьте "-Dconfig.file=reference.conf" к своим параметрам виртуальной машины
  • Имейте статический класс AppContext или аналогичный для загрузки в AkkaSystem - это просто так, что вы создаете один раз и можете ссылаться из любого места.
  • Загрузите в систему AKKA:

    Config config = ConfigFactory.load();
    public static final notificationSystem = ActorSystem.create("notification", config);
    

Этого должно быть достаточно, чтобы начать, тогда вам просто нужно создать несколько актеров, чтобы выполнить вашу ставку.

У меня тоже работает JPA - если выy и доступа к вашим моделям и поисковым данным, вы получите ошибку Uninitialised Entity Manager.

Вот пример кода для актера с доступом JPA:

    @Override
    public void onReceive(Object o) throws Exception {
        if (o instanceof SomeMessageType) { // create your own serializable class to transfer message data
            SomeMessageType message = (SomeMessageType) o;
            JPAPlugin.startTx(true); // true is to start this as a readonly transaction
            // Do all the JPA goodness

            JPAPlugin.closeTx(false); // false is for rollback - I use this because I am doing a readonly transaction

        } else {
            unhandled(o);
        }
    }

Надеюсь, это поможет,Я провел несколько часов, пытаясь заставить все работать.Теперь я могу структурировать свои асинхронные задачи, а не просто выплевывать из Play Jobs.

0 голосов
/ 16 февраля 2012

Akka EventBus находится в одном файле, вы всегда можете добавить его по источнику (сохраняя заголовок, конечно): https://github.com/jboner/akka/blob/master/akka-actor/src/main/scala/akka/event/EventBus.scala

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...