随着我的Play 1.2.x项目的增长,我发现自己在这里添加了一些东西 在做某些事情(持久对象等)时,我的代码变得非常混乱。 我认为处理这类用例的最佳方法是使用Eventbus ..但是哪一个? 那里有
可能还有一些......
我已经看到Play 2.x能够使用akka 2.0事件总线......但由于scala插件仍在使用旧的sbt / scala版本,我无法使用Akka 2播放1.2.x
我很高兴看到您在Play项目中使用的消息总线。 还请解释您的解决方案如何处理持久性操作,例如如何从侦听器使用JPA Session。
谢谢, 多米尼克
答案 0 :(得分:2)
你还在考虑将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
从命令行执行播放代码,将相关库下载到您的lib文件夹中
"-Dconfig.file=reference.conf"
添加到您的VM选项使用以下命令加载AKKA系统:
Config config = ConfigFactory.load();
public static final notificationSystem = ActorSystem.create("notification", config);
这应该足以让你跑步,然后你只需创建一些演员来进行竞价。
我也有JPA工作 - 如果您尝试访问模型和查找数据,最终会出现未初始化的实体管理器错误。
以下是具有JPA访问权限的actor的一些示例代码:
@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。
答案 1 :(得分:0)
Akka EventBus只在一个文件中,您可以随时按来源添加(当然保留标题):https://github.com/jboner/akka/blob/master/akka-actor/src/main/scala/akka/event/EventBus.scala