This is great Matt! thanks.
Matt Larson wrote:
Peter,
I have encountered a similar problem, and I think that the problem was
not in my code, but in where I was doing the session.invalidate(). In
trying to remove a cookie on logout, I found that I needed to do the
invalidation in an IEngineService. You can then do a redirect to
whatever page you want at that time.
This may not fit your needs, but what I did was to create my own
service via this configuration point in Hivemind:
<service-point id="LogoutService"
interface="org.apache.tapestry.engine.IEngineService">
<invoke-factory>
<construct class="tapestry.LogoutService">
<set-service property="request"
service-id="tapestry.globals.HttpServletRequest" />
<set-service property="response"
service-id="tapestry.globals.HttpServletResponse" />
<set-object property="servletPath"
value="app-property:org.apache.tapestry.servlet-path" />
<set-object property="linkFactory"
value="infrastructure:linkFactory" />
</construct>
</invoke-factory>
</service-point>
<contribution configuration-id="tapestry.services.FactoryServices">
<service name="logout" object="service:LogoutService" />
</contribution>
Then in my service method of my engine class, I did the cookie
handling and the session.invalidate() using parts of the code from
Tapestry's logout service:
public void service(IRequestCycle cycle) throws IOException {
HttpSession session = _request.getSession(false);
if (session != null) {
try {
session.invalidate();
} catch (IllegalStateException ex) {
logger.warn("Exception thrown invalidating
HttpSession.", ex);
// Otherwise, ignore it.
}
}
....[do cookie handling]
_response.sendRedirect("page_to_redirect_to.html");
}
Hope that helps.
Cheers,
Matt
Peter Stavrinides wrote:
Hi Everyone,
I want to redirect to a page (other than my home page) and invalidate
the session there.
After i call invalidate I get an exception that states the session
has already been invalidated, even if I invalidate the session on the
target page in pageEndRender. The question is how do I delay the
invalidate on the target page long enough to prevent this exception.
For Example:
public void pageEndRender(PageEvent e) {
if (getRequest().getSession(false) != null){
try {
//some clean up code here
getRequest().getSession(false).invalidate();
} catch (Exception ex){
//XXX -Exception still appears at runtime in tomcat
which cannot be caught
}
}
}
Produces The following stack trace:
WARN - Exception during post-request cleanup: setAttribute: Session
already invalidated
- org.apache.tapestry.error.RequestExceptionReporterImpl (45)
java.lang.IllegalStateException: setAttribute: Session already
invalidated
at
org.apache.catalina.session.StandardSession.setAttribute(StandardSession.java:1251)
at
org.apache.catalina.session.StandardSession.setAttribute(StandardSession.java:1233)
at
org.apache.catalina.session.StandardSessionFacade.setAttribute(StandardSessionFacade.java:129)
at
org.apache.tapestry.web.ServletWebSession.setAttribute(ServletWebSession.java:62)
at
org.apache.tapestry.engine.state.SessionScopeManager.store(SessionScopeManager.java:90)
at
$StateObjectPersistenceManager_1122965794b.store($StateObjectPersistenceManager_1122965794b.java)
at
org.apache.tapestry.engine.state.StateObjectManagerImpl.store(StateObjectManagerImpl.java:56)
at
org.apache.tapestry.engine.state.ApplicationStateManagerImpl.flush(ApplicationStateManagerImpl.java:87)
at
$ApplicationStateManager_1122965778e.flush($ApplicationStateManager_1122965778e.java)
at
$ApplicationStateManager_1122965778f.flush($ApplicationStateManager_1122965778f.java)
at
org.apache.tapestry.engine.AbstractEngine.service(AbstractEngine.java:283)
at
org.apache.tapestry.services.impl.InvokeEngineTerminator.service(InvokeEngineTerminator.java:54)
at
$WebRequestServicer_1122965784e.service($WebRequestServicer_112296578
etc....
Thanks
Peter
---------------------------------------------------------------------
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]
--
Peter Stavrinides
Albourne Partners (Cyprus) Ltd
Tel: +357 22 750652
If you are not an intended recipient of this e-mail, please notify the sender, delete it and do not read, act upon, print, disclose, copy, retain or redistribute it. Please visit http://www.albourne.com/email.html for important additional terms relating to this e-mail.
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]