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

Reply via email to