package play.core.server
import java.lang.management.ManagementFactory
import java.util.Properties
trait ServerProcess {
def classLoader: ClassLoader
def args: Seq[String]
def properties: Properties
final def prop(name: String): Option[String] = Option(properties.getProperty(name))
def pid: Option[String]
def addShutdownHook(hook: => Unit): Unit
def exit(message: String, cause: Option[Throwable] = None, returnCode: Int = -1): Nothing
}
class RealServerProcess(val args: Seq[String]) extends ServerProcess {
def classLoader: ClassLoader = Thread.currentThread.getContextClassLoader
def properties: Properties = System.getProperties
def pid: Option[String] = {
ManagementFactory.getRuntimeMXBean.getName.split('@').headOption
}
def addShutdownHook(hook: => Unit): Unit = {
Runtime.getRuntime.addShutdownHook(new Thread {
override def run() = hook
})
}
def exit(message: String, cause: Option[Throwable] = None, returnCode: Int = -1): Nothing = {
System.err.println(message)
cause.foreach(_.printStackTrace())
System.exit(returnCode)
throw new Exception("SystemProcess.exit called")
}
}