Anorm フレームワークを使用した Scala の Play 2.0 は、データベースとやり取りするための 2 つの方法を提供します。
def withConnection[A](name: String)(block: Connection => A): A = {
val connection = new AutoCleanConnection(getConnection(name))
try {
block(connection)
} finally {
connection.close()
}
}
/**
* Execute a block of code, in the scope of a JDBC transaction.
* The connection and all created statements are automatically released.
* The transaction is automatically committed, unless an exception occurs.
*
* @param name The datasource name.
* @param block Code block to execute.
*/
def withTransaction[A](name: String)(block: Connection => A): A = {
withConnection(name) { connection =>
try {
connection.setAutoCommit(false)
val r = block(connection)
connection.commit()
r
} catch {
case e => connection.rollback(); throw e
}
}
}
withConnection が呼び出されるたびに接続を取得して閉じることは明らかです。
両方のメソッドが毎回接続を作成して閉じるのはなぜですか? それは高価なプロセスではありませんか?