1   /**
2    * Logback: the generic, reliable, fast and flexible logging framework.
3    * 
4    * Copyright (C) 2000-2008, QOS.ch
5    * 
6    * This library is free software, you can redistribute it and/or modify it under
7    * the terms of the GNU Lesser General Public License as published by the Free
8    * Software Foundation.
9    */
10  package ch.qos.logback.access.jetty;
11  
12  import org.mortbay.jetty.Connector;
13  import org.mortbay.jetty.Handler;
14  import org.mortbay.jetty.Server;
15  import org.mortbay.jetty.handler.ContextHandler;
16  import org.mortbay.jetty.handler.RequestLogHandler;
17  import org.mortbay.jetty.nio.SelectChannelConnector;
18  
19  abstract public class JettyFixtureBase {
20    protected RequestLogImpl requestLogImpl;
21  
22    private final int port;
23    Server server;
24    String url;
25    
26    public JettyFixtureBase(RequestLogImpl impl, int port) {
27      requestLogImpl = impl;
28      this.port = port;
29      url = "http://localhost:" + port + "/";
30    }
31  
32    public String getName() {
33      return "Jetty Test Setup";
34    }
35  
36    public String getUrl() {
37      return url;
38    }
39  
40    public void start() throws Exception {
41      server = new Server();
42      Connector connector = new SelectChannelConnector();
43      connector.setPort(port);
44      server.setConnectors(new Connector[] { connector });
45  
46      ContextHandler context = new ContextHandler();
47      context.setContextPath("/");
48      context.setResourceBase(".");
49      context.setClassLoader(Thread.currentThread().getContextClassLoader());
50      server.addHandler(context);
51  
52      RequestLogHandler requestLogHandler = new RequestLogHandler();
53      buildContext();
54      requestLogHandler.setRequestLog(requestLogImpl);
55      server.addHandler(requestLogHandler);
56  
57      Handler handler = getHandler();
58      context.addHandler(handler);
59  
60      server.start();
61    }
62  
63    public void stop() throws Exception {
64      // System.out.println("into tearDown");
65      server.stop();
66      server = null;
67      requestLogImpl = null;
68    }
69  
70    abstract protected void buildContext();
71    abstract protected Handler getHandler();
72  }