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]