[ 
https://issues.apache.org/jira/browse/LABS-240?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14031882#comment-14031882
 ] 

jan iversen commented on LABS-240:
----------------------------------

Is this still an issue, if not please close it (or let me close it)

> [web] Provide before and after handlers
> ---------------------------------------
>
>                 Key: LABS-240
>                 URL: https://issues.apache.org/jira/browse/LABS-240
>             Project: Labs
>          Issue Type: New Feature
>          Components: Magma
>    Affects Versions: Current
>            Reporter: Simone Gianni
>            Assignee: Simone Gianni
>             Fix For: Future
>
>
> In a number of situation a WebHandler may want to perform some actions before 
> any call to a do or handle method. While this is achievable with aspects, 
> aspect method patterns knowledge is not require for the role of web 
> programmer, so a simpler method should be provided.
> A good way could be to use an already existing "standard", for example using 
> @Before and @After annotations similar to those provided by Junit 4 or even 
> predefined names like setup and tearDown like it was in Junit 3 and how it is 
> in the startup package.
> A good use case is, for example, when a certain value could be passed via 
> different environment methods. For example, a user preference which could be 
> present as a cookie or as a session parameter, giving precedence to one of 
> them, for example to cookies. In that case, every doMethod who wants to use 
> that user preference will end up checking if one of the two has been passed, 
> and using the most appropiate one. This could be done in a setup method, as 
> if it was an aspect.
> Also, there are actions that need to be done before or after every request, 
> or every request in a certain zone of the site.
> A good use case for this is the automatic user login. A login handler could 
> use cookies to mark a user, and then automatically log in when he comes back 
> to the site. Anyway, this should be done before any processing of the site is 
> done, cause having or not having a user could change the behaviour of a 
> number of site elements (like, display or not a login box, or a messages box 
> and so on).
> For this situation, adding setup methods to the RootWebHandler will mean 
> "call me every request". Nesting the setup method in another handler will 
> limit the scope.
> Using setup/teardown methods could bring a number of problems :
> - Performances : for the automatic login system, we need many data passed to 
> the handler, for example sessionUser, cookieUser and the like. We don't need 
> to pass the cookies if the user is already logged in for example, or even if 
> a session is already present (we need to check only the first request that 
> arrives). In more complicated situations ths could be a huge performance 
> impact.
> - Conflicts : anyone wanting to do something before every request will create 
> a setup method in the RootWebHandler, and if they need environment 
> informations (like sessionUser) they will try to add the setter. This can 
> easily lead to conflicts.
> Also there are some limitations, for example the user may expect to be able 
> to do something in the setup method, like redirecting to a login page, or 
> displaying an error page telling something as a result of parameters 
> evaluation.
> While we don't want to provide something with all the features of an aspect 
> (using which all this stuff is already possible), it could help to have the 
> setup method return an HtmlProducer. If it return null, nothing happens, if 
> it returns something, that something is returned instead of the doMethod that 
> was originally being called.
> This solution can also help mitigate the performance problem. Infact an 
> "AutomaticLoginHandler" could handle all the automatic login stuff in it's 
> doCheckForLogin method, environmental getters and setters would be placed 
> only in that handler. That do would return null by default, since there is no 
> need to do anything if the user cannot be automatically logged in. In the 
> rootWebHandler only a setup method calling that do method if no session user 
> is present is needed, avoiding the binding of all cookies if not necessary.



--
This message was sent by Atlassian JIRA
(v6.2#6252)

---------------------------------------------------------------------
To unsubscribe, e-mail: labs-unsubscr...@labs.apache.org
For additional commands, e-mail: labs-h...@labs.apache.org

Reply via email to