You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@tapestry.apache.org by "Thiago H. de Paula Figueiredo" <th...@gmail.com> on 2011/09/15 00:19:47 UTC

Re: Ajax events, expired session and @Persist fields

On Wed, 14 Sep 2011 16:25:14 -0300, Lenny Primak <lp...@hope.nyc.ny.us>  
wrote:

> This is a design/best practices question.
> We set up @Persist fields inside @SetupRender method.
> When a session is invalid/expired and an Ajax event is called,
> All these fields at null.
> The question is if there is a better way to handle this situation than  
> having to check for Null in every Ajax event method for every @Persist  
> field?

You don't need to check all of them, just whether  
Request.getSession(false) returns null or not.

> I was thinking that @SetupRender should be called in case of session  
> expiration during Ajax call.

I don't like this solution at all, as it uses a component event handler  
for doing something completely unrelated to rendering. You can even write  
class transformation to add some logic to be executed in AJAX requests  
when the session isn't valid. Taha wrote something similar (the @XHR  
annotation) in his Tapestry Magic blog:  
http://tawus.wordpress.com/2011/04/16/tapestry-magic-2-ajax-with-graceful-degradation/.

On the other hand, I guess it's possible to implement a service that  
notifies listeners when the session is killed. I don't think it's possible  
to discern between timeout and normal session invalidation.

-- 
Thiago H. de Paula Figueiredo
Independent Java, Apache Tapestry 5 and Hibernate consultant, developer,  
and instructor
Owner, Ars Machina Tecnologia da Informação Ltda.
http://www.arsmachina.com.br

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
For additional commands, e-mail: users-help@tapestry.apache.org


Re: Ajax events, expired session and @Persist fields

Posted by Lenny Primak <lp...@hope.nyc.ny.us>.
Thanks Thiago. I will try all these options and report the results. 



On Sep 14, 2011, at 5:19 PM, "Thiago H. de Paula Figueiredo" <th...@gmail.com> wrote:

> On Wed, 14 Sep 2011 16:25:14 -0300, Lenny Primak <lp...@hope.nyc.ny.us> wrote:
> 
>> This is a design/best practices question.
>> We set up @Persist fields inside @SetupRender method.
>> When a session is invalid/expired and an Ajax event is called,
>> All these fields at null.
>> The question is if there is a better way to handle this situation than having to check for Null in every Ajax event method for every @Persist field?
> 
> You don't need to check all of them, just whether Request.getSession(false) returns null or not.
> 
>> I was thinking that @SetupRender should be called in case of session expiration during Ajax call.
> 
> I don't like this solution at all, as it uses a component event handler for doing something completely unrelated to rendering. You can even write class transformation to add some logic to be executed in AJAX requests when the session isn't valid. Taha wrote something similar (the @XHR annotation) in his Tapestry Magic blog: http://tawus.wordpress.com/2011/04/16/tapestry-magic-2-ajax-with-graceful-degradation/.
> 
> On the other hand, I guess it's possible to implement a service that notifies listeners when the session is killed. I don't think it's possible to discern between timeout and normal session invalidation.
> 
> -- 
> Thiago H. de Paula Figueiredo
> Independent Java, Apache Tapestry 5 and Hibernate consultant, developer, and instructor
> Owner, Ars Machina Tecnologia da Informação Ltda.
> http://www.arsmachina.com.br
> 

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
For additional commands, e-mail: users-help@tapestry.apache.org


Re: Ajax events, expired session and @Persist fields

Posted by Lenny Primak <lp...@hope.nyc.ny.us>.
I finally figured out how to handle Ajax events and sessions from the @XHR annotation.
It involved Thiago's suggested SessionState object, but as a means of communicating
between the annotation worker and the session state tracker.
The session state tracker turned out to be pretty complex, unfortunately.
I will try to get the results posted on the wiki along with other integrations that I had to go through.

Thanks for your help!

On Sep 19, 2011, at 1:00 AM, Lenny Primak wrote:

