pekko/kernel/src/main/scala/Boot.scala
2009-03-12 00:33:18 +01:00

47 lines
1.4 KiB
Scala

/**
* Copyright (C) 2009 Scalable Solutions.
*/
package com.scalablesolutions.akka
import com.scalablesolutions.akka.kernel.Logging
import java.io.File
import java.lang.reflect.Method
import java.net.{URL, URLClassLoader}
/**
* @author <a href="http://jonasboner.com">Jonas Bon&#233;r</a>
*/
class Boot extends Logging {
/**
* Assumes that the AKKA_HOME directory is set with /config, /classes and /lib beneath it holding files and jars.
* Thus:
* $AKKA_HOME
* $AKKA_HOME/bin
* $AKKA_HOME/classes
* $AKKA_HOME/lib
* $AKKA_HOME/config
*/
def main(args: Array[String]) = {
val HOME = System.getProperty("AKKA_HOME", "..")
val CLASSES = HOME + "/classes"
val LIB = HOME + "/lib"
val CONFIG = HOME + "/config"
log.info("Bootstrapping Akka server from AKKA_HOME=" + HOME)
val libs = for (f <- new File(LIB).listFiles().toArray.toList.asInstanceOf[List[File]]) yield f.toURL
val urls = new File(CLASSES).toURL :: libs
val loader = new URLClassLoader(urls.toArray, ClassLoader.getSystemClassLoader.getParent)
val mainClass = loader.loadClass(args(0))
val mainMethod = mainClass.getMethod("main", Array(args.getClass): _*)
Thread.currentThread.setContextClassLoader(loader)
val serverArgs = new Array[String](args.length - 1)
System.arraycopy(args, 1, serverArgs, 0, serverArgs.length)
mainMethod.invoke(null, Array[Object](serverArgs): _*)
}
}