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