seems so:-)

I just wrote an util class, you may use it if you need :-)

HTH Leon

package xxx-omitted-xxx;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import javax.servlet.jsp.PageContext;

import org.apache.log4j.Logger;

public class BeanUtil {
        
        private static Logger logger;
        
        public static void setLogger(Logger aLogger){
                logger = aLogger;
        }
        
        public static Logger getLogger(){
                return logger;
        }
        
        public static void addBeanToSessionUnsafe(
                        HttpServletRequest request,
                        String key,
                        Object value) {

                addBean(request, PageContext.SESSION_SCOPE, key, value);
        }

        public static void addBeanToApplication(
                HttpServletRequest request,
                String key,
                Object value) {
                addBean(request, PageContext.APPLICATION_SCOPE, key, value);
        }

        public static void addBeanToRequest(
                HttpServletRequest request,
                String key,
                Object value) {
                addBean(request, PageContext.REQUEST_SCOPE, key, value);
        }

        public static Object getBeanFromSessionUnsafe(
                HttpServletRequest request,
                String key) {
                return getBean(request, PageContext.SESSION_SCOPE, key);
        }

        public static Object getBeanFromApplication(
                HttpServletRequest request,
                String key) {
                return getBean(request, PageContext.APPLICATION_SCOPE, key);
        }

        public static Object getBeanFromRequest(
                HttpServletRequest request,
                String key) {
                return getBean(request, PageContext.REQUEST_SCOPE, key);
        }

        public static void removeBeanFromSessionUnsafe(
                HttpServletRequest request,
                String key) {
                removeBean(request, PageContext.SESSION_SCOPE, key);
        }

        public static void removeBeanFromApplication(
                HttpServletRequest request,
                String key) {
                removeBean(request, PageContext.APPLICATION_SCOPE, key);
        }

        public static void removeBeanFromRequest(
                HttpServletRequest request,
                String key) {
                removeBean(request, PageContext.REQUEST_SCOPE, key);
        }

        public static void addBean(
                HttpServletRequest request,
                int scope,
                String key,
                Object value) {

                switch (scope) {
                        case PageContext.APPLICATION_SCOPE :
                                if (logger!=null)
                                        logger.debug("addBean " + key + " to 
APPLICATION_SCOPE, value=" +
value);
                                
request.getSession().getServletContext().setAttribute(key, value);
                        break;
                        case PageContext.SESSION_SCOPE :
                                if (logger!=null)
                                        logger.debug("addBean " + key + " to 
SESSION_SCOPE, value=" +
value);
                                request.getSession().setAttribute(key, value);
                                break;
                        case PageContext.REQUEST_SCOPE :
                                if (logger!=null)
                                        logger.debug("addBean " + key + " to 
REQUEST_SCOPE, value=" +
value);
                                request.setAttribute(key, value);
                                break;

                        default :
                                throw new RuntimeException("Unknown scope:" + 
scope);
                }
        }

        public static Object getBean(HttpServletRequest request,        int 
scope,
String key) {
                switch (scope) {
                        case PageContext.APPLICATION_SCOPE :
                                        return 
request.getSession().getServletContext().getAttribute(key);
                        case PageContext.SESSION_SCOPE :
                                return request.getSession().getAttribute(key);
                        case PageContext.REQUEST_SCOPE :
                                return request.getAttribute(key);
                        default :
                                throw new RuntimeException("Unknown scope:" + 
scope);
                }
        }

        public static void removeBean(HttpServletRequest request, int scope,
String key) {
                switch (scope) {
                        case PageContext.APPLICATION_SCOPE :
                                
request.getSession().getServletContext().removeAttribute(key);
                                break;

                        case PageContext.SESSION_SCOPE :
                                request.getSession().removeAttribute(key);
                                break;

                        case PageContext.REQUEST_SCOPE :
                                request.removeAttribute(key);
                                break;

                        default :
                                throw new RuntimeException("Unknown scope:" + 
scope);
                }
        }

        public static void addBeanToSessionSafe(HttpServletRequest request,
String key, Object value) {
                HttpSession session = request.getSession();
                if (logger!=null)
                        logger.debug("addBean " + key + " to SESSION_SCOPE, 
value=" + value);
                synchronized(session){
                        session.setAttribute(key, value);
                }
        }
        
        public static void removeBeanFromSessionSafe(HttpServletRequest
request, String key){
                HttpSession session = request.getSession();
                if (logger!=null)
                        logger.debug("removeBean " + key + " from 
SESSION_SCOPE");
                synchronized(session){
                        session.removeAttribute(key);
                }
        }

        public static Object getBeanFromSessionSafe(HttpServletRequest request,
String key) {
                HttpSession session = request.getSession();
                Object value = null;
                synchronized(session){
                        value = session.getAttribute(key);
                }

                if (logger!=null)
                        logger.debug("getBean " + key + " from SESSION_SCOPE: 
"+value);
                return value;
        }

        
}


On Tue, 2005-09-06 at 16:41 +0100, Arup Vidyerthy wrote:
> Guys,
> 
> I have been watching this thread with interest.
> 
> Does this mean that all session.setAttribute() and session.getAttribute()
> should always be synchronised (for instance, inside a servlet or struts
> action) provided the same hashmap is accessed by say more than one
> servlet/struts action?
> 
> Kind regards...
> Arup Vidyerthy. 
> 
> -----Original Message-----
> From: Caldarale, Charles R [mailto:[EMAIL PROTECTED] 
> Sent: 06 September 2005 15:54
> To: Tomcat Users List
> Subject: RE: Tomcat/JVM hangs in session.getAttribute / HashMap.get()
> 
> > From: Leon Rosenberg [mailto:[EMAIL PROTECTED]
> > Subject: RE: Tomcat/JVM hangs in session.getAttribute / HashMap.get()
> > 
> > and replace all req.getSession().setAttribute(beanName, beanValue) in 
> > code with the call to this method (same for remove) and I've solved my 
> > problem?
> 
> Unfortunately, you also need to change the places that retrieve attributes
> from the Session, since the hash map is in a state of flux during the
> setAttribute() invocations.
> 
>  - Chuck
> 
> 
> THIS COMMUNICATION MAY CONTAIN CONFIDENTIAL AND/OR OTHERWISE PROPRIETARY
> MATERIAL and is thus for use only by the intended recipient. If you received
> this in error, please contact the sender and delete the e-mail and its
> attachments from all computers.
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
> 
> 
>               
> ___________________________________________________________ 
> To help you stay safe and secure online, we've developed the all new Yahoo! 
> Security Centre. http://uk.security.yahoo.com
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
> 
> 



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to