001    /*
002    * Licensed to the Apache Software Foundation (ASF) under one or more
003    * contributor license agreements.  See the NOTICE file distributed with
004    * this work for additional information regarding copyright ownership.
005    * The ASF licenses this file to You under the Apache License, Version 2.0
006    * (the "License"); you may not use this file except in compliance with
007    * the License.  You may obtain a copy of the License at
008    *
009    *     http://www.apache.org/licenses/LICENSE-2.0
010    *
011    * Unless required by applicable law or agreed to in writing, software
012    * distributed under the License is distributed on an "AS IS" BASIS,
013    * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014    * See the License for the specific language governing permissions and
015    * limitations under the License.
016    */
017    
018    
019    package listeners;
020    
021    
022    import javax.servlet.ServletContext;
023    import javax.servlet.ServletContextEvent;
024    import javax.servlet.ServletContextListener;
025    import javax.servlet.http.HttpSessionAttributeListener;
026    import javax.servlet.http.HttpSessionBindingEvent;
027    import javax.servlet.http.HttpSessionEvent;
028    import javax.servlet.http.HttpSessionListener;
029    
030    
031    /**
032     * Example listener for context-related application events, which were
033     * introduced in the 2.3 version of the Servlet API.  This listener
034     * merely documents the occurrence of such events in the application log
035     * associated with our servlet context.
036     *
037     * @author Craig R. McClanahan
038     * @version $Revision: 514091 $ $Date: 2007-03-03 01:26:39 -0500 (Sat, 03 Mar 2007) $
039     */
040    
041    public final class SessionListener
042        implements ServletContextListener,
043                   HttpSessionAttributeListener, HttpSessionListener {
044    
045    
046        // ----------------------------------------------------- Instance Variables
047    
048    
049        /**
050         * The servlet context with which we are associated.
051         */
052        private ServletContext context = null;
053    
054    
055        // --------------------------------------------------------- Public Methods
056    
057    
058        /**
059         * Record the fact that a servlet context attribute was added.
060         *
061         * @param event The session attribute event
062         */
063        public void attributeAdded(HttpSessionBindingEvent event) {
064    
065            log("attributeAdded('" + event.getSession().getId() + "', '" +
066                event.getName() + "', '" + event.getValue() + "')");
067    
068        }
069    
070    
071        /**
072         * Record the fact that a servlet context attribute was removed.
073         *
074         * @param event The session attribute event
075         */
076        public void attributeRemoved(HttpSessionBindingEvent event) {
077    
078            log("attributeRemoved('" + event.getSession().getId() + "', '" +
079                event.getName() + "', '" + event.getValue() + "')");
080    
081        }
082    
083    
084        /**
085         * Record the fact that a servlet context attribute was replaced.
086         *
087         * @param event The session attribute event
088         */
089        public void attributeReplaced(HttpSessionBindingEvent event) {
090    
091            log("attributeReplaced('" + event.getSession().getId() + "', '" +
092                event.getName() + "', '" + event.getValue() + "')");
093    
094        }
095    
096    
097        /**
098         * Record the fact that this web application has been destroyed.
099         *
100         * @param event The servlet context event
101         */
102        public void contextDestroyed(ServletContextEvent event) {
103    
104            log("contextDestroyed()");
105            this.context = null;
106    
107        }
108    
109    
110        /**
111         * Record the fact that this web application has been initialized.
112         *
113         * @param event The servlet context event
114         */
115        public void contextInitialized(ServletContextEvent event) {
116    
117            this.context = event.getServletContext();
118            log("contextInitialized()");
119    
120        }
121    
122    
123        /**
124         * Record the fact that a session has been created.
125         *
126         * @param event The session event
127         */
128        public void sessionCreated(HttpSessionEvent event) {
129    
130            log("sessionCreated('" + event.getSession().getId() + "')");
131    
132        }
133    
134    
135        /**
136         * Record the fact that a session has been destroyed.
137         *
138         * @param event The session event
139         */
140        public void sessionDestroyed(HttpSessionEvent event) {
141    
142            log("sessionDestroyed('" + event.getSession().getId() + "')");
143    
144        }
145    
146    
147        // -------------------------------------------------------- Private Methods
148    
149    
150        /**
151         * Log a message to the servlet context application log.
152         *
153         * @param message Message to be logged
154         */
155        private void log(String message) {
156    
157            if (context != null)
158                context.log("SessionListener: " + message);
159            else
160                System.out.println("SessionListener: " + message);
161    
162        }
163    
164    
165        /**
166         * Log a message and associated exception to the servlet context
167         * application log.
168         *
169         * @param message Message to be logged
170         * @param throwable Exception to be logged
171         */
172        private void log(String message, Throwable throwable) {
173    
174            if (context != null)
175                context.log("SessionListener: " + message, throwable);
176            else {
177                System.out.println("SessionListener: " + message);
178                throwable.printStackTrace(System.out);
179            }
180    
181        }
182    
183    
184    }