in jdbc/src/main/scala/org/apache/pekko/projection/jdbc/internal/JdbcSessionUtil.scala [36:62]
def withSession[S <: JdbcSession, Result](jdbcSessionFactory: () => S)(func: S => Result)(
implicit ec: ExecutionContext): Future[Result] = {
// all blocking calls here
Future {
val session = jdbcSessionFactory()
try {
val result = func(session)
session.commit()
result
} catch {
case NonFatal(ex) =>
try {
session.rollback()
} catch {
case NonFatal(_) => // the original exception is more interesting
}
throw ex
} finally {
try {
session.close()
} catch {
case NonFatal(_) => // ignored
}
}
}
}