diff --git a/core/src/main/scala/kafka/Kafka.scala b/core/src/main/scala/kafka/Kafka.scala index 988014a..45445d5 100644 --- a/core/src/main/scala/kafka/Kafka.scala +++ b/core/src/main/scala/kafka/Kafka.scala @@ -21,18 +21,32 @@ package kafka import metrics.KafkaMetricsReporter import server.{KafkaConfig, KafkaServerStartable, KafkaServer} import utils.{Utils, Logging} +import java.util.Properties -object Kafka extends Logging { +/* +* +* The Resource Negotiator trait is to allow for various resource negotiators to be able to start Kafka Server +* +*/ +sealed abstract trait ResourceNegotiator { + def serverConfig(args: Array[String]): KafkaConfig +} - def main(args: Array[String]): Unit = { - if (args.length != 1) { - println("USAGE: java [options] %s server.properties".format(classOf[KafkaServer].getSimpleName())) - System.exit(1) - } - - try { - val props = Utils.loadProps(args(0)) - val serverConfig = new KafkaConfig(props) +/* +* +* Java Jar is an implementation to allow Kafka to start as a java -jar from the shell +* +*/ +case class JavaJAR() extends ResourceNegotiator { + def serverConfig(args: Array[String]): KafkaConfig = { + val props = Utils.loadProps(args(0)) + new KafkaConfig(props) + } +} + +object Kafka extends JavaJAR with Logging { + + def launch(serverConfig: KafkaConfig) = { KafkaMetricsReporter.startReporters(serverConfig.props) val kafkaServerStartble = new KafkaServerStartable(serverConfig) @@ -44,7 +58,19 @@ object Kafka extends Logging { }) kafkaServerStartble.startup - kafkaServerStartble.awaitShutdown + kafkaServerStartble.awaitShutdown + kafkaServerStartble + } + + def main(args: Array[String]): Unit = { + try { + if (args.length != 1) { + println("USAGE: java [options] %s server.properties".format(classOf[KafkaServer].getSimpleName())) + System.exit(1) + } + val ressourceNegotiator = new JavaJAR() + + launch(ressourceNegotiator.serverConfig(args)) } catch { case e: Throwable => fatal(e)