Subversion Repository Public Repository

litesoft

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
package org.litesoft.ddt;

import org.eclipse.jetty.http.MimeTypes;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.handler.ContextHandler;
import org.eclipse.jetty.servlet.ServletContextHandler;
import org.eclipse.jetty.servlet.ServletHandler;

import javax.servlet.Servlet;
import java.sql.Timestamp;

public final class EmbeddedJetty extends Server {
    public EmbeddedJetty(int port, Class<? extends Servlet> pServletClass, String pPathSpec, String... pAdditionalMimeTypes) {
        super(port);

        ServletHandler zServletHandler = new ServletHandler();
        zServletHandler.addServletWithMapping(pServletClass, pPathSpec);

        ContextHandler zContextHandler = new ServletContextHandler();
        zContextHandler.setMimeTypes(getMimeTypes(pAdditionalMimeTypes));
        zContextHandler.setHandler(zServletHandler);

        setHandler(zContextHandler);

        setStopTimeout(1000);
        setStopAtShutdown(true);
    }

    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 report(String pWhat, String pTail) {
        System.out.println("EmbeddedJetty Server " + pWhat + " @ '" + new Timestamp(System.currentTimeMillis()) + "'" + pTail);
    }

    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;
    }

    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/ddt/EmbeddedJetty.java

Diff revisions: vs.
Revision Author Commited Message
922 Diff Diff GeorgeS picture GeorgeS Tue 18 Feb, 2014 16:18:01 +0000

Mini App ready for packaging...

920 GeorgeS picture GeorgeS Sun 16 Feb, 2014 19:06:51 +0000

DDT w/ Jetty