2015-12-15 28 views
2

我正在加熱到斯卡拉,但我對阿卡仍然很陌生。這似乎是一個相當直接的問題,但我無法找到關於這種特定方法的任何信息,這告訴我可能是我的想法有問題,或者已經有一個非常標準的方法來做到這一點。在斯卡拉Akka演員中安置DAO層

我發現的所有解決方案都是圍繞着一個Akka actor調用預構建的服務層來處理數據庫邏輯。

我的問題是讓DAO本身成爲一個持續的演員是否可行。沿着此線的東西:上述

class UserDAO extends Actor { 
    val db = actorSystem.actorSelection("/repository/dao") 

    def receive = { 
     case GetUserById(id) => sender ! (db ? RunStoredProc(SpGetUserById(id))) 
     ... 
    } 
} 

的純屬假設僞碼和所有的方法(即RunStoredProc)旨在僅作爲示例。我對這種系統的設計決定背後的理智更加好奇。 UserDAODAOdb)參與者將是持久的和無狀態的(儘管DAO將持有數據庫連接的句柄)。我所堅持的意思是說,他們不會被實際稱爲他們的演員實例化。

我在這裏重新發明了車輪嗎?

回答

2

您的方法似乎完全可行。這將允許您在一個地方處理所有基於連接的邏輯。

需要考慮的一點是,如果您的DAO是同步的,則對於所有DOA調用使用單個actor將意味着一次只能執行一個DB調用。這可能會也可能不會是理想的。