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

相關問題