1   //========================================================================
2   //Copyright 2004-2008 Mort Bay Consulting Pty. Ltd.
3   //------------------------------------------------------------------------
4   //Licensed under the Apache License, Version 2.0 (the "License");
5   //you may not use this file except in compliance with the License.
6   //You may obtain a copy of the License at 
7   //http://www.apache.org/licenses/LICENSE-2.0
8   //Unless required by applicable law or agreed to in writing, software
9   //distributed under the License is distributed on an "AS IS" BASIS,
10  //WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11  //See the License for the specific language governing permissions and
12  //limitations under the License.
13  //========================================================================
14  
15  /**
16   * 
17   */
18  package com.acme;
19  
20  import java.io.IOException;
21  
22  import javax.naming.InitialContext;
23  import javax.servlet.ServletConfig;
24  import javax.servlet.ServletException;
25  import javax.servlet.ServletOutputStream;
26  import javax.servlet.http.HttpServlet;
27  import javax.servlet.http.HttpServletRequest;
28  import javax.servlet.http.HttpServletResponse;
29  import javax.sql.DataSource;
30  import javax.transaction.UserTransaction;
31  import javax.annotation.Resource;
32  import javax.annotation.PostConstruct;
33  import javax.annotation.PreDestroy;
34  import javax.annotation.security.RunAs;
35  
36  /**
37   * AnnotationTest
38   * 
39   * Use Annotations from within Jetty.
40   * 
41   * Also, use servlet spec 2.5 resource injection and lifecycle callbacks from within the web.xml
42   * to set up some of the JNDI resources.
43   *
44   */
45  
46  @RunAs("special")
47  public class AnnotationTest extends HttpServlet 
48  {
49      private String postConstructResult = "";
50      private String dsResult = "";
51      private String envResult = "";
52      private String envLookupResult = "";
53      private String envResult2 ="";
54      private String envLookupResult2 = "";
55      private String envResult3 = "";
56      private String envLookupResult3 = "";
57      private String dsLookupResult = "";
58      private String txResult = "";
59      private String txLookupResult = "";
60      private DataSource myDS;
61      
62      @Resource(mappedName="UserTransaction")
63      private UserTransaction myUserTransaction;
64  
65  
66      @Resource(mappedName="maxAmount")
67      private Double maxAmount;
68      
69      @Resource(name="someAmount")
70      private Double minAmount;
71  
72      @Resource
73      private Double avgAmount;
74  
75     
76      @Resource(mappedName="jdbc/mydatasource")
77      public void setMyDatasource(DataSource ds)
78      {
79          myDS=ds;
80      }
81    
82      
83      @PostConstruct
84      private void myPostConstructMethod ()
85      {       
86          postConstructResult = "Called";
87         try 
88         {
89             dsResult = (myDS==null?"FAIL":"myDS="+myDS.toString());
90         }
91         catch (Exception e)
92         {
93             dsResult = "FAIL: "+e;
94         }
95  
96  
97         envResult = (maxAmount==null?"FAIL":"maxAmount="+maxAmount.toString());
98         
99         try
100        {
101            InitialContext ic = new InitialContext();
102            envLookupResult = "java:comp/env/com.acme.AnnotationTest/maxAmount="+ic.lookup("java:comp/env/com.acme.AnnotationTest/maxAmount");
103        }
104        catch (Exception e)
105        {
106            envLookupResult = "FAIL: "+e;
107        }
108 
109       envResult2 = (minAmount==null?"FAIL":"minAmount="+minAmount.toString());
110       try
111       {
112           InitialContext ic = new InitialContext();
113           envLookupResult2 = "java:comp/env/someAmount="+ic.lookup("java:comp/env/someAmount");
114       }
115       catch (Exception e)
116       {
117           envLookupResult2 = "FAIL: "+e;
118       }
119       envResult3 = (minAmount==null?"FAIL":"avgAmount="+avgAmount.toString());
120       try
121       {
122           InitialContext ic = new InitialContext();
123           envLookupResult3 = "java:comp/env/com.acme.AnnotationTest/avgAmount="+ic.lookup("java:comp/env/com.acme.AnnotationTest/avgAmount");
124       }
125       catch (Exception e)
126       {
127           envLookupResult3 = "FAIL: "+e;
128       }
129       
130       
131       
132        try
133        {
134            InitialContext ic = new InitialContext();
135            dsLookupResult = "java:comp/env/com.acme.AnnotationTest/myDatasource="+ic.lookup("java:comp/env/com.acme.AnnotationTest/myDatasource");
136        }
137        catch (Exception e)
138        {
139            dsLookupResult = "FAIL: "+e;
140        }
141        
142        txResult = (myUserTransaction==null?"FAIL":"myUserTransaction="+myUserTransaction);
143        try
144        {
145            InitialContext ic = new InitialContext();
146            txLookupResult = "java:comp/env/com.acme.AnnotationTest/myUserTransaction="+ic.lookup("java:comp/env/com.acme.AnnotationTest/myUserTransaction");
147        }
148        catch (Exception e)
149        {
150            txLookupResult = "FAIL: "+e;
151        }
152     }
153     
154     @PreDestroy
155     private void myPreDestroyMethod()
156     {
157         System.err.println("PreDestroy called");
158     }
159     
160     public void init(ServletConfig config) throws ServletException
161     {
162         super.init(config);
163     }
164 
165     
166     
167     /* ------------------------------------------------------------ */
168     public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
169     {
170         doGet(request, response);
171     }
172 
173     /* ------------------------------------------------------------ */
174     public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
175     {      
176         try
177         {
178             response.setContentType("text/html");
179             ServletOutputStream out = response.getOutputStream();
180             out.println("<html>");
181             out.println("<h1>Jetty Annotation Results</h1>");
182             out.println("<body>");
183             
184             out.println("<h2>@PostConstruct Callback</h2>");
185             out.println("<pre>");
186             out.println("@PostConstruct");
187             out.println("private void myPostConstructMethod ()");
188             out.println("{}"); 
189             out.println("</pre>");
190             out.println("<br/><b>Result: "+postConstructResult+"</b>");
191            
192             
193             out.println("<h2>@Resource Injection for DataSource</h2>");    
194             out.println("<pre>");         
195             out.println("@Resource(mappedName=\"jdbc/mydatasource\");");
196             out.println("public void setMyDatasource(DataSource ds)");
197             out.println("{");
198             out.println("myDS=ds;");
199             out.println("}");
200             out.println("</pre>");
201             out.println("<br/><b>Result: "+dsResult+"</b>");
202             out.println("<br/><b>JNDI Lookup Result: "+dsLookupResult+"</b>");
203 
204             
205             out.println("<h2>@Resource Injection for env-entry </h2>");
206             out.println("<pre>");
207             out.println("@Resource(mappedName=\"maxAmount\")");
208             out.println("private Double maxAmount;");
209             out.println("@Resource(name=\"minAmount\")");
210             out.println("private Double minAmount;");
211             out.println("</pre>");
212             out.println("<br/><b>Result: "+envResult+": "+(maxAmount.compareTo(new Double(55))==0?" PASS":" FAIL")+"</b>");     
213             out.println("<br/><b>JNDI Lookup Result: "+envLookupResult+"</b>");
214             out.println("<br/><b>Result: "+envResult2+": "+(minAmount.compareTo(new Double("0.99"))==0?" PASS":" FAIL")+"</b>");     
215             out.println("<br/><b>JNDI Lookup Result: "+envLookupResult2+"</b>");
216             out.println("<br/><b>Result: "+envResult3+": "+(avgAmount.compareTo(new Double("1.25"))==0?" PASS":" FAIL")+"</b>");     
217             out.println("<br/><b>JNDI Lookup Result: "+envLookupResult3+"</b>");          
218          
219             out.println("<h2>@Resource Injection for UserTransaction </h2>");
220             out.println("<pre>");
221             out.println("@Resource(mappedName=\"UserTransaction\")");
222             out.println("private UserTransaction myUserTransaction;");
223             out.println("</pre>");
224             out.println("<br/><b>Result: "+txResult+"</b>");
225             out.println("<br/><b>JNDI Lookup Result: "+txLookupResult+"</b>");
226             
227             out.println("<h2>@RunAs</h2>");
228             boolean result = request.isUserInRole("special");
229             out.println("<br/><b>Result: isUserInRole(\"special\")="+result+":"+(result==true?" PASS":" FAIL")+"</b>");    
230             result = request.isUserInRole("other");
231             out.println("<br/><b>Result: isUserInRole(\"other\")="+result+":"+ (result==false?" PASS":" FAIL")+"</b>");
232             
233             
234             out.println("</body>");            
235             out.println("</html>");
236             out.flush();
237         }
238         catch (Exception e)
239         {
240             throw new ServletException(e);
241         }
242     }
243     
244 
245   
246    
247 }