【问题标题】:EventBus Implementation for PlayFramework 1.2.xPlayFramework 1.2.x 的 EventBus 实现
【发布时间】:2012-02-16 16:51:09
【问题描述】:

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

可能还有更多......

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

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

谢谢, 多米尼克

【问题讨论】:

    标签: events event-handling playframework persistence publish-subscribe


    【解决方案1】:

    您还在考虑将 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

    • 从命令行执行play deps将相关库下载到你的lib文件夹中

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

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

    这应该足够运行了,然后你只需要创建一些 Actor 来做你的竞标。

    我还让 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。

    【讨论】:

    • 谢谢!我现在没有在做一个游戏项目,但会在下一个项目中考虑这个!再次感谢!
    • 当你考虑在你的下一个项目上玩时,看看github.com/matthewk/Play-nicewith-AKKA 我已经创建了一个包含所有内容的骨架项目。
    【解决方案2】:

    Akka EventBus 仅在一个文件中,您始终可以按源添加它(当然保留标题):https://github.com/jboner/akka/blob/master/akka-actor/src/main/scala/akka/event/EventBus.scala

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-04-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-31
      • 2017-09-10
      • 2021-07-25
      • 1970-01-01
      相关资源
      最近更新 更多