/* * ============================================================================ * GNU Lesser General Public License * ============================================================================ * * Beanlet - JSE Application Container. * Copyright (C) 2006 Leon van Zantvoort * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. * * Leon van Zantvoort * 243 Acalanes Drive #11 * Sunnyvale, CA 94086 * USA * * zantvoort@users.sourceforge.net * http://beanlet.org */ /** * Adds web specific beanlet scopes. * * <p><h3>Beanlet Scopes</h3> * The Beanlet web package comes with two object scopes: * <ul> * <li>{@link org.beanlet.web.Request} beanlets do not provide direct access to * the underlying objects. Instead, clients obtain a stub that delegates * invocations to the underlying instance. In case of request beanlets, * the stub creates a new instance per HTTP request. This instance is always * assigned while performing that particular HTTP request. * <li>{@link org.beanlet.web.Session} beanlets do not provide direct access to * the underlying objects. Instead, clients obtain a stub that delegates * invocations to the underlying instance. In case of request beanlets, * the stub creates a new instance per HTTP session. This instance is always * assigned while performing a request for that particular HTTP session. * Session beanlet instances only exist while the session, for which they were * created, is active. These beanlet instances are destroyed when their HTTP * session is invalidated or expired.<br> * Session beanlets are non {@code reentrant} by default, which means that only * one thread can invoke a method of the beanlet instance at the same time. * This feature is provided by the stub, which controls all access to the * underlying instance. Session beanlets can also be configured to be reentrant. * </ul> * </p> * * <p><h3>Static versus Non-Static</h3> * Beanlets are created in either a static or a non-static context. Static, in * this context, means that beanlets are created independently from the * current state of the container or application. Static beanlets are created * at the container's discretion and therefore do not allow applications to * pass any state to this component while it is being created. Non-static * beanlets are only created upon application request. Applications can pass * objects - or state if you will - by using wiring {@code BY_INFO} dependency * injection. Use the {@link org.beanlet.BeanletMetaData} interface to find out * whether a beanlet is static, or not.</p> * * <p>The static property of a beanlet is derived from the selected beanlet scope, * i.e., singleton vanilla beanlets are static, where non-singleton vanilla * beanlets are non-static. The following table shows the static property for * all web beanlet scopes.</p> * <br> * <p><table width="400" border="1"> * <tr><td></td><th>singleton</th><th>reentrant</th><th><i>static</i></th></tr> * <tr><th>Request</th><td>N/A</td><td>N/A</td><td>false</td></tr> * <tr><th>Session</th><td>N/A</td><td>true/false</td><td>false</td></tr> * </table></p> */ package org.beanlet.web;