Play Framework: Reactive and Non-Blocking Database Access


If we want to make a web application request as Reactive and Non-Blocking Database  Access than we need to do the following things:

  • Returning futures

While we were using the Action.apply builder methods to build actions until now,    to send an asynchronous result, we need to use the Action.async buider method:

import play.api.libs.concurrent.Execution.Implicits.defaultContext

def list =Action.async {
    val futureData = scala.concurrent.Future{ DATABASE_CALL}
    futureData.map(data => Ok("Got Data: "+ data))
}
  • Handling time-outs properly

It is often useful to handle time-outs properly, to avoid having the web browser block and wait if something goes wrong. You can easily compose a promise with a promise timeout to handle these cases:

import play.api.libs.concurrent.Execution.Implicits.defaultContext
import play.api.libs.concurrent.Promise
import scala.concurrent.duration._

def list = Action.async {
     val futureData = scala.concurrent.Future{ DATABASE_CALL}
     val timeoutFuture = Promise.timeout("Oops got error",10.second)
     Future.firstCompletedOf(Seq(futureData, timeoutFuture)).map {
        case data: CASE_CLASS => Ok("Got data: "+ data)
        case error: String=> InternalServerError(error)
     }
}

Check the live application and the code base on bellow links:

  • The live application is currently hosted at :

http://employee-self-service.herokuapp.com/

  • The Github code for the project is at :

https://github.com/knoldus/Employee-Self-Service

For more information please check the given link :

http://blog.knoldus.com/2014/03/31/employee-self-service-2/

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s