1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 package org.mortbay.jetty.ant;
16
17 import java.io.File;
18 import java.io.IOException;
19 import java.net.MalformedURLException;
20 import java.util.HashMap;
21 import java.util.Iterator;
22 import java.util.List;
23 import java.util.Map;
24
25 import org.mortbay.jetty.Connector;
26 import org.mortbay.jetty.Handler;
27 import org.mortbay.jetty.RequestLog;
28 import org.mortbay.jetty.Server;
29 import org.mortbay.jetty.ant.utils.ServerProxy;
30 import org.mortbay.jetty.ant.utils.TaskLog;
31 import org.mortbay.jetty.ant.utils.WebApplicationProxy;
32 import org.mortbay.jetty.handler.ContextHandlerCollection;
33 import org.mortbay.jetty.handler.DefaultHandler;
34 import org.mortbay.jetty.handler.HandlerCollection;
35 import org.mortbay.jetty.handler.RequestLogHandler;
36 import org.mortbay.jetty.security.UserRealm;
37 import org.mortbay.resource.Resource;
38 import org.mortbay.xml.XmlConfiguration;
39
40
41
42
43
44
45
46 public class ServerProxyImpl implements ServerProxy
47 {
48
49
50 private Server server;
51
52
53 private ContextHandlerCollection contexts;
54
55
56 private File jettyXml;
57
58
59 private List connectors;
60
61
62 private RequestLog requestLog;
63
64
65 private List userRealms;
66
67
68 private Map webApplications = new HashMap();
69
70
71
72
73
74
75
76
77
78
79
80 public ServerProxyImpl(List connectors, List userRealmsList, RequestLog requestLog,
81 File jettyXml)
82 {
83 server = new Server();
84 server.setStopAtShutdown(true);
85
86 this.connectors = connectors;
87 this.userRealms = userRealmsList;
88 this.requestLog = requestLog;
89 this.jettyXml = jettyXml;
90 configure();
91 }
92
93
94
95
96
97 public void addWebApplication(WebApplicationProxy webApp, int scanIntervalSeconds)
98 {
99 webApp.createApplicationContext(contexts);
100
101 if (scanIntervalSeconds > 0)
102 {
103 webApplications.put(webApp, new Integer(scanIntervalSeconds));
104 }
105 }
106
107
108
109
110 private void configure()
111 {
112
113 applyJettyXml();
114
115
116 Iterator connectorIterator = connectors.iterator();
117 while (connectorIterator.hasNext())
118 {
119 Connector jettyConnector = (Connector) connectorIterator.next();
120 server.addConnector(jettyConnector);
121 }
122
123
124 Iterator realmsIterator = userRealms.iterator();
125 while (realmsIterator.hasNext())
126 {
127 UserRealm realm = (UserRealm) realmsIterator.next();
128 server.addUserRealm(realm);
129 }
130
131
132 Resource.setDefaultUseCaches(false);
133
134
135 configureHandlers();
136 }
137
138 private void configureHandlers()
139 {
140 RequestLogHandler requestLogHandler = new RequestLogHandler();
141 if (requestLog != null)
142 {
143 requestLogHandler.setRequestLog(requestLog);
144 }
145
146 contexts = (ContextHandlerCollection) server
147 .getChildHandlerByClass(ContextHandlerCollection.class);
148 if (contexts == null)
149 {
150 contexts = new ContextHandlerCollection();
151 HandlerCollection handlers = (HandlerCollection) server
152 .getChildHandlerByClass(HandlerCollection.class);
153 if (handlers == null)
154 {
155 handlers = new HandlerCollection();
156 server.setHandler(handlers);
157 handlers.setHandlers(new Handler[] { contexts, new DefaultHandler(),
158 requestLogHandler });
159 }
160 else
161 {
162 handlers.addHandler(contexts);
163 }
164 }
165 }
166
167
168
169
170 private void applyJettyXml()
171 {
172 if (jettyXml != null && jettyXml.exists())
173 {
174 TaskLog.log("Configuring jetty from xml configuration file = "
175 + jettyXml.getAbsolutePath());
176 XmlConfiguration configuration;
177 try
178 {
179 configuration = new XmlConfiguration(jettyXml.toURL());
180 configuration.configure(server);
181 }
182 catch (Exception e)
183 {
184 throw new RuntimeException(e);
185 }
186 }
187 }
188
189
190
191
192 public void start()
193 {
194 try
195 {
196 server.start();
197 startScanners();
198 server.join();
199
200 }
201 catch (InterruptedException e)
202 {
203 new RuntimeException(e);
204 }
205 catch (Exception e)
206 {
207 new RuntimeException(e);
208 }
209 }
210
211
212
213
214 private void startScanners()
215 {
216 Iterator i = webApplications.keySet().iterator();
217 while (i.hasNext())
218 {
219 WebApplicationProxyImpl webApp = (WebApplicationProxyImpl) i.next();
220 Integer scanIntervalSeconds = (Integer) webApplications.get(webApp);
221 JettyRunTask.startScanner(webApp, scanIntervalSeconds.intValue());
222 }
223 }
224
225
226
227
228 public Object getProxiedObject()
229 {
230 return server;
231 }
232 }