/** * Copyright (C) 2014 cherimojava (http://github.com/cherimojava/orchidae) 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.github.cherimojava.orchidae; import java.io.File; import java.io.IOException; import java.net.InetSocketAddress; import javax.servlet.MultipartConfigElement; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.eclipse.jetty.server.Server; import org.eclipse.jetty.server.session.SessionHandler; import org.eclipse.jetty.servlet.ServletContextHandler; import org.eclipse.jetty.servlet.ServletHolder; import org.springframework.core.io.FileSystemResource; import org.springframework.web.context.ContextLoaderListener; import org.springframework.web.context.support.AnnotationConfigWebApplicationContext; import org.springframework.web.servlet.DispatcherServlet; import com.github.cherimojava.orchidae.config.Markers; import com.github.cherimojava.orchidae.config.RootConfig; import com.github.cherimojava.orchidae.config.ServletListener; import com.github.cherimojava.orchidae.config.WebMvcConfig; /** * Starts orchidae, pretty simple not much to see * * @author philnate */ public class Starter { public static Markers markers; private static final int DEFAULT_PORT = 8082; private static Logger LOG = LogManager.getLogger(); public static void main( String[] args ) throws Exception { new Starter( getPort( args ) ); } private AnnotationConfigWebApplicationContext getContext() { AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext(); // set the Production profile to be active context.getEnvironment().setDefaultProfiles( RootConfig.PROFILE_PRODUCTION ); context.register( RootConfig.class, WebMvcConfig.class ); context.registerShutdownHook(); return context; } private ServletContextHandler getServletContextHandler( AnnotationConfigWebApplicationContext context ) throws IOException { ServletContextHandler servletContext = new ServletContextHandler(); servletContext.addEventListener( new ContextLoaderListener( context ) ); ServletHolder holder = new ServletHolder( "default", new DispatcherServlet( context ) ); holder.getRegistration() .setMultipartConfig( new MultipartConfigElement( "./tmp", 20000000, 20000000, 200000 ) ); servletContext.addServlet( holder, "/*" ); servletContext.addEventListener( new ServletListener( context ) ); servletContext.setResourceBase( new FileSystemResource( new File( "./" ) ).toString() ); servletContext.setSessionHandler( new SessionHandler() ); return servletContext; } private Starter( int port ) throws Exception { Server server = new Server( InetSocketAddress.createUnresolved( "localhost", port ) ); server.setHandler( getServletContextHandler( getContext() ) ); server.start(); server.join(); } private static int getPort( String[] args ) { if ( args.length > 0 ) { try { return Integer.valueOf( args[0] ); } catch ( NumberFormatException e ) { LOG.info( "Could not parse port falling back to default", e ); } } return DEFAULT_PORT; } }