私のアプリケーションには、ApplicationUsers
変更可能なメンバーを持たないクラスがあります。インスタンスの作成時に、ユーザー データベース全体 (比較的小さい) を不変のコレクションに読み込みます。データをクエリするためのメソッドがいくつかあります。
私は現在、新しいユーザーを作成する (または属性の一部を変更する) 必要があるという問題に直面しています。私の現在の考えは、高レベルで次のような Akka アクターを使用することです。
class UserActor extends Actor{
var users = new ApplicationUsers
def receive = {
case GetUsers => sender ! users
case SomeMutableOperation => {
PerformTheChangeOnTheDatabase() // does not alter users (which is immutable)
users = new ApplicationUsers // reads the database from scratch into a new immutable instance
}
}
}
これは安全ですか?私の推論は、以前のインスタンスを使用する他のスレッドusers
によって が変更されるたびに、古いバージョンへのハンドルが既にあり、影響を受けるべきではないということです。また、新しいインスタンスが安全に構築されるまで、リクエストは処理されません。SomeMutableOperation
users
GetUsers
不足しているものはありますか?私の構造は安全ですか?
更新: おそらくこれを行うにはエージェントを使用する必要がありますが、疑問は残ります: 上記は安全ですか?