public Container buildContainer(String containerClass) { notNull(containerClass, "Container type " + Arrays.deepToString(TestatooContainer.values()) + " or container class"); Class<Container> clazz = null; for (TestatooContainer container : TestatooContainer.values()) { if (container.name().equalsIgnoreCase(containerClass)) { clazz = loadServerClass(container.serverClass()); break; } } if (clazz == null) clazz = loadServerClass(containerClass); try { return clazz.getConstructor(ContainerConfiguration.class).newInstance(ContainerConfiguration.from(this)); } catch (InvocationTargetException e) { if (e.getTargetException() instanceof RuntimeException) throw (RuntimeException) e.getTargetException(); else throw new RuntimeException(e.getTargetException().getMessage(), e.getTargetException()); } catch (Exception e) { throw new IllegalArgumentException("Cannot instanciate class [" + clazz + "]. Ensure there is a public constructor having a parameter of type " + ContainerConfiguration.class.getName(), e); } }
public static void main(String... args) throws Exception { CommandLineParser parser = new GnuParser(); CommandLine line = parser.parse(options, args); if (line.hasOption("help") || !line.hasOption(CONTAINER.getName())) { HelpFormatter formatter = new HelpFormatter(); formatter.printHelp(ContainerRunner.class.getSimpleName(), options); return; } // Set default values // And override by system properties. This way, we can start ContainerRunner with specific options such as -DjettyConf=.. -DjettyEnv=... ContainerConfiguration settings = ContainerConfiguration.from(System.getProperties()); // Then parse command line for (Option option : line.getOptions()) { settings.set(TestatooProperties.from(option.getOpt()), line.getOptionValue(option.getOpt())); } Container container = settings.buildContainer(line.getOptionValue(CONTAINER.getName())); container.start(); } }