Docjar: A Java Source and Docuemnt Enginecom.*    java.*    javax.*    org.*    all    new    plug-in

Quick Search    Search Deep

Source code: org/objectstyle/cayenne/conf/WebApplicationListener.java


1   /* ====================================================================
2    * 
3    * The ObjectStyle Group Software License, Version 1.0 
4    *
5    * Copyright (c) 2002-2003 The ObjectStyle Group 
6    * and individual authors of the software.  All rights reserved.
7    *
8    * Redistribution and use in source and binary forms, with or without
9    * modification, are permitted provided that the following conditions
10   * are met:
11   *
12   * 1. Redistributions of source code must retain the above copyright
13   *    notice, this list of conditions and the following disclaimer. 
14   *
15   * 2. Redistributions in binary form must reproduce the above copyright
16   *    notice, this list of conditions and the following disclaimer in
17   *    the documentation and/or other materials provided with the
18   *    distribution.
19   *
20   * 3. The end-user documentation included with the redistribution, if
21   *    any, must include the following acknowlegement:  
22   *       "This product includes software developed by the 
23   *        ObjectStyle Group (http://objectstyle.org/)."
24   *    Alternately, this acknowlegement may appear in the software itself,
25   *    if and wherever such third-party acknowlegements normally appear.
26   *
27   * 4. The names "ObjectStyle Group" and "Cayenne" 
28   *    must not be used to endorse or promote products derived
29   *    from this software without prior written permission. For written 
30   *    permission, please contact andrus@objectstyle.org.
31   *
32   * 5. Products derived from this software may not be called "ObjectStyle"
33   *    nor may "ObjectStyle" appear in their names without prior written
34   *    permission of the ObjectStyle Group.
35   *
36   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
37   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
38   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
39   * DISCLAIMED.  IN NO EVENT SHALL THE OBJECTSTYLE GROUP OR
40   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
41   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
42   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
43   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
44   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
45   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
46   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
47   * SUCH DAMAGE.
48   * ====================================================================
49   *
50   * This software consists of voluntary contributions made by many
51   * individuals on behalf of the ObjectStyle Group.  For more
52   * information on the ObjectStyle Group, please see
53   * <http://objectstyle.org/>.
54   *
55   */
56  
57  package org.objectstyle.cayenne.conf;
58  
59  import javax.servlet.ServletContext;
60  import javax.servlet.ServletContextEvent;
61  import javax.servlet.ServletContextListener;
62  import javax.servlet.http.HttpSessionEvent;
63  import javax.servlet.http.HttpSessionListener;
64  
65  /**
66   * WebApplicationListener utilizes Servlet specification 2.3 features to react on 
67   * webapplication container events inializing Cayenne.
68   * 
69    * <p>It performs the following tasks:
70    * <ul>
71    * <li>Loads Cayenne configuration when the application is started within container.</li>
72    * <li>Assigns new DataContext to every new session created within the application.</li>
73    * </ul>
74    * </p>
75    * 
76    * <p>CayenneWebappListener must be configured in <code>web.xml</code> deployment
77    * descriptor as a listener of context and session events:</p>
78    *<pre>&lt;listener&gt;
79       &lt;listener-class&gt;org.objectstyle.cayenne.conf.WebApplicationListener&lt;/listener-class&gt;
80  &lt;/listener&gt;</pre>
81    *
82    * <p>Note that to set WebApplicationListener as a listener of web application events, 
83    *  you must use servlet containers 
84    * compatible with Servlet Specification 2.3 (such as Tomcat 4.0). Listeners were only added 
85    * to servlet specification in 2.3. If you are using an older container, you will need
86    * to configure Cayenne in your code.</p>
87    *
88    * @author Andrei Adamchik
89    */
90  public class WebApplicationListener
91    implements HttpSessionListener, ServletContextListener {
92  
93    public WebApplicationListener() {
94    }
95  
96    /** Establishes a Cayenne shared Configuration object that can later be obtained by calling 
97      * <code>Configuration.getSharedConfiguration()</code>.
98      * This method is a part of ServletContextListener interface and is called
99      * on application startup. */
100   public void contextInitialized(ServletContextEvent sce) {
101     setConfiguration(newConfiguration(sce.getServletContext()));
102   }
103 
104   /** Currently does nothing. <i>In the future it should close down
105     * any database connections if they wheren't obtained via JNDI.</i>
106     * This method is a part of ServletContextListener interface and is called
107     * on application shutdown. */
108   public void contextDestroyed(ServletContextEvent sce) {
109   }
110 
111   /** Creates and assigns a new data context based on default domain
112     * to the session object  associated with this event. This method
113     * is a part of HttpSessionListener interface and is called every time
114     * when a new session is created. */
115   public void sessionCreated(HttpSessionEvent se) {
116     se.getSession().setAttribute(
117       BasicServletConfiguration.DATA_CONTEXT_KEY,
118       getConfiguration().getDomain().createDataContext());
119   }
120 
121   /** Does nothing. This method
122     * is a part of HttpSessionListener interface and is called every time
123     * when a session is destroyed. */
124   public void sessionDestroyed(HttpSessionEvent se) {
125   }
126 
127   /** Return an instance of Configuration that will be initialized as the shared configuration.
128     * Provides an extension point for the developer to provide their own custom configuration.
129     */
130   protected Configuration newConfiguration(ServletContext sc) {
131     return new BasicServletConfiguration(sc);
132   }
133 
134   /** Initializes the configuration.  */
135   protected void setConfiguration(Configuration configuration) {
136     Configuration.initializeSharedConfiguration(configuration);
137   }
138 
139   /** Returns the current configuration. */
140   protected Configuration getConfiguration() {
141     return Configuration.getSharedConfiguration();
142   }
143 }