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
45
46 public class WebListenerAnnotation extends DiscoveredAnnotation
47 {
48 private static final Logger LOG = Log.getLogger(WebListenerAnnotation.class);
49
50
51
52
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
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 }