package oncue.agent; import java.util.HashSet; import java.util.Set; import oncue.common.settings.Settings; import oncue.common.settings.SettingsProvider; import akka.actor.Actor; import akka.actor.ActorSystem; import akka.actor.Props; import akka.actor.UntypedActorFactory; import akka.kernel.Bootable; import com.typesafe.config.Config; import com.typesafe.config.ConfigFactory; public class OnCueAgent implements Bootable { public static void main(String[] args) { new OnCueAgent().startup(); } private ActorSystem system; @Override public void shutdown() { system.shutdown(); } @SuppressWarnings("serial") @Override public void startup() { Config config = ConfigFactory.load(); system = ActorSystem.create("oncue-agent", config.getConfig("oncue").withFallback(config)); final Settings settings = SettingsProvider.SettingsProvider.get(system); final Set<String> workers = new HashSet<String>(config.getStringList("oncue.agent.workers")); // Fail fast if worker classes can't be instantiated system.actorOf(new Props(new UntypedActorFactory() { @Override public Actor create() throws Exception { return (Actor) Class.forName(settings.AGENT_CLASS).getConstructor(Set.class) .newInstance(workers); } }), settings.AGENT_NAME); } }