Play-slick com SecureSocial: Executando o IO do banco de dados em um conjunto de encadeamentos separado

Eu tenho um aplicativo Play 2.2.1 que usaplay-slick 0.5.0.8 para manter os dados em um back-end do Postgresql eSecureSocial 2.1.2 para lidar com a autorização do usuário.

Uma vez que as transações slick-play estão bloqueando, eu criei um separadoslick-context contexto de execução na minha/conf/application.conf arquivo, conforme oinstruções encontradas na Wiki do plugin:

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

Isso me permite criar uma Ação do controlador que seja executada em um contexto de execução separado e não bloqueie encadeamentos no conjunto de encadeamentos padrão. Por exemplo./app/controllers/Application.scala:

Exemplo 1 - Usando o DBAction do 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)
  }

}

Para determinadas ações do controlador, quero poder utilizar as Ações do SecureSocial (SecuredAction, UserAwareAction etc) em conjunto com o jogo-slickDBAction. Qual é a melhor maneira de combinar os dois?

Eu percebo que posso fazer algo parecido com o abaixo, mas meu entendimento é que a chamada DB não vai usar o meu separadoslick-context e, portanto, bloqueará o pool de threads padrão:

Exemplo Dois - Usando a Ação do 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)
  }

}

Estou correto em assumir que o Exemplo Dois usará / bloqueará o conjunto de encadeamentos padrão em vez de meu bloco separadoslick-context Grupo de discussão? Se assim for, há uma maneira de mudar isso?

Eu poderia obviamente contornar isso porsubindo o pool de threads padrão do Play (default-dispatcher), mas o ideal é que eu queira manter o conjunto de encadeamentos padrão bastante enxuto e executar todas as chamadas de bloqueio do banco de dados em um conjunto separado.

Assistência apreciada!

questionAnswers(1)

yourAnswerToTheQuestion