私は次のシングルトンオブジェクトを持っていますDB接続を返すconnectという静的メソッド。古典的な同期プログラミングでは、接続の1つのインスタンスのみが必要であると信じていると理解されていますが、これは、アクター(Akka)モデルの基礎を使用するReactiveMongoドライバーの非同期モデルと矛盾しているようです。
object MyMongoDriver {
def connect(uri: String) {
val driver = new MongoDriver
val connection: Try[MongoConnection] =
MongoConnection.parseURI(uri).map {
parsedURI => driver.connection(parsedURI)
}
}
}
私には何が起こっているようですが、それはMyMongoDriverの1つのインスタンスがインスタンス化され、connectが呼び出されるたびに複数の(必要に応じて)接続が返されますか?私は「ブロッキングを導入したとは思わない、または持っている?」反応性mongoが反応性であることを考えると、私が疑う残りの非同期動作は設計によって発生し続けます。接続を処理するより良い方法はありますか?
回答:
回答№1は0に記載されているように ドキュメンテーション 「MongoDriverインスタンスはアクターシステムを管理します。接続は接続のプールを管理します。一般的に、MongoDriverまたはMongoConnectionが複数回インスタンス化されることはありません。」
回答№2の場合は0
@Singletonを使用して、Mongodbドライバーシングルトンを作成する必要があります。
例としてこのUserDAOMongoをお読みください。 https://github.com/luongbalinh/play-mongo/blob/master/app/dao/mongo/impl/UserDAOMongo.scala