|
Play Framework/Scala example source code file (Execution.scala)
The Execution.scala Play Framework example source code
/*
* Copyright (C) 2009-2013 Typesafe Inc. <http://www.typesafe.com>
*/
package play.core
import scala.concurrent.ExecutionContext
import scala.concurrent.forkjoin.{ ForkJoinWorkerThread, ForkJoinPool }
import java.util.concurrent.Executors
import java.util.concurrent.atomic.AtomicInteger
import scala.concurrent.forkjoin.ForkJoinPool.ForkJoinWorkerThreadFactory
import java.util.concurrent.ExecutorService
private[play] object Execution {
def internalContext: ExecutionContext = lazyContext.get()
object Implicits {
implicit def internalContext = Execution.internalContext
}
val lazyContext = new ClosableLazy[ExecutionContext] {
protected def create() = {
class NamedFjpThread(fjp: ForkJoinPool) extends ForkJoinWorkerThread(fjp)
/**
* A named thread factory for the scala fjp as distinct from the Java one.
*/
case class NamedFjpThreadFactory(name: String) extends ForkJoinWorkerThreadFactory {
val threadNo = new AtomicInteger()
val backingThreadFactory = Executors.defaultThreadFactory()
def newThread(fjp: ForkJoinPool) = {
val thread = new NamedFjpThread(fjp)
thread.setName(name + "-" + threadNo.incrementAndGet())
thread
}
}
val numberOfThreads = play.api.Play.maybeApplication.map(_.configuration.getInt("internal-threadpool-size")).flatten
.getOrElse(Runtime.getRuntime.availableProcessors)
val service = new ForkJoinPool(
numberOfThreads,
NamedFjpThreadFactory("play-internal-execution-context"),
null,
true)
val context = ExecutionContext.fromExecutorService(service)
val close: CloseFunction = () => service.shutdown()
(context, close)
}
}
}
Other Play Framework source code examplesHere is a short list of links related to this Play Framework Execution.scala source code file: |
| ... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
Copyright 1998-2024 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse
URI on this website is
paid back to open source projects.