@Override public ComputeEngineContainer start(Props props) { this.level1 = new ComponentContainer(); this.level1 .add(props.rawProperties()) .add(LEVEL_1_COMPONENTS) .add(toArray(CorePropertyDefinitions.all())) .add(toArray(CePropertyDefinitions.all())); configureFromModules(this.level1); this.level1.startComponents(); ComponentContainer level2 = this.level1.createChild(); level2.add(LEVEL_2_COMPONENTS); configureFromModules(level2); level2.startComponents(); ComponentContainer level3 = level2.createChild(); level3.add(LEVEL_3_COMPONENTS); configureFromModules(level3); level3.startComponents(); this.level4 = level3.createChild(); this.level4.add(LEVEL_4_COMPONENTS); configureFromModules(this.level4); ServerExtensionInstaller extensionInstaller = this.level4.getComponentByType(ServerExtensionInstaller.class); extensionInstaller.installExtensions(this.level4); this.level4.startComponents(); startupTasks(); return this; }