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