[undertow-dev] scala, activate, nio, async jdbc, future, threads
Laurent Bedubourg
laurent at labe.me
Fri Dec 12 16:44:27 EST 2014
- Previous message: [undertow-dev] scala, activate, nio, async jdbc, future, threads
- Next message: [undertow-dev] scala, activate, nio, async jdbc, future, threads
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
Ok, I think my mail could be reduced to :
Is it possible possible to transfer the HttpServerExchange responsibility to
another thread ?
Regards
Laurent
On Fri Dec 12 2014 at 7:11:01 PM Laurent Bedubourg <laurent at labe.me> wrote:
> Hello,
>
> I am evaluating Undertow and trying to fit an async database (with scala,
> Activate and https://github.com/mauricio/postgresql-async which use netty
> and nio).
>
> The good news is that it more or less works.
>
> My main concern is that the database system create threads using scala
> futures and that I am forced to "Await" for the result of my Futures to
> send the result to the HttpServerExchange.
>
> I am forced to dispath() the request because Await locks the current
> thread and I shouldn't lock the IO thread from my Handler, should I?
>
> It made me wondering : is is really a good idea to use futures + Await
> with undertow and more generaly nio?
>
> If the thread pool is limited and I lock threads, even if the database
> driver is async and uses nio, am I bitting my own leg?
>
> Thanks for any input you can give me and sorry if it's too scala related :)
>
> Regards
> Laurent
>
> PS: Here's the handleRequest I am using to test this, any comment or help
> welcome too since I am discovering the API.
>
> def handleRequest(x:io.undertow.server.HttpServerExchange){
> if (x.isInIoThread()){
> x.dispatch(this)
> return
> }
> // useful or not? no change
> // x.startBlocking()
>
> // Ok, we are in worker thread we can work a little with database
> // val f = asyncTransactionalChain { implicit context =>
> // for (
> // a <- asyncTransactional { new AMember("aaa") };
> // b <- asyncById[AMember](a.id)
> // ) yield b
> // }
>
> // Simulate database work with just a future
> val f = future {
> Some(1)
> }(scala.concurrent.ExecutionContext.Implicits.global)
>
> // send string to xchange
> def sendReply(str:String){
> x.getResponseHeaders().put(io.undertow.util.Headers.CONTENT_TYPE,
> "text/plain")
> x.getResponseSender().send(str)
> // x.endExchange()
> }
>
> // // this fails
> // f.onSuccess {
> // case Some(result) => sendReply(result.toString)
> // }(scala.concurrent.ExecutionContext.Implicits.global)
>
> // // this works
> val result = Await.result(f, Duration(1000, MILLISECONDS))
> sendReply(result.toString)
> }
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/undertow-dev/attachments/20141212/5d8cc314/attachment.html
- Previous message: [undertow-dev] scala, activate, nio, async jdbc, future, threads
- Next message: [undertow-dev] scala, activate, nio, async jdbc, future, threads
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
More information about the undertow-dev
mailing list