001    /*
002     * ============================================================================
003     * GNU Lesser General Public License
004     * ============================================================================
005     *
006     * Beanlet - JSE Application Container.
007     * Copyright (C) 2006  Leon van Zantvoort
008     * 
009     * This library is free software; you can redistribute it and/or
010     * modify it under the terms of the GNU Lesser General Public
011     * License as published by the Free Software Foundation; either
012     * version 2.1 of the License, or (at your option) any later version.
013     * 
014     * This library is distributed in the hope that it will be useful,
015     * but WITHOUT ANY WARRANTY; without even the implied warranty of
016     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
017     * Lesser General Public License for more details.
018     * 
019     * You should have received a copy of the GNU Lesser General Public
020     * License along with this library; if not, write to the Free Software
021     * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307, USA.
022     * 
023     * Leon van Zantvoort
024     * 243 Acalanes Drive #11
025     * Sunnyvale, CA 94086
026     * USA
027     *
028     * zantvoort@users.sourceforge.net
029     * http://beanlet.org
030     */
031    package org.beanlet.web;
032    
033    import java.lang.annotation.ElementType;
034    import java.lang.annotation.Retention;
035    import java.lang.annotation.RetentionPolicy;
036    import java.lang.annotation.Target;
037    import org.beanlet.ScopeAnnotation;
038    
039    /**
040     * <p>Session beanlets do not provide direct access to the
041     * underlying objects. Instead, clients obtain a stub that delegates 
042     * invocations to the underlying instance. In case of request beanlets, 
043     * the stub creates a new instance per HTTP session. This instance is always 
044     * assigned while performing a request for that particular HTTP session. 
045     * Session beanlet instances only exist while the session, for which they were
046     * created, is active. These beanlet instances are destroyed when their HTTP 
047     * session is invalidated or expired.<br>
048     * Session beanlets are non {@code reentrant} by default, which means that only 
049     * one thread can invoke a method of the beanlet instance at the same time. 
050     * This feature is provided by the stub, which controls all access to the 
051     * underlying instance. Session beanlets can also be configured to be reentrant.</p>
052     *
053     * {@beanlet.annotation}
054     *
055     * @see ScopeAnnotation
056     * @author Leon van Zantvoort
057     */
058    @ScopeAnnotation
059    @Retention(RetentionPolicy.RUNTIME)
060    @Target(ElementType.TYPE)
061    public @interface Session {
062    
063        /**
064         * Specifies whether the beanlet instances should be reentrant or not. 
065         * Instances of reentrant beanlets can be invoked by multiple threads at
066         * the same time.
067         */
068        boolean reentrant() default false;
069    }