1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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
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
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 }