Play-slick z SecureSocial: Uruchamianie DB IO w oddzielnej puli wątków

Mam aplikację Play 2.2.1play-slick 0.5.0.8 utrzymywać dane w zapleczu Postgresql iSecureSocial 2.1.2 do obsługi autoryzacji użytkownika.

Ponieważ transakcje play-slick są blokowane, stworzyłem osobnąslick-context kontekst wykonania w moim/conf/application.conf plik, jak winstrukcje znalezione w Wiki wtyczki:

play {
  akka {
    actor {
      slick-context = {
        fork-join-executor {
          parallelism-min = 300
          parallelism-max = 300
        }
      }
    }
  }
}

Dzięki temu mogę utworzyć akcję kontrolera, która działa w osobnym kontekście wykonywania i nie blokuje wątków w domyślnej puli wątków. Na przykład./app/controllers/Application.scala:

Przykład pierwszy - Korzystanie z DBAction na play-slick:

import play.api.db.slick._
object Application extends Controller{ 

  // this controller Action won't block threads in the default pool since DBAction uses my separate slick-context execution context
  def recipes = DBAction { implicit rs =>
    val recipes  = Query(Recipes).list
    Ok(recipes.mkString)
  }

}

W przypadku niektórych działań kontrolera chcę mieć możliwość korzystania z akcji SecureSocial (SecuredAction, UserAwareAction itp.) w połączeniu z play-slickamiDBAction. Jaki jest najlepszy sposób na połączenie tych dwóch?

Zdaję sobie sprawę, że mogę zrobić coś takiego jak poniżej, ale rozumiem, że połączenie DB nie będzie korzystać z mojego oddzielnegoslick-context i dlatego zablokuje domyślną pulę wątków:

Przykład drugi - Korzystanie z akcji SecureSocial:

import play.api.db.slick._
import securesocial.core._
object Application extends Controller{ 

  // changing from a DBAction to a SecuredAction so that I can use SS's goodies
  def recipes = SecuredAction { implicit request =>
    val recipes  =  DB.withSession { implicit session:Session => Query(Recipes).list } // i'm guessing this WILL BLOCK the default thread pool since it isn't using my separate slick-context execution context??
    Ok(recipes.mkString)
  }

}

Czy poprawne jest założenie, że przykład drugi użyje / zablokuje domyślną pulę wątków zamiast mojej oddzielnejslick-context pula wątków? Jeśli tak, czy istnieje sposób, aby to zmienić?

Oczywiście mogłem to obejśćpodbijanie domyślnej puli wątków Play (default-dispatcher), ale idealnie chciałbym, aby domyślna pula wątków była dość uboga i uruchamiał wszystkie blokujące wywołania DB w osobnej puli.

Pomoc mile widziana!

questionAnswers(1)

yourAnswerToTheQuestion