1
2
3
4
5
6
7
8
9
10
11
12
13
14 package org.eclipse.jetty.servlet;
15
16 import java.util.Collections;
17 import java.util.Enumeration;
18 import java.util.HashMap;
19 import java.util.Map;
20
21 import javax.servlet.ServletContext;
22 import javax.servlet.UnavailableException;
23
24 import org.eclipse.jetty.server.handler.ContextHandler;
25 import org.eclipse.jetty.util.AttributesMap;
26 import org.eclipse.jetty.util.Loader;
27 import org.eclipse.jetty.util.component.AbstractLifeCycle;
28 import org.eclipse.jetty.util.log.Log;
29
30
31
32
33
34
35 public class Holder extends AbstractLifeCycle
36 {
37 protected transient Class<?> _class;
38 protected String _className;
39 protected String _displayName;
40 protected Map _initParams;
41 protected boolean _extInstance;
42 protected boolean _asyncSupported=true;
43
44
45 protected String _name;
46 protected ServletHandler _servletHandler;
47
48 protected Holder()
49 {}
50
51
52 protected Holder(Class held)
53 {
54 _class=held;
55 if (held!=null)
56 {
57 _className=held.getName();
58 _name=held.getName()+"-"+this.hashCode();
59 }
60 }
61
62
63 public void doStart()
64 throws Exception
65 {
66
67 if (_class==null && (_className==null || _className.equals("")))
68 throw new UnavailableException("No class for Servlet or Filter", -1);
69
70
71 if (_class==null)
72 {
73 try
74 {
75 _class=Loader.loadClass(Holder.class, _className);
76 if(Log.isDebugEnabled())Log.debug("Holding {}",_class);
77 }
78 catch (Exception e)
79 {
80 Log.warn(e);
81 throw new UnavailableException(e.getMessage(), -1);
82 }
83 }
84 }
85
86
87 public void doStop()
88 throws Exception
89 {
90 if (!_extInstance)
91 _class=null;
92 }
93
94
95 public String getClassName()
96 {
97 return _className;
98 }
99
100
101 public Class getHeldClass()
102 {
103 return _class;
104 }
105
106
107 public String getDisplayName()
108 {
109 return _displayName;
110 }
111
112
113 public String getInitParameter(String param)
114 {
115 if (_initParams==null)
116 return null;
117 return (String)_initParams.get(param);
118 }
119
120
121 public Enumeration getInitParameterNames()
122 {
123 if (_initParams==null)
124 return Collections.enumeration(Collections.EMPTY_LIST);
125 return Collections.enumeration(_initParams.keySet());
126 }
127
128
129 public Map getInitParameters()
130 {
131 return _initParams;
132 }
133
134
135 public String getName()
136 {
137 return _name;
138 }
139
140
141
142
143
144 public ServletHandler getServletHandler()
145 {
146 return _servletHandler;
147 }
148
149
150 public synchronized Object newInstance()
151 throws InstantiationException,
152 IllegalAccessException
153 {
154 if (_class==null)
155 throw new InstantiationException("!"+_className);
156 return _class.newInstance();
157 }
158
159
160 public void destroyInstance(Object instance)
161 throws Exception
162 {
163 }
164
165
166
167
168
169 public void setClassName(String className)
170 {
171 _className = className;
172 _class=null;
173 }
174
175
176
177
178
179 public void setHeldClass(Class held)
180 {
181 _class=held;
182 _className = held!=null?held.getName():null;
183 }
184
185
186 public void setDisplayName(String name)
187 {
188 _displayName=name;
189 }
190
191
192 public void setInitParameter(String param,String value)
193 {
194 if (_initParams==null)
195 _initParams=new HashMap(3);
196 _initParams.put(param,value);
197 }
198
199
200 public void setInitParameters(Map map)
201 {
202 _initParams=map;
203 }
204
205
206
207
208
209
210
211
212 public void setName(String name)
213 {
214 _name = name;
215 }
216
217
218
219
220
221 public void setServletHandler(ServletHandler servletHandler)
222 {
223 _servletHandler = servletHandler;
224 }
225
226
227 public void setAsyncSupported(boolean suspendable)
228 {
229 _asyncSupported=suspendable;
230 }
231
232
233 public boolean isAsyncSupported()
234 {
235 return _asyncSupported;
236 }
237
238
239 public String toString()
240 {
241 return _name;
242 }
243
244
245 protected void illegalStateIfContextStarted()
246 {
247 if (_servletHandler!=null)
248 {
249 ContextHandler.Context context=(ContextHandler.Context)_servletHandler.getServletContext();
250 if (context!=null && context.getContextHandler().isStarted())
251 throw new IllegalStateException("Started");
252 }
253 }
254
255
256
257
258 protected class HolderConfig
259 {
260
261
262 public ServletContext getServletContext()
263 {
264 return _servletHandler.getServletContext();
265 }
266
267
268 public String getInitParameter(String param)
269 {
270 return Holder.this.getInitParameter(param);
271 }
272
273
274 public Enumeration getInitParameterNames()
275 {
276 return Holder.this.getInitParameterNames();
277 }
278 }
279 }
280
281
282
283
284