blob: 0423e3dc188670071825b90a427be00269e34b51 [file] [log] [blame]
/* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with this
* work for additional information regarding copyright ownership. The ASF
* licenses this file to you 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 org.apache.buildr;
import org.mortbay.jetty.Server;
import org.mortbay.jetty.Request;
import org.mortbay.jetty.Handler;
import org.mortbay.jetty.handler.AbstractHandler;
import org.mortbay.jetty.handler.ContextHandler;
import org.mortbay.jetty.handler.ContextHandlerCollection;
import org.mortbay.jetty.webapp.WebAppContext;
import org.mortbay.jetty.webapp.WebAppClassLoader;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.ServletException;
import java.io.IOException;
import java.util.HashMap;
/**
* @author Matthieu Riou <mriou at apache dot org>
*/
public class Jetty6Wrapper {
private Server _server;
private ContextHandlerCollection _handlerColl;
public Jetty6Wrapper(int port) throws Exception {
_server = new Server(port);
// Adding the buildr handler to control our server lifecycle
ContextHandler context = new ContextHandler();
context.setContextPath("/buildr");
Handler handler = new BuildrHandler();
context.setHandler(handler);
_handlerColl = new ContextHandlerCollection();
_handlerColl.setHandlers(new Handler[] {context});
_server.addHandler(_handlerColl);
_server.start();
}
/*
public void join() {
try {
_server.join();
} catch (Exception e) {
e.printStackTrace();
}
}
*/
private class BuildrHandler extends AbstractHandler {
private HashMap _apps = new HashMap();
public void handle(String string, HttpServletRequest request,
HttpServletResponse response, int i) throws IOException, ServletException {
response.setContentType("text/html");
if (request.getPathInfo().equals("/")) {
response.getWriter().println("Alive");
((Request)request).setHandled(true);
return;
} else if (request.getPathInfo().equals("/deploy")) {
try {
String webapp = request.getParameter("webapp");
String path = request.getParameter("path");
System.out.println("Deploying " + webapp + " in " + path);
WebAppContext context;
context = (WebAppContext) _apps.get(path);
if (context != null) {
context.stop();
_handlerColl.removeHandler(context);
_apps.remove(path);
}
context = new WebAppContext(webapp, path);
context.setConfigurationClasses(new String[] {
"org.mortbay.jetty.webapp.WebInfConfiguration",
"org.mortbay.jetty.webapp.WebXmlConfiguration"});
context.setClassLoader(new WebAppClassLoader(context));
_handlerColl.addHandler(context);
context.start();
_apps.put(path, context);
response.getWriter().println("Deployed");
response.getWriter().println(context.getTempDirectory());
((Request)request).setHandled(true);
} catch (Throwable e) {
e.printStackTrace();
response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
((Request)request).setHandled(true);
return;
}
} else if (request.getPathInfo().equals("/undeploy")) {
try {
String path = request.getParameter("path");
WebAppContext context = (WebAppContext) _apps.get(path);
if (context != null) {
System.out.println("Undeploying app at " + path);
context.stop();
_handlerColl.removeHandler(context);
_apps.remove(path);
}
response.getWriter().println("Undeployed");
((Request)request).setHandled(true);
} catch (Throwable e) {
e.printStackTrace();
response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
((Request)request).setHandled(true);
return;
}
} else if (request.getPathInfo().equals("/stop")) {
try {
_server.stop();
_server.destroy();
// Brute force
System.exit(0);
} catch (Exception e) {
e.printStackTrace();
}
}
response.getWriter().println("OK " + request.getPathInfo());
((Request)request).setHandled(true);
}
}
}