Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    primarykey
    data
    text
    <p>Action composition is not sufficient to do the job, but Action composition + Future, or Action composition + Actors are good ways to achieve this.</p> <p><strong>Action Composition + Future</strong></p> <p>Generate your Response, launch your logging/processing in an <strong>async</strong> context and, in parallel, send the result.</p> <pre class="lang-scala prettyprint-override"><code>def LoggedAction(f: Request[AnyContent] =&gt; Result) = Action { request =&gt; val result = f(request) concurrent.future(myLogAction(request, result)) result } </code></pre> <p><strong>Action composition + Actors</strong></p> <p>It's a cleaner way to achieve that. As in the previous case, generate your response, send logging/processing event to your(s) actor(s), and in parallel, send the result.</p> <pre class="lang-scala prettyprint-override"><code>import play.api._ import play.api.mvc._ import play.libs._ import akka.actor._ object Application extends Controller with Finally { def index = LoggedAction { r =&gt; Ok(views.html.index("Your new application is ready.")) } } trait Finally { self: Controller =&gt; lazy val logActor = Akka.system.actorOf(Props(new LogActor), name = "logActor") def LoggedAction(f: Request[AnyContent] =&gt; Result) = Action { request =&gt; val result = f(request) // Generate response logActor ! LogRequest(request) // Send log event to LogActor println("-&gt; now send page to client") result } case class LogRequest(request: Request[AnyContent]) class LogActor extends Actor { def receive = { case LogRequest(req) =&gt; { println(req.host) // .... } } } } // Console -&gt; now send page to client 127.0.0.1:9000 </code></pre>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. VO
      singulars
      1. This table or related slice is empty.
    2. VO
      singulars
      1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload