Good news! I resolved this issue. Even though it was NOT a struts problem, I still wanted to post back to this forum the issue and resolution.
It was being caused by a uportal (2.5.x, 2.6.x) & pluto 1.0.1 bug. I found the following uportal patch UP-1816 "Objects attached to a PortletSession randomly disappear". http://www.ja-sig.org/issues/browse/UP-1816 Since applying that patch, the issue has disappeared. Thanks for all the suggestions! Todd Kofford tkoff...@ku.edu University of Kansas - IT -----Original Message----- From: Nils-Helge Garli Hegvik [mailto:nil...@gmail.com] Sent: Thursday, April 16, 2009 6:02 AM To: Struts Users Mailing List Subject: Re: Struts 2 Portlet - Intermittent Session Problems Great. Please post back with your findings. Nils-H On Thu, Apr 16, 2009 at 4:29 AM, Kofford, C Todd <tkoff...@ku.edu> wrote: > Well, my log didn't seem to expose the problem when compared to a log from my > local machine where the problem did not show itself, because except for the > session = {} there was no difference. > > However, I did run across this uportal-specific bug when researching the > problem more. > http://www.ja-sig.org/issues/browse/UP-1816 > > It sounds like it is the exact same problem that I've been seeing. I'll test > the patch tomorrow and post the results (crossing fingers). > > I know that this is a struts forum, but I wanted to make sure that I didn't > leave this issue hanging, just in case others using struts & uportal come > across this issue. > > Todd Kofford > tkoff...@ku.edu > University of Kansas - IT > > -----Original Message----- > From: Kofford, C Todd [mailto:tkoff...@ku.edu] > Sent: Wed 4/15/2009 4:04 PM > To: Struts Users Mailing List > Subject: RE: Struts 2 Portlet - Intermittent Session Problems > > OK, I've now got a log with a sequence of events that causes the problem (see > below). However, I'm still not sure that I can determine where the request(s) > went wrong except for where session = {}. > > Any help would be appreciated. This one is driving me crazy. > > --Todd > > DEBUG [http-8090-Processor20] [localhost].[/Parking].[] Apr/15 14:58:17 - > servletPath=/Permits, pathInfo=null, queryString=null, name=null > DEBUG [http-8090-Processor20] [localhost].[/Parking].[] Apr/15 14:58:17 - > Path Based Include > DEBUG [http-8090-Processor20] dispatcher.Jsr168Dispatcher.[] Apr/15 14:58:17 > - Entering processAction > DEBUG [http-8090-Processor20] dispatcher.Jsr168Dispatcher.[] Apr/15 14:58:17 > - serviceAction > DEBUG [http-8090-Processor20] dispatcher.Jsr168Dispatcher.[] Apr/15 14:58:17 > - Creating action proxy for name = permitHomeIdBox, namespace = /permits > DEBUG [http-8090-Processor20] xwork2.DefaultActionProxy.[] Apr/15 14:58:17 - > Creating an DefaultActionProxy for namespace /permits and action name > permitHomeIdBox > DEBUG [http-8090-Processor20] interceptor.I18nInterceptor.[] Apr/15 14:58:17 > - intercept '/permits/permitHomeIdBox' { > DEBUG [http-8090-Processor20] interceptor.I18nInterceptor.[] Apr/15 14:58:17 > - before Locale=en_US > DEBUG [http-8090-Processor20] interceptor.PrefixMethodInvocationUtil.[] > Apr/15 14:58:17 - cannot find method [prepareIdBox] in action > [edu.ku.it.sdd.si.parking.permits.action.permitsh...@7f2a19] > DEBUG [http-8090-Processor20] interceptor.PrefixMethodInvocationUtil.[] > Apr/15 14:58:17 - cannot find method [prepareDoIdBox] in action > [edu.ku.it.sdd.si.parking.permits.action.permitsh...@7f2a19] > DEBUG [http-8090-Processor20] impl.InstantiatingNullHandler.[] Apr/15 > 14:58:17 - Entering nullPropertyValue > [target=[edu.ku.it.sdd.si.parking.permits.action.permitsh...@7f2a19, > com.opensymphony.xwork2.defaulttextprovi...@178991], property=id] > DEBUG [http-8090-Processor20] PermitBaseAction.[] Apr/15 14:58:17 - session = > {isPortletApp=true, parkingID=100080, > struts.portlet.valuestackfromeventphase=com.opensymphony.xwork2.ognl.ognlvaluest...@ba168e, > faculty=edu.ku.it.sdd.si.parking.model.facultyrec...@1aac3f8} > DEBUG [http-8090-Processor20] PermitBaseAction.[] Apr/15 14:58:17 - Session > (A48726E2C673AA84704CB021D1017827): retrieveFromSession() called, retriving > key: student > DEBUG [http-8090-Processor20] PermitBaseAction.[] Apr/15 14:58:17 - Session > (A48726E2C673AA84704CB021D1017827): retrieveFromSession() called, retriving > key: faculty > DEBUG [http-8090-Processor20] PermitBaseAction.[] Apr/15 14:58:17 - Session > (A48726E2C673AA84704CB021D1017827): retrieveFromSession() called, retriving > key: permitOrder > DEBUG [http-8090-Processor20] PermitBaseAction.[] Apr/15 14:58:17 - Session > (A48726E2C673AA84704CB021D1017827): retrieveFromSession() called, retriving > key: isPortletApp > DEBUG [http-8090-Processor20] impl.InstantiatingNullHandler.[] Apr/15 > 14:58:17 - Entering nullPropertyValue > [target=[edu.ku.it.sdd.si.parking.permits.action.permitsh...@7f2a19, > com.opensymphony.xwork2.defaulttextprovi...@178991], property=struts] > DEBUG [http-8090-Processor20] interceptor.FileUploadInterceptor.[] Apr/15 > 14:58:17 - Bypassing /permits/permitHomeIdBox > DEBUG [http-8090-Processor20] interceptor.StaticParametersInterceptor.[] > Apr/15 14:58:17 - Setting static parameters {} > DEBUG [http-8090-Processor20] interceptor.ParametersInterceptor.[] Apr/15 > 14:58:17 - Setting params NONE > DEBUG [http-8090-Processor20] interceptor.ParametersInterceptor.[] Apr/15 > 14:58:17 - Setting params employeeid => [ 1359156 ] struts.portlet.action => > [ /permits/permits/permitHomeIdBox ] struts.portlet.mode => [ view ] > studentid => [ ] > DEBUG [http-8090-Processor20] impl.XWorkConverter.[] Apr/15 14:58:17 - > Property: employeeid > DEBUG [http-8090-Processor20] impl.XWorkConverter.[] Apr/15 14:58:17 - Class: > edu.ku.it.sdd.si.parking.permits.action.PermitsHome > DEBUG [http-8090-Processor20] impl.XWorkConverter.[] Apr/15 14:58:17 - > field-level type converter for property [employeeid] = none found > DEBUG [http-8090-Processor20] impl.XWorkConverter.[] Apr/15 14:58:17 - > global-level type converter for property [employeeid] = none found > DEBUG [http-8090-Processor20] impl.XWorkConverter.[] Apr/15 14:58:17 - > falling back to default type converter > [com.opensymphony.xwork2.conversion.impl.xworkbasicconver...@2083d] > DEBUG [http-8090-Processor20] impl.XWorkConverter.[] Apr/15 14:58:17 - > Property: studentid > DEBUG [http-8090-Processor20] impl.XWorkConverter.[] Apr/15 14:58:17 - Class: > edu.ku.it.sdd.si.parking.permits.action.PermitsHome > DEBUG [http-8090-Processor20] impl.XWorkConverter.[] Apr/15 14:58:17 - > field-level type converter for property [studentid] = none found > DEBUG [http-8090-Processor20] impl.XWorkConverter.[] Apr/15 14:58:17 - > global-level type converter for property [studentid] = none found > DEBUG [http-8090-Processor20] impl.XWorkConverter.[] Apr/15 14:58:17 - > falling back to default type converter > [com.opensymphony.xwork2.conversion.impl.xworkbasicconver...@2083d] > DEBUG [http-8090-Processor20] validation.AnnotationValidationInterceptor.[] > Apr/15 14:58:17 - Validating /permits/permitHomeIdBox with method idBox. > DEBUG [http-8090-Processor20] interceptor.DefaultWorkflowInterceptor.[] > Apr/15 14:58:17 - Invoking validate() on action > edu.ku.it.sdd.si.parking.permits.action.permitsh...@7f2a19 > DEBUG [http-8090-Processor20] xwork2.DefaultActionInvocation.[] Apr/15 > 14:58:17 - Executing action method = idBox > DEBUG [http-8090-Processor20] PermitBaseAction.[] Apr/15 14:58:17 - Session > (A48726E2C673AA84704CB021D1017827): resetSession() called > DEBUG [http-8090-Processor20] PermitBaseAction.[] Apr/15 14:58:17 - Session > (A48726E2C673AA84704CB021D1017827): removeFromSession() called, removing key: > faculty > DEBUG [http-8090-Processor20] PermitBaseAction.[] Apr/15 14:58:17 - Session > (A48726E2C673AA84704CB021D1017827): saveToSession() called, saving key: > faculty > DEBUG [http-8090-Processor20] result.PortletResult.[] Apr/15 14:58:17 - > Executing result in Event phase > DEBUG [http-8090-Processor20] result.PortletResult.[] Apr/15 14:58:17 - > Setting event render parameter: /permits/selectPermitInput.action > DEBUG [http-8090-Processor20] interceptor.I18nInterceptor.[] Apr/15 14:58:17 > - after Locale=en_US > DEBUG [http-8090-Processor20] interceptor.I18nInterceptor.[] Apr/15 14:58:17 > - intercept } > DEBUG [http-8090-Processor20] dispatcher.Jsr168Dispatcher.[] Apr/15 14:58:17 > - Leaving processAction > DEBUG [Thread-62] [localhost].[/Parking].[] Apr/15 14:58:18 - > servletPath=/Permits, pathInfo=null, queryString=null, name=null > DEBUG [Thread-62] [localhost].[/Parking].[] Apr/15 14:58:18 - Path Based > Include > DEBUG [Thread-62] dispatcher.Jsr168Dispatcher.[] Apr/15 14:58:18 - Entering > render > DEBUG [Thread-62] dispatcher.Jsr168Dispatcher.[] Apr/15 14:58:18 - > serviceAction > DEBUG [Thread-62] dispatcher.Jsr168Dispatcher.[] Apr/15 14:58:18 - Creating > action proxy for name = selectPermitInput, namespace = /permits > DEBUG [Thread-62] xwork2.DefaultActionProxy.[] Apr/15 14:58:18 - Creating an > DefaultActionProxy for namespace /permits and action name selectPermitInput > DEBUG [Thread-62] interceptor.PortletStateInterceptor.[] Apr/15 14:58:18 - > Won't restore stack from event phase since it's a proper PRG request > DEBUG [Thread-62] interceptor.I18nInterceptor.[] Apr/15 14:58:18 - intercept > '/permits/selectPermitInput' { > DEBUG [Thread-62] interceptor.I18nInterceptor.[] Apr/15 14:58:18 - before > Locale=en_US > DEBUG [Thread-62] interceptor.PrefixMethodInvocationUtil.[] Apr/15 14:58:18 - > cannot find method [prepareInput] in action > [edu.ku.it.sdd.si.parking.permits.action.selectperm...@a4ffc6] > DEBUG [Thread-62] interceptor.PrefixMethodInvocationUtil.[] Apr/15 14:58:18 - > cannot find method [prepareDoInput] in action > [edu.ku.it.sdd.si.parking.permits.action.selectperm...@a4ffc6] > DEBUG [Thread-62] PermitBaseAction.[] Apr/15 14:58:18 - session = {} > DEBUG [Thread-62] PermitBaseAction.[] Apr/15 14:58:18 - Session > (A48726E2C673AA84704CB021D1017827): retrieveFromSession() called, retriving > key: student > DEBUG [Thread-62] PermitBaseAction.[] Apr/15 14:58:18 - Session > (A48726E2C673AA84704CB021D1017827): retrieveFromSession() called, retriving > key: faculty > DEBUG [Thread-62] PermitBaseAction.[] Apr/15 14:58:18 - Session > (A48726E2C673AA84704CB021D1017827): retrieveFromSession() called, retriving > key: permitOrder > DEBUG [Thread-62] PermitBaseAction.[] Apr/15 14:58:18 - Session > (A48726E2C673AA84704CB021D1017827): retrieveFromSession() called, retriving > key: isPortletApp > ERROR [Thread-62] PermitBaseAction.[] Apr/15 14:58:18 - PARKING PERMITS > ERROR [Thread-62] PermitBaseAction.[] Apr/15 14:58:18 - Parking id: 0 > ERROR [Thread-62] PermitBaseAction.[] Apr/15 14:58:18 - Date/time: 2009-04-15 > 14:58:18 > ERROR [Thread-62] PermitBaseAction.[] Apr/15 14:58:18 - > ERROR [Thread-62] PermitBaseAction.[] Apr/15 14:58:18 - > java.lang.NullPointerException > at > edu.ku.it.sdd.si.parking.permits.service.PermitSelectionServiceImpl.getAllowedPermitsEmployee(PermitSelectionServiceImpl.java:73) > at > edu.ku.it.sdd.si.parking.permits.action.SelectPermits.prepare(SelectPermits.java:86) > at > com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:134) > ... > > > > -----Original Message----- > From: Kofford, C Todd [mailto:tkoff...@ku.edu] > Sent: Wednesday, April 15, 2009 8:57 AM > To: Struts Users Mailing List > Subject: RE: Struts 2 Portlet - Intermittent Session Problems > > I've been trying to reproduce the problem, but can't do it consistently. I've > never seen it when running on localhost only on our test server. I've also > been cleaning up a lot of code, and I'm still not ruling out a logic (code) > error. > > No I'm not calling session.clear(), when I remove objects from session, I > specifically remove the object that I put there in the first place, > session.remove(key); Curious though, if I did call session.clear(), would a > new session be created on the next request, or would the invalidated session > persist? > > I've put more thorough logging into the application in all areas that concern > session and have also added a session listener (HttpSessionListener) to log > when sessions are created and destroyed. > > Todd Kofford > tkoff...@ku.edu > University of Kansas - IT > > > -----Original Message----- > From: Nils-Helge Garli Hegvik [mailto:nil...@gmail.com] > Sent: Wednesday, April 15, 2009 8:46 AM > To: Struts Users Mailing List > Subject: Re: Struts 2 Portlet - Intermittent Session Problems > > It would be helpful if you tried it in a different container and > report your findings, and/or create a JIRA issue with a small sameple > application that can be used to reproduce the error. > > Are you by any chance calling "clear()" on the session map? That would > invalidate the session. > > Nils-H > > On Wed, Apr 15, 2009 at 3:40 PM, Kofford, C Todd <tkoff...@ku.edu> wrote: >> I'm using session scope (implements SessionAware). >> >> No, I haven't deployed to a different portlet container. >> >> Todd Kofford >> tkoff...@ku.edu >> University of Kansas - IT >> >> >> -----Original Message----- >> From: Nils-Helge Garli Hegvik [mailto:nil...@gmail.com] >> Sent: Wednesday, April 15, 2009 4:05 AM >> To: Struts Users Mailing List >> Subject: Re: Struts 2 Portlet - Intermittent Session Problems >> >> As long as you're using the portlet session, and not the >> APPLICATION_SCOPE session, the sessions shouldn't interfere. Which >> container are you running in? Have you tried deploying to a different >> portlet container? >> >> Nils-H >> >> On Tue, Apr 14, 2009 at 8:01 PM, Kofford, C Todd <tkoff...@ku.edu> wrote: >>> Hi Nils, >>> >>> Well this issue cannot be reproduced on a consistent basis. I can do the >>> same operation 4 times and 3 of the 4 times it works properly, but one time >>> it doesn't and the session disappears. It's very random. >>> >>> One thing that might be noteworthy is that I have 2 portlets defined for >>> the same web application. To clarify, I have one parking web application >>> that handles both citations and permit purchases. Citations and Permits are >>> defined as two individual portlets in the our portal, and both point to the >>> same parking webapp. >>> >>> I don't know if this is an issue or not. As random as this error is, I'm >>> wondering if the some jars are getting loaded up twice by tomcat and >>> randomly switching between two copies (of the same jar) as the requests are >>> processed. >>> >>> Also to note is that this problem does not happen when the application(s) >>> are run outside the portal (i.e. as standalone webapps). >>> >>> Todd Kofford >>> tkoff...@ku.edu >>> University of Kansas - IT >>> >>> >>> -----Original Message----- >>> From: Nils-Helge Garli Hegvik [mailto:nil...@gmail.com] >>> Sent: Friday, April 10, 2009 5:20 PM >>> To: Struts Users Mailing List >>> Subject: Re: Struts 2 Portlet - Intermittent Session Problems >>> >>> Hi! >>> >>> The PortletStateInterceptor does nothing special with the Session. It >>> certainly does not invalidate it or remove stuff that's already there. >>> The debug statement that you see is an indication that the portlet has >>> been executed in the event phase, and the result has been properly >>> configured with a redirectAction result. As a matter of fact, that log >>> statement indicates that the interceptor is bypassing it's normal >>> executing and does essentially nothing. >>> >>> Is this something you can reproduce consistently? In that case, do you >>> have a sample that you could attach to a JIRA issue? Without more >>> information, it's impossible to say what the problem could be (besides >>> a regular session timeout or something...) >>> >>> Nils-H >>> >>> On Fri, Apr 10, 2009 at 10:13 PM, Kofford, C Todd <tkoff...@ku.edu> wrote: >>>> I have a struts 2 (version 2.1.6) portlet that I keep seeing >>>> intermittent problems with the session being wiped out. Each time this >>>> happens I see the following messages in the log: >>>> >>>> DEBUG [Thread-57] interceptor.PortletStateInterceptor.[] Apr/10 14:26:57 >>>> - Won't restore stack from event phase since it's a proper PRG request >>>> ... >>>> DEBUG [Thread-57] PermitBaseAction.[] Apr/10 14:26:57 - session = {} >>>> >>>> I'm not sure what is going on here. In the event phase just prior to >>>> this render phase, my session is populated but then the "...proper RPG >>>> request" happens and my session is gone. I'm assuming that the portlet >>>> plugin gets into an invalid/mixed up state. But what would cause this? >>>> >>>> Any help would be appreciated. >>>> >>>> Todd Kofford >>>> tkoff...@ku.edu >>>> University of Kansas - IT >>>> >>>> >>>> --------------------------------------------------------------------- >>>> To unsubscribe, e-mail: user-unsubscr...@struts.apache.org >>>> For additional commands, e-mail: user-h...@struts.apache.org >>>> >>>> >>> >>> --------------------------------------------------------------------- >>> To unsubscribe, e-mail: user-unsubscr...@struts.apache.org >>> For additional commands, e-mail: user-h...@struts.apache.org >>> >>> >>> --------------------------------------------------------------------- >>> To unsubscribe, e-mail: user-unsubscr...@struts.apache.org >>> For additional commands, e-mail: user-h...@struts.apache.org >>> >>> >> >> --------------------------------------------------------------------- >> To unsubscribe, e-mail: user-unsubscr...@struts.apache.org >> For additional commands, e-mail: user-h...@struts.apache.org >> >> >> --------------------------------------------------------------------- >> To unsubscribe, e-mail: user-unsubscr...@struts.apache.org >> For additional commands, e-mail: user-h...@struts.apache.org >> >> > > --------------------------------------------------------------------- > To unsubscribe, e-mail: user-unsubscr...@struts.apache.org > For additional commands, e-mail: user-h...@struts.apache.org > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: user-unsubscr...@struts.apache.org > For additional commands, e-mail: user-h...@struts.apache.org > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: user-unsubscr...@struts.apache.org > For additional commands, e-mail: user-h...@struts.apache.org > > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: user-unsubscr...@struts.apache.org > For additional commands, e-mail: user-h...@struts.apache.org > > --------------------------------------------------------------------- To unsubscribe, e-mail: user-unsubscr...@struts.apache.org For additional commands, e-mail: user-h...@struts.apache.org --------------------------------------------------------------------- To unsubscribe, e-mail: user-unsubscr...@struts.apache.org For additional commands, e-mail: user-h...@struts.apache.org