EventBus Implementation for PlayFramework 1.2.x



随着我的Play 1.2.x项目的发展,我发现自己在这里添加了一些东西在做某些事情(持久化对象等)时,我的代码会变得很混乱。我认为处理这类用例的最好方法是使用Eventbus。。但是哪一个?有

  • http://code.google.com/p/simpleeventbus/
  • 来自谷歌的Guavahttp://guava-libraries.googlecode.com/svn/trunk/javadoc/com/google/common/eventbus/package-summary.html

可能还有更多。。。。

我已经看到Play 2.x能够使用akka 2.0事件总线。。。但是由于scala插件仍然使用旧的sbt/scala版本,我无法使用带有play 1.2.x 的Akka 2

我很乐意阅读您在游戏项目中使用的消息总线。还请解释您的解决方案如何处理持久性操作,例如如何能够从侦听器使用JPA会话。

谢谢,Dominik

您是否仍在考虑将AKKA与Play 1.2集成?我刚刚完成了与Play 1.2.5的集成。我看了AKKA的模块,但它已经过时了,所以我决定自己集成AKKA。

这一切都很简单,这里有一些基本步骤:

  • 在dependencies.yml文件中包括行

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

  • 从命令行执行playdeps将相关库下载到您的lib文件夹中

  • 做一些IDE方面的改进,以获得中的库依赖项在conf目录中设置一个reference.conf文件(该文件将在启动时包含akka的配置信息)-查看:http://doc.akka.io/docs/akka/2.1.0/general/configuration.html
  • "-Dconfig.file=reference.conf"添加到VM选项
  • 在AkkaSystem中加载一个AppContext或类似的静态类——这只是为了让你只创建一次,就可以从任何地方引用
  • 为AKKA系统加载:

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

这应该足以开始运行,然后你只需要创建一些演员来执行你的命令。

我还使用了JPA——如果你试图访问你的模型和查找数据,你最终会出现一个未初始化的实体管理器错误。

以下是具有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吐出来。

Akka EventBus只在一个文件中,您可以随时通过源代码添加它(当然保留标头):https://github.com/jboner/akka/blob/master/akka-actor/src/main/scala/akka/event/EventBus.scala

相关内容

  • 没有找到相关文章

最新更新