litesoft
@ 961
litesoft / trunk / DeviceDesktopTest / src / org / litesoft / jetty / EmbeddedJetty.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 |
package org.litesoft.jetty; import org.eclipse.jetty.http.*; import org.eclipse.jetty.server.*; import org.eclipse.jetty.server.handler.*; import org.eclipse.jetty.servlet.*; import java.sql.*; import java.util.*; public final class EmbeddedJetty { private Server[] mServers; public EmbeddedJetty( PortServlets pPortServlet0, PortServlets... pPortServlets ) { List<Server> zServers = new ArrayList<>(); zServers.add( createServer( pPortServlet0 ) ); for ( PortServlets zPortServlet : pPortServlets ) { zServers.add( createServer( zPortServlet ) ); } mServers = zServers.toArray( new Server[zServers.size()] ); } private Server createServer( PortServlets pPortServlet ) { ServletHandler zServletHandler = new ServletHandler(); for ( ServletSpec zServletSpec : pPortServlet.getServletSpecs() ) { zServletHandler.addServletWithMapping( new ServletHolder( zServletSpec.getServlet() ), zServletSpec.getPathSpec() ); } ContextHandler zContextHandler = new ServletContextHandler(); zContextHandler.setMimeTypes( getMimeTypes( pPortServlet.getAdditionalMimeTypes() ) ); zContextHandler.setHandler( zServletHandler ); Server zServer = new Server( pPortServlet.getPort() ); zServer.setHandler( zContextHandler ); zServer.setStopTimeout( 1000 ); zServer.setStopAtShutdown( true ); return zServer; } protected MimeTypes getMimeTypes( String... pAdditionalMimeTypes ) { // Handle files encoded in UTF-8 MimeTypes zMimeTypes = new MimeTypes(); if ( pAdditionalMimeTypes != null ) { for ( int i = 1; i < pAdditionalMimeTypes.length; i += 2 ) { String zExtension = pAdditionalMimeTypes[i - 1]; String zType = pAdditionalMimeTypes[i]; zMimeTypes.addMimeMapping( zExtension, zType ); } } return zMimeTypes; } public int run() throws Exception { ServerKiller zKiller = new ServerKiller(); Shutdown.Instance.set( zKiller ); start(); while ( !isRunning() ) { if ( isStopped() ) { throw new Error( "Stopped on start!" ); } if ( isFailed() ) { throw new Error( "Failed on start!" ); } Thread.sleep( 50 ); } report( "running", "" ); join(); int zExitCode = zKiller.mExitCode; report( "exiting", " with: " + zExitCode ); return zExitCode; } private void start() throws Exception { for ( Server zServer : mServers ) { zServer.start(); } } private void stop() throws Exception { for ( Server zServer : mServers ) { zServer.stop(); } } private void join() throws InterruptedException { for ( Server zServer : mServers ) { zServer.join(); } } private boolean isFailed() { for ( Server zServer : mServers ) { if ( zServer.isFailed() ) { return true; } } return false; } private boolean isStopped() { for ( Server zServer : mServers ) { if ( zServer.isStopped() ) { return true; } } return false; } private boolean isRunning() { for ( Server zServer : mServers ) { if ( !zServer.isRunning() ) { return false; } } return true; } private void report( String pWhat, String pTail ) { System.out.println( "EmbeddedJetty Server " + pWhat + " @ '" + new Timestamp( System.currentTimeMillis() ) + "'" + pTail ); } private class ServerKiller implements Shutdown { private volatile int mExitCode; @Override public void request( int pExitCode ) { if ( pExitCode != 0 ) { mExitCode = pExitCode; } new Thread( new Runnable() { @Override public void run() { try { Thread.sleep( 100 ); stop(); } catch ( Exception e ) { e.printStackTrace(); } } } ).start(); } } } |
Commits for litesoft/trunk/DeviceDesktopTest/src/org/litesoft/jetty/EmbeddedJetty.java
Revision | Author | Commited | Message |
---|---|---|---|
961 Diff | GeorgeS | Fri 01 Aug, 2014 03:13:31 +0000 | Externalization Work. |
950 Diff | GeorgeS | Thu 19 Jun, 2014 17:57:04 +0000 | New Lines |
943 Diff | GeorgeS | Tue 03 Jun, 2014 04:25:50 +0000 | Extracting commonfoundation |
939 Diff | GeorgeS | Mon 02 Jun, 2014 21:30:31 +0000 | Extracting commonfoundation |
935 Diff | GeorgeS | Fri 30 May, 2014 20:28:08 +0000 | Reformatted. |
927 Diff | GeorgeS | Mon 17 Mar, 2014 03:58:40 +0000 | Template system and index.html as a resource... |
924 Diff | GeorgeS | Fri 14 Mar, 2014 22:02:56 +0000 | Drop IWS |
923 Diff | GeorgeS | Fri 21 Feb, 2014 00:03:57 +0000 | Multi-Port Jetty |
922 Diff | GeorgeS | Tue 18 Feb, 2014 16:18:01 +0000 | Mini App ready for packaging... |
920 | GeorgeS | Sun 16 Feb, 2014 19:06:51 +0000 | DDT w/ Jetty |