/** * Copyright (c) 2013-2016, The SeedStack authors <http://seedstack.org> * * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ package org.seedstack.seed.undertow.internal; import io.nuun.kernel.api.Kernel; import io.nuun.kernel.api.Plugin; import io.undertow.Undertow; import io.undertow.servlet.api.DeploymentManager; import io.undertow.servlet.spec.ServletContextImpl; import org.seedstack.coffig.Coffig; import org.seedstack.seed.core.Seed; import org.seedstack.seed.spi.SeedLauncher; import org.seedstack.seed.web.WebConfig; import org.seedstack.seed.web.internal.ServletContextUtils; import org.seedstack.seed.SeedException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class UndertowLauncher implements SeedLauncher { private static final Logger LOGGER = LoggerFactory.getLogger(UndertowLauncher.class); private DeploymentManager deploymentManager; private Undertow undertow; @Override public void launch(String[] args) throws Exception { Coffig baseConfiguration = Seed.baseConfiguration(); DeploymentManagerFactory factory = new DeploymentManagerFactory(); deploymentManager = factory.createDeploymentManager(baseConfiguration); deploymentManager.deploy(); ServletContextImpl servletContext = deploymentManager.getDeployment().getServletContext(); Kernel kernel = ServletContextUtils.getKernel(servletContext); UndertowPlugin undertowPlugin = getUndertowPlugin(kernel); WebConfig.ServerConfig serverConfig = undertowPlugin.getServerConfig(); try { undertow = new ServerFactory().createServer( deploymentManager, serverConfig, undertowPlugin.getUndertowConfig(), undertowPlugin.getSslProvider() ); undertow.start(); LOGGER.info("Undertow Web server listening on {}:{}", serverConfig.getHost(), serverConfig.getPort()); } catch (SeedException e) { throw e; } catch (Exception e) { throw SeedException.wrap(e, UndertowErrorCode.UNEXPECTED_EXCEPTION); } } private UndertowPlugin getUndertowPlugin(Kernel kernel) { UndertowPlugin undertowPlugin = null; Plugin plugin = kernel.plugins().get(UndertowPlugin.NAME); if (plugin instanceof UndertowPlugin) { undertowPlugin = (UndertowPlugin) plugin; } if (undertowPlugin == null) { throw SeedException.createNew(UndertowErrorCode.MISSING_UNDERTOW_PLUGIN); } return undertowPlugin; } @Override public void shutdown() throws Exception { try { if (undertow != null) { undertow.stop(); LOGGER.info("Undertow Web server stopped"); } if (deploymentManager != null) { // should done at last for diagnostic purpose deploymentManager.undeploy(); } } catch (Exception e) { throw SeedException.wrap(e, UndertowErrorCode.UNEXPECTED_EXCEPTION); } } }