View Javadoc

1   //
2   //  ========================================================================
3   //  Copyright (c) 1995-2016 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  public class WebListenerAnnotation extends DiscoveredAnnotation
45  {
46      private static final Logger LOG = Log.getLogger(WebListenerAnnotation.class);
47  
48      public WebListenerAnnotation(WebAppContext context, String className)
49      {
50          super(context, className);
51      }
52      
53      public WebListenerAnnotation(WebAppContext context, String className, Resource resource)
54      {
55          super(context, className, resource);
56      }
57  
58      /**
59       * @see DiscoveredAnnotation#apply()
60       */
61      public void apply()
62      {
63          Class<? extends java.util.EventListener> clazz = (Class<? extends EventListener>)getTargetClass();
64  
65          if (clazz == null)
66          {
67              LOG.warn(_className+" cannot be loaded");
68              return;
69          }
70  
71          try
72          {
73              if (ServletContextListener.class.isAssignableFrom(clazz) ||
74                      ServletContextAttributeListener.class.isAssignableFrom(clazz) ||
75                      ServletRequestListener.class.isAssignableFrom(clazz) ||
76                      ServletRequestAttributeListener.class.isAssignableFrom(clazz) ||
77                      HttpSessionListener.class.isAssignableFrom(clazz) ||
78                      HttpSessionAttributeListener.class.isAssignableFrom(clazz) ||
79                      HttpSessionIdListener.class.isAssignableFrom(clazz))
80              {
81                  java.util.EventListener listener = (java.util.EventListener)_context.getServletContext().createInstance(clazz);      
82                  MetaData metaData = _context.getMetaData();
83                  if (metaData.getOrigin(clazz.getName()+".listener") == Origin.NotSet)
84                  {
85                      ListenerHolder h = _context.getServletHandler().newListenerHolder(Source.ANNOTATION);
86                      h.setListener(listener);
87                      _context.getServletHandler().addListener(h);
88                      _context.addEventListener(listener);
89                  }
90              }
91              else
92                  LOG.warn(clazz.getName()+" does not implement one of the servlet listener interfaces");
93          }
94          catch (Exception e)
95          {
96              LOG.warn(e);
97          }
98      }
99  }