View Javadoc

1   //
2   //  ========================================================================
3   //  Copyright (c) 1995-2014 Mort Bay Consulting Pty. Ltd.
4   //  ------------------------------------------------------------------------
5   //  All rights reserved. This program and the accompanying materials
6   //  are made available under the terms of the Eclipse Public License v1.0
7   //  and Apache License v2.0 which accompanies this distribution.
8   //
9   //      The Eclipse Public License is available at
10  //      http://www.eclipse.org/legal/epl-v10.html
11  //
12  //      The Apache License v2.0 is available at
13  //      http://www.opensource.org/licenses/apache2.0.php
14  //
15  //  You may elect to redistribute this code under either of these licenses.
16  //  ========================================================================
17  //
18  
19  package org.eclipse.jetty.annotations;
20  
21  import java.util.EventListener;
22  
23  import javax.servlet.ServletContextAttributeListener;
24  import javax.servlet.ServletContextListener;
25  import javax.servlet.ServletRequestAttributeListener;
26  import javax.servlet.ServletRequestListener;
27  import javax.servlet.http.HttpSessionAttributeListener;
28  import javax.servlet.http.HttpSessionIdListener;
29  import javax.servlet.http.HttpSessionListener;
30  
31  import org.eclipse.jetty.servlet.BaseHolder.Source;
32  import org.eclipse.jetty.servlet.ListenerHolder;
33  import org.eclipse.jetty.util.log.Log;
34  import org.eclipse.jetty.util.log.Logger;
35  import org.eclipse.jetty.util.resource.Resource;
36  import org.eclipse.jetty.webapp.DiscoveredAnnotation;
37  import org.eclipse.jetty.webapp.MetaData;
38  import org.eclipse.jetty.webapp.Origin;
39  import org.eclipse.jetty.webapp.WebAppContext;
40  
41  /**
42   * WebListenerAnnotation
43   *
44   *
45   */
46  public class WebListenerAnnotation extends DiscoveredAnnotation
47  {
48      private static final Logger LOG = Log.getLogger(WebListenerAnnotation.class);
49  
50      /**
51       * @param context
52       * @param className
53       */
54      public WebListenerAnnotation(WebAppContext context, String className)
55      {
56          super(context, className);
57      }
58      
59      public WebListenerAnnotation(WebAppContext context, String className, Resource resource)
60      {
61          super(context, className, resource);
62      }
63  
64      /**
65       * @see DiscoveredAnnotation#apply()
66       */
67      public void apply()
68      {
69          Class<? extends java.util.EventListener> clazz = (Class<? extends EventListener>)getTargetClass();
70  
71          if (clazz == null)
72          {
73              LOG.warn(_className+" cannot be loaded");
74              return;
75          }
76  
77          try
78          {
79              if (ServletContextListener.class.isAssignableFrom(clazz) ||
80                      ServletContextAttributeListener.class.isAssignableFrom(clazz) ||
81                      ServletRequestListener.class.isAssignableFrom(clazz) ||
82                      ServletRequestAttributeListener.class.isAssignableFrom(clazz) ||
83                      HttpSessionListener.class.isAssignableFrom(clazz) ||
84                      HttpSessionAttributeListener.class.isAssignableFrom(clazz) ||
85                      HttpSessionIdListener.class.isAssignableFrom(clazz))
86              {
87                  java.util.EventListener listener = (java.util.EventListener)_context.getServletContext().createInstance(clazz);      
88                  MetaData metaData = _context.getMetaData();
89                  if (metaData.getOrigin(clazz.getName()+".listener") == Origin.NotSet)
90                  {
91                      ListenerHolder h = _context.getServletHandler().newListenerHolder(Source.ANNOTATION);
92                      h.setListener(listener);
93                      _context.getServletHandler().addListener(h);
94                      _context.addEventListener(listener);
95                  }
96              }
97              else
98                  LOG.warn(clazz.getName()+" does not implement one of the servlet listener interfaces");
99          }
100         catch (Exception e)
101         {
102             LOG.warn(e);
103         }
104     }
105 }