/* * Copyright (c) 2011-2015 Marat Gubaidullin. * * This file is part of HYBRIDBPM. * * Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy of * the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under * the License. * */ package com.hybridbpm.server; import com.hybridbpm.rest.AccessFilter; import com.hybridbpm.core.HybridbpmCore; import com.hybridbpm.rest.HybridbpmRestApplication; import com.hybridbpm.rest.RestConstant; import com.vaadin.server.VaadinServlet; import io.undertow.Handlers; import io.undertow.Undertow; import io.undertow.server.handlers.PathHandler; import io.undertow.server.handlers.resource.ClassPathResourceManager; import io.undertow.servlet.ServletExtension; import static io.undertow.servlet.Servlets.defaultContainer; import static io.undertow.servlet.Servlets.deployment; import io.undertow.servlet.api.DeploymentInfo; import io.undertow.servlet.api.DeploymentManager; import io.undertow.servlet.api.ServletInfo; import io.undertow.websockets.jsr.WebSocketDeploymentInfo; import java.io.IOException; import java.util.logging.Level; import java.util.logging.Logger; import javax.servlet.ServletContext; import javax.servlet.ServletException; import org.jboss.resteasy.plugins.server.undertow.UndertowJaxrsServer; import org.jboss.resteasy.spi.ResteasyDeployment; /** * * @author Marat Gubaidullin */ public class HybridbpmServer { private static final Logger logger = Logger.getLogger(HybridbpmServer.class.getSimpleName()); private static Undertow undertow; private static UndertowJaxrsServer undertowJaxrsServer; private static final String PATH = "/hybridbpm"; private static final HybridbpmCore hybridbpmServer = new HybridbpmCore(); public static void main(String[] args) throws IOException, ClassNotFoundException { logger.info("HybridbpmServer starting"); Runtime.getRuntime().addShutdownHook(new Thread(() -> { try { logger.info("HybridbpmServer stopping"); hybridbpmServer.stop(); undertowJaxrsServer.stop(); undertow.stop(); logger.info("HybridbpmServer stopped"); } catch (Exception ex) { logger.log(Level.SEVERE, ex.getMessage(), ex); } })); try { hybridbpmServer.start(); startUndertow(); startUndertowJaxrsServer(); logger.info("HybridbpmServer started"); } catch (Exception ex) { logger.log(Level.SEVERE, ex.getMessage(), ex); } } private static void startUndertow() throws ServletException { ServletInfo servletInfo = new ServletInfo(VaadinServlet.class.getName(), VaadinServlet.class) .setAsyncSupported(true) .setLoadOnStartup(1) .addInitParam("ui", "com.hybridbpm.ui.HybridbpmUI").addInitParam("widgetset", "com.hybridbpm.ui.HybridbpmWidgetSet") .addMapping("/*").addMapping("/VAADIN"); DeploymentInfo deploymentInfo = deployment() .setClassLoader(HybridbpmServer.class.getClassLoader()) .setContextPath(PATH) .setDeploymentName("hybridbpm.war") .setDisplayName("HYBRIDBPM") .setResourceManager(new ClassPathResourceManager(HybridbpmServer.class.getClassLoader())) .addServlets(servletInfo) .addServletContextAttribute(WebSocketDeploymentInfo.ATTRIBUTE_NAME, new WebSocketDeploymentInfo()); DeploymentManager manager = defaultContainer().addDeployment(deploymentInfo); manager.deploy(); PathHandler path = Handlers.path(Handlers.redirect(PATH)).addPrefixPath(PATH, manager.start()); Undertow.Builder builder = Undertow.builder().addHttpListener(8080, "0.0.0.0").setHandler(path); undertow = builder.build(); undertow.start(); logger.info("HybridbpmServer UI started"); } private static void startUndertowJaxrsServer() { Undertow.Builder builderJaxrs = Undertow.builder().addHttpListener(8081, "0.0.0.0"); undertowJaxrsServer = new UndertowJaxrsServer().start(builderJaxrs); ServletExtension servletExtension = (DeploymentInfo deploymentInfo, ServletContext servletContext) -> { servletContext .addFilter("MyFilter1", AccessFilter.class) .addMappingForServletNames(null, false, "ResteasyServlet"); servletContext .addFilter("MyFilter2", AccessFilter.class) .addMappingForUrlPatterns(null, false, "/"); }; ResteasyDeployment resteasyDeployment = new ResteasyDeployment(); resteasyDeployment.setApplicationClass(HybridbpmRestApplication.class.getName()); DeploymentInfo deploymentInfo = undertowJaxrsServer.undertowDeployment(resteasyDeployment); deploymentInfo.setClassLoader(Thread.currentThread().getContextClassLoader()); deploymentInfo.setContextPath(RestConstant.PATH_API); deploymentInfo.setDeploymentName("HybridbpmRestApplication"); deploymentInfo.addServletExtension(servletExtension); undertowJaxrsServer.deploy(deploymentInfo); logger.info("HybridbpmServer REST started"); } }