1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package com.acme.test;
20
21 import java.io.IOException;
22 import java.util.ArrayList;
23 import java.util.Arrays;
24 import java.util.List;
25
26 import javax.annotation.PostConstruct;
27 import javax.annotation.PreDestroy;
28 import javax.annotation.Resource;
29 import javax.annotation.security.DeclareRoles;
30 import javax.annotation.security.RunAs;
31 import javax.naming.InitialContext;
32 import javax.servlet.ServletConfig;
33 import javax.servlet.ServletException;
34 import javax.servlet.ServletOutputStream;
35 import javax.servlet.annotation.WebInitParam;
36 import javax.servlet.annotation.WebServlet;
37 import javax.servlet.http.HttpServlet;
38 import javax.servlet.http.HttpServletRequest;
39 import javax.servlet.http.HttpServletResponse;
40 import javax.sql.DataSource;
41 import javax.transaction.UserTransaction;
42
43
44
45
46
47
48
49
50
51
52
53 @RunAs("special")
54 @WebServlet(urlPatterns = {"/","/test/*"}, name="AnnotationTest", initParams={@WebInitParam(name="fromAnnotation", value="xyz")})
55 @DeclareRoles({"user","client"})
56 public class AnnotationTest extends HttpServlet
57 {
58 static List<String> __HandlesTypes;
59 private String postConstructResult = "";
60 private String dsResult = "";
61 private String envResult = "";
62 private String envLookupResult = "";
63 private String envResult2 ="";
64 private String envLookupResult2 = "";
65 private String envResult3 = "";
66 private String envLookupResult3 = "";
67 private String dsLookupResult = "";
68 private String txResult = "";
69 private String txLookupResult = "";
70 private DataSource myDS;
71 private ServletConfig config;
72
73 @Resource(mappedName="UserTransaction")
74 private UserTransaction myUserTransaction;
75
76
77 @Resource(mappedName="maxAmount")
78 private Double maxAmount;
79
80 @Resource(name="someAmount")
81 private Double minAmount;
82
83 @Resource
84 private Double avgAmount;
85
86
87 @Resource(mappedName="jdbc/mydatasource")
88 public void setMyDatasource(DataSource ds)
89 {
90 myDS=ds;
91 }
92
93
94 @PostConstruct
95 private void myPostConstructMethod ()
96 {
97 postConstructResult = "<span class=\"pass\">PASS</span>";
98 try
99 {
100 dsResult = (myDS==null?"<span class=\"fail\">FAIL</span>":"<span class=\"pass\">myDS="+myDS.toString()+"</span>");
101 }
102 catch (Exception e)
103 {
104 dsResult = "<span class=\"fail\">FAIL:</span> "+e;
105 }
106
107
108 envResult = (maxAmount==null?"FAIL</span>":"<span class=\"pass\">maxAmount="+maxAmount.toString()+"</span>");
109
110 try
111 {
112 InitialContext ic = new InitialContext();
113 envLookupResult = "java:comp/env/com.acme.test.AnnotationTest/maxAmount="+ic.lookup("java:comp/env/com.acme.test.AnnotationTest/maxAmount");
114 }
115 catch (Exception e)
116 {
117 envLookupResult = "<span class=\"fail\">FAIL:</span> "+e;
118 }
119
120 envResult2 = (minAmount==null?"<span class=\"fail\">FAIL</span>":"<span class=\"pass\">minAmount="+minAmount.toString()+"</span>");
121 try
122 {
123 InitialContext ic = new InitialContext();
124 envLookupResult2 = "java:comp/env/someAmount="+ic.lookup("java:comp/env/someAmount");
125 }
126 catch (Exception e)
127 {
128 envLookupResult2 = "<span class=\"fail\">FAIL:</span> "+e;
129 }
130 envResult3 = (minAmount==null?"<span class=\"fail\">FAIL</span>":"<span class=\"pass\">avgAmount="+avgAmount.toString()+"</span>");
131 try
132 {
133 InitialContext ic = new InitialContext();
134 envLookupResult3 = "java:comp/env/com.acme.test.AnnotationTest/avgAmount="+ic.lookup("java:comp/env/com.acme.test.AnnotationTest/avgAmount");
135 }
136 catch (Exception e)
137 {
138 envLookupResult3 = "<span class=\"fail\">FAIL:</span> "+e;
139 }
140
141
142
143 try
144 {
145 InitialContext ic = new InitialContext();
146 dsLookupResult = "java:comp/env/com.acme.test.AnnotationTest/myDatasource="+ic.lookup("java:comp/env/com.acme.test.AnnotationTest/myDatasource");
147 }
148 catch (Exception e)
149 {
150 dsLookupResult = "<span class=\"fail\">FAIL:</span> "+e;
151 }
152
153 txResult = (myUserTransaction==null?"<span class=\"fail\">FAIL</span>":"<span class=\"pass\">myUserTransaction="+myUserTransaction+"</span>");
154 try
155 {
156 InitialContext ic = new InitialContext();
157 txLookupResult = "java:comp/env/com.acme.test.AnnotationTest/myUserTransaction="+ic.lookup("java:comp/env/com.acme.test.AnnotationTest/myUserTransaction");
158 }
159 catch (Exception e)
160 {
161 txLookupResult = "<span class=\"fail\">FAIL:</span> "+e;
162 }
163 }
164
165 @PreDestroy
166 private void myPreDestroyMethod()
167 {
168 }
169
170 public void init(ServletConfig config) throws ServletException
171 {
172 super.init(config);
173 this.config = config;
174 }
175
176
177
178
179 public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
180 {
181 doGet(request, response);
182 }
183
184
185 public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
186 {
187 try
188 {
189 response.setContentType("text/html");
190 ServletOutputStream out = response.getOutputStream();
191 out.println("<html>");
192 out.println("<HEAD><link rel=\"stylesheet\" type=\"text/css\" href=\"stylesheet.css\"/></HEAD>");
193 out.println("<body>");
194 out.println("<h1>Results</h1>");
195
196 out.println("<h2>Init Params from Annotation</h2>");
197 out.println("<pre>");
198 out.println("initParams={@WebInitParam(name=\"fromAnnotation\", value=\"xyz\")}");
199 out.println("</pre>");
200 out.println("<p><b>Result: "+("xyz".equals(config.getInitParameter("fromAnnotation"))? "<span class=\"pass\">PASS": "<span class=\"fail\">FAIL")+"</span></p>");
201
202 out.println("<h2>Init Params from web-fragment</h2>");
203 out.println("<pre>");
204 out.println("extra1=123, extra2=345");
205 out.println("</pre>");
206 boolean fragInitParamResult = "123".equals(config.getInitParameter("extra1")) && "345".equals(config.getInitParameter("extra2"));
207 out.println("<p><b>Result: "+(fragInitParamResult? "<span class=\"pass\">PASS": "<span class=\"fail\">FAIL")+"</span></p>");
208
209
210 __HandlesTypes = Arrays.asList( "javax.servlet.GenericServlet",
211 "javax.servlet.http.HttpServlet",
212 "com.acme.test.AsyncListenerServlet",
213 "com.acme.test.AnnotationTest",
214 "com.acme.test.RoleAnnotationTest",
215 "com.acme.test.MultiPartTest",
216 "com.acme.fragment.FragmentServlet",
217 "com.acme.test.TestListener",
218 "com.acme.test.SecuredServlet",
219 "com.acme.test.Bar");
220 out.println("<h2>@ContainerInitializer</h2>");
221 out.println("<pre>");
222 out.println("@HandlesTypes({javax.servlet.Servlet.class, Foo.class})");
223 out.println("</pre>");
224 out.print("<p><b>Result: ");
225 List<Class> classes = (List<Class>)config.getServletContext().getAttribute("com.acme.Foo");
226 List<String> classNames = new ArrayList<String>();
227 if (classes != null)
228 {
229 for (Class c: classes)
230 {
231 classNames.add(c.getName());
232 out.print(c.getName()+" ");
233 }
234
235 if (classNames.size() != __HandlesTypes.size())
236 out.println("<br/><span class=\"fail\">FAIL</span>");
237 else if (!classNames.containsAll(__HandlesTypes))
238 out.println("<br/><span class=\"fail\">FAIL</span>");
239 else
240 out.println("<br/><span class=\"pass\">PASS</span>");
241 }
242 else
243 out.print("<br/><span class=\"fail\">FAIL</span> (No such attribute com.acme.Foo)");
244 out.println("</b></p>");
245
246 out.println("<h2>Complete Servlet Registration</h2>");
247 Boolean complete = (Boolean)config.getServletContext().getAttribute("com.acme.AnnotationTest.complete");
248 out.println("<p><b>Result: "+(complete.booleanValue()?"<span class=\"pass\">PASS":"<span class=\"fail\">FAIL")+"</span></b></p>");
249
250 out.println("<h2>ServletContextListener Programmatic Registration from ServletContainerInitializer</h2>");
251 Boolean programmaticListener = (Boolean)config.getServletContext().getAttribute("com.acme.AnnotationTest.listenerTest");
252 out.println("<p><b>Result: "+(programmaticListener.booleanValue()?"<span class=\"pass\">PASS":"<span class=\"fail\">FAIL")+"</span></b></p>");
253
254 out.println("<h2>ServletContextListener Programmatic Registration Prevented from ServletContextListener</h2>");
255 Boolean programmaticListenerPrevention = (Boolean)config.getServletContext().getAttribute("com.acme.AnnotationTest.listenerRegoTest");
256 out.println("<p><b>Result: "+(programmaticListenerPrevention.booleanValue()?"<span class=\"pass\">PASS":"<span class=\"fail\">FAIL")+"</span></b></p>");
257
258 out.println("<h2>ServletContextListener Registration Prevented from ServletContextListener</h2>");
259 Boolean webListenerPrevention = (Boolean)config.getServletContext().getAttribute("com.acme.AnnotationTest.sclFromSclRegoTest");
260 out.println("<p><b>Result: "+(webListenerPrevention.booleanValue()?"<span class=\"pass\">PASS":"<span class=\"fail\">FAIL")+"</span></b></p>");
261
262 out.println("<h2>ServletContextListener In web.xml Injected</h2>");
263 Boolean listenerInject = (Boolean)config.getServletContext().getAttribute("com.acme.AnnotationTest.sclInjectTest");
264 out.println("<p><b>Result: "+(listenerInject.booleanValue()?"<span class=\"pass\">PASS":"<span class=\"fail\">FAIL")+"</span></b></p>");
265
266 out.println("<h2>ServletContextListener as @WebListener Injected</h2>");
267 Boolean annotatedListenerInject = (Boolean)config.getServletContext().getAttribute("com.acme.AnnotationTest.sclInjectWebListenerTest");
268 out.println("<p><b>Result: "+(annotatedListenerInject.booleanValue()?"<span class=\"pass\">PASS":"<span class=\"fail\">FAIL")+"</span></b></p>");
269
270 out.println("<h2>Programmatic Listener Injected</h2>");
271 Boolean programListenerInject = (Boolean)config.getServletContext().getAttribute("com.acme.AnnotationTest.programListenerInjectTest");
272 out.println("<p><b>Result: "+(programListenerInject.booleanValue()?"<span class=\"pass\">PASS":"<span class=\"fail\">FAIL")+"</span></b></p>");
273
274 out.println("<h2>Invalid Type for Listener Detection</h2>");
275 Boolean badListener = (Boolean)config.getServletContext().getAttribute("com.acme.AnnotationTest.invalidListenerRegoTest");
276 out.println("<p><b>Result: "+(badListener.booleanValue()?"<span class=\"pass\">PASS":"<span class=\"fail\">FAIL")+"</span></b></p>");
277
278
279 out.println("<h2>@PostConstruct Callback</h2>");
280 out.println("<pre>");
281 out.println("@PostConstruct");
282 out.println("private void myPostConstructMethod ()");
283 out.println("{}");
284 out.println("</pre>");
285 out.println("<p><b>Result: "+postConstructResult+"</b></p>");
286
287
288 out.println("<h2>@Resource Injection for DataSource</h2>");
289 out.println("<pre>");
290 out.println("@Resource(mappedName=\"jdbc/mydatasource\");");
291 out.println("public void setMyDatasource(DataSource ds)");
292 out.println("{");
293 out.println("myDS=ds;");
294 out.println("}");
295 out.println("</pre>");
296 out.println("<p><b>Result: "+dsResult+"</b>");
297 out.println("<br/><b>JNDI Lookup Result: "+dsLookupResult+"</b></p>");
298
299
300 out.println("<h2>@Resource Injection for env-entry </h2>");
301 out.println("<pre>");
302 out.println("@Resource(mappedName=\"maxAmount\")");
303 out.println("private Double maxAmount;");
304 out.println("@Resource(name=\"minAmount\")");
305 out.println("private Double minAmount;");
306 out.println("</pre>");
307 if (maxAmount==null)
308 out.println("<p><b>Result: "+envResult+": <span class=\"fail\">FAIL");
309 else
310 out.println("<p><b>Result: "+envResult+": "+(maxAmount.compareTo(new Double(55))==0?" <span class=\"pass\">PASS":" <span class=\"fail\">FAIL")+"</span></b>");
311 out.println("<br/><b>JNDI Lookup Result: "+envLookupResult+"</b>");
312
313 if (minAmount==null)
314 out.println("<p><b>Result: "+envResult2+": <span class=\"fail\">FAIL");
315 else
316 out.println("<br/><b>Result: "+envResult2+": "+(minAmount.compareTo(new Double("0.99"))==0?" <span class=\"pass\">PASS":" <span class=\"fail\">FAIL")+"</span></b>");
317 out.println("<br/><b>JNDI Lookup Result: "+envLookupResult2+"</b>");
318
319 if (avgAmount==null)
320 out.println("<p><b>Result: "+envResult3+": <span class=\"fail\">FAIL");
321 else
322 out.println("<br/><b>Result: "+envResult3+": "+(avgAmount.compareTo(new Double("1.25"))==0?" <span class=\"pass\">PASS":" <span class=\"fail\">FAIL")+"</span></b>");
323 out.println("<br/><b>JNDI Lookup Result: "+envLookupResult3+"</b></p>");
324
325 out.println("<h2>@Resource Injection for UserTransaction </h2>");
326 out.println("<pre>");
327 out.println("@Resource(mappedName=\"UserTransaction\")");
328 out.println("private UserTransaction myUserTransaction;");
329 out.println("</pre>");
330 out.println("<p><b>Result: "+txResult+"</b>");
331 out.println("<br/><b>JNDI Lookup Result: "+txLookupResult+"</b></p>");
332
333 out.println("</body>");
334 out.println("</html>");
335 out.flush();
336 }
337 catch (Exception e)
338 {
339 throw new ServletException(e);
340 }
341 }
342
343
344
345
346 }