1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.hadoop.hbase.rest;
20
21 import org.apache.commons.logging.Log;
22 import org.apache.commons.logging.LogFactory;
23 import org.apache.hadoop.conf.Configuration;
24 import org.apache.hadoop.hbase.rest.filter.GzipFilter;
25 import org.apache.hadoop.util.StringUtils;
26 import org.mortbay.jetty.Server;
27 import org.mortbay.jetty.servlet.Context;
28 import org.mortbay.jetty.servlet.ServletHolder;
29
30 import com.sun.jersey.spi.container.servlet.ServletContainer;
31
32 public class HBaseRESTTestingUtility {
33
34 static final Log LOG = LogFactory.getLog(HBaseRESTTestingUtility.class);
35
36 private int testServletPort;
37 private Server server;
38
39 public int getServletPort() {
40 return testServletPort;
41 }
42
43 public void startServletContainer(Configuration conf) throws Exception {
44 if (server != null) {
45 LOG.error("ServletContainer already running");
46 return;
47 }
48
49
50 RESTServlet.getInstance(conf);
51
52
53 ServletHolder sh = new ServletHolder(ServletContainer.class);
54 sh.setInitParameter(
55 "com.sun.jersey.config.property.resourceConfigClass",
56 ResourceConfig.class.getCanonicalName());
57 sh.setInitParameter("com.sun.jersey.config.property.packages",
58 "jetty");
59
60 LOG.info("configured " + ServletContainer.class.getName());
61
62
63 server = new Server(0);
64 server.setSendServerVersion(false);
65 server.setSendDateHeader(false);
66
67 Context context = new Context(server, "/", Context.SESSIONS);
68 context.addServlet(sh, "/*");
69 context.addFilter(GzipFilter.class, "/*", 0);
70
71 server.start();
72
73 testServletPort = server.getConnectors()[0].getLocalPort();
74
75 LOG.info("started " + server.getClass().getName() + " on port " +
76 testServletPort);
77 }
78
79 public void shutdownServletContainer() {
80 if (server != null) try {
81 server.stop();
82 server = null;
83 RESTServlet.stop();
84 } catch (Exception e) {
85 LOG.warn(StringUtils.stringifyException(e));
86 }
87 }
88 }