> I finally had a chance to try these methods, unfortunately with little success.
> 
> Yes, I can check only one @Persist field for null to see whether the session still exists, which works.
> Request.getSession(false) does not really work, because a new (empty) session can be created
> within this request by other parts of the code, which is correct behavior.  
> 
> I tried the @XHR method as well, but I could not get the annotated method not to get invoked at all.
> Whether I call 'invocation.proceed()' or not, the method would still get invoked and throw NullPointerException.
> 
> I would love to make @XHR method to work, just not call the Ajax method if any of the @Persist variables are null, 
> but still no luck.
> 
> Any other ideas?
> Thanks!
> 
> On Sep 14, 2011, at 6:19 PM, Thiago H. de Paula Figueiredo wrote:
> 
>> On Wed, 14 Sep 2011 16:25:14 -0300, Lenny Primak <lp...@hope.nyc.ny.us> wrote:
>> 
>>> This is a design/best practices question.
>>> We set up @Persist fields inside @SetupRender method.
>>> When a session is invalid/expired and an Ajax event is called,
>>> All these fields at null.
>>> The question is if there is a better way to handle this situation than having to check for Null in every Ajax event method for every @Persist field?
>> 
>> You don't need to check all of them, just whether Request.getSession(false) returns null or not.
>> 
>>> I was thinking that @SetupRender should be called in case of session expiration during Ajax call.
>> 
>> I don't like this solution at all, as it uses a component event handler for doing something completely unrelated to rendering. You can even write class transformation to add some logic to be executed in AJAX requests when the session isn't valid. Taha wrote something similar (the @XHR annotation) in his Tapestry Magic blog: http://tawus.wordpress.com/2011/04/16/tapestry-magic-2-ajax-with-graceful-degradation/.
>> 
>> On the other hand, I guess it's possible to implement a service that notifies listeners when the session is killed. I don't think it's possible to discern between timeout and normal session invalidation.
>> 
>> -- 
>> Thiago H. de Paula Figueiredo
>> Independent Java, Apache Tapestry 5 and Hibernate consultant, developer, and instructor
>> Owner, Ars Machina Tecnologia da Informação Ltda.
>> http://www.arsmachina.com.br
>> 
> 


---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
For additional commands, e-mail: users-help@tapestry.apache.org


Re: Ajax events, expired session and @Persist fields

Posted by Lenny Primak <lp...@hope.nyc.ny.us>.
I finally had a chance to try these methods, unfortunately with little success.

Yes, I can check only one @Persist field for null to see whether the session still exists, which works.
Request.getSession(false) does not really work, because a new (empty) session can be created
within this request by other parts of the code, which is correct behavior.  

I tried the @XHR method as well, but I could not get the annotated method not to get invoked at all.
Whether I call 'invocation.proceed()' or not, the method would still get invoked and throw NullPointerException.

I would love to make @XHR method to work, just not call the Ajax method if any of the @Persist variables are null, 
but still no luck.

Any other ideas?
Thanks!

On Sep 14, 2011, at 6:19 PM, Thiago H. de Paula Figueiredo wrote:

> On Wed, 14 Sep 2011 16:25:14 -0300, Lenny Primak <lp...@hope.nyc.ny.us> wrote:
> 
>> This is a design/best practices question.
>> We set up @Persist fields inside @SetupRender method.
>> When a session is invalid/expired and an Ajax event is called,
>> All these fields at null.
>> The question is if there is a better way to handle this situation than having to check for Null in every Ajax event method for every @Persist field?
> 
> You don't need to check all of them, just whether Request.getSession(false) returns null or not.
> 
>> I was thinking that @SetupRender should be called in case of session expiration during Ajax call.
> 
> I don't like this solution at all, as it uses a component event handler for doing something completely unrelated to rendering. You can even write class transformation to add some logic to be executed in AJAX requests when the session isn't valid. Taha wrote something similar (the @XHR annotation) in his Tapestry Magic blog: http://tawus.wordpress.com/2011/04/16/tapestry-magic-2-ajax-with-graceful-degradation/.
> 
> On the other hand, I guess it's possible to implement a service that notifies listeners when the session is killed. I don't think it's possible to discern between timeout and normal session invalidation.
> 
> -- 
> Thiago H. de Paula Figueiredo
> Independent Java, Apache Tapestry 5 and Hibernate consultant, developer, and instructor
> Owner, Ars Machina Tecnologia da Informação Ltda.
> http://www.arsmachina.com.br
> 


---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
For additional commands, e-mail: users-help@tapestry.apache.org