0

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

,可能更多一些的....

我见过玩2.X是能够使用akka 2.0事件总线...但由于scala插件仍在使用旧的sbt/scala版本,因此我无法使用Akka 2播放1.2.x

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

感谢, 多米尼克

回答

2

你还在寻找与游戏整合AKKA 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

  • 在命令行中执行发挥的DEP将相关库下载到您的lib文件夹中

  • do一些IDE善良得到 设置库依赖于你的conf目录下的一个文件reference.conf(这将包含在启动阿卡配置信息) - 查看: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的工作 - 如果您尝试访问您的模型和查找数据,最终会出现未初始化的实体管理器错误。

下面是使用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); 
     } 
    } 

希望这有助于。我花了好几个小时试图让一切工作。我现在能够构建我的异步任务,而不仅仅是吐出玩作业。

+0

谢谢!我现在不是在做一个游戏项目,但会考虑下一个项目!再次感谢! – 2013-01-29 19:57:01

+0

当你确实考虑在你的下一个项目上播放看看https://github.com/matthewk/Play-nicewith-AKKA我已经创建了一个框架项目。 – 2013-01-30 13:13:14

+0

谢谢,请看看。 – 2013-01-30 16:36:48

相关问题