Actually by indirection it is also my problem ;-), and I'd like to know
if you find this not to be true. I have done some digging and chatting
(on this list) about this topic, and for all I've found this appears to
be how it is designed. As such I shape my ideas and plans around this
understanding, so if it's wrong then I'm in trouble ;-). Share some code
if you have some that suggests otherwise, and hopefully Howard will
chime in if I'm off.
sincerely,
chris
Peter Stavrinides wrote:
Hi Chris,
Thanks for the clarification, this is what I had initially thought...
however some quick and dirty tests made me doubt this, I am not sure
why it didn't turn up for me that way, I will have to check my code
again ... not your problem anyway.
Thanks again,
Peter
Chris Lewis wrote:
Hi Peter,
I'll ask Howard to verify what I say here as its a pretty important
issue. Short answer: Yes, you will get the same instance using the
state manager as you would from injection via @ApplicationState...
for simultaneous requests made by the same user (and therefore the
same request/session).
That is a very simplified answer. Its important to understand why you
can use @ApplicationState in a page but not in a singleton service.
If you read both wikis and/or docs on the state manager, you should
already have a basic understanding. Under the hood, T5 IoC uses the
state manager to retrieve page members marked as state objects with
the @ApplicationState annotation. Why? Because an instance of a page
class may be accessed simultaneously by many different requests at
the same time. In reality the annotation is just an indicator that a
page member is specific to the current request, NOT the page. Its up
to the IoC container to resolve exactly what request (session) is
associated with the requesting user, and ultimately which instance of
your ASO class. I'm quite sure this work is done by the state manager.
hope that helps
sincerely,
chris
Peter Stavrinides wrote:
Hi Chris,
Thanks for the great wiki article, I have managed to implement what
I needed using 'Tapestry5HowToCreateADispatcher2'. My implementation
is very similar to the example... it seems to work great!
One question though regarding my ASO (which is similar to your
permissions ASO), you mention "the object referenced by 'perms' is
an instance specific to the current request" does this mean that I
will *not* get the very same instance if I try inject it in a page
class using the @ApplicationState annotation?
Thanks
Peter
Chris Lewis wrote:
Hello Peter,
It sounds like by 'filter' you mean a servlet filter and not a
Tapestry filter. Your requirements sound a tad exotic to me, but
these wikis should get you on the right track:
http://wiki.apache.org/tapestry/Tapestry5HowToCreateADispatcher
http://wiki.apache.org/tapestry/Tapestry5HowToCreateADispatcher2
They focus on implementing authentication/restriction code
completely outside of the 'page' level of the application. The
focus on these is the required infrastructure, so there are some
holes left to be filled. At any rate they should be useful for you.
Note that the same thing can be achieved using a Tapestry filter:
http://tapestry.apache.org/tapestry5/apidocs/org/apache/tapestry/services/RequestFilter.html
Sincerely,
Chris
Peter Stavrinides wrote:
Hi all
My question is more of a best practice related question, I want to
use a filter to extract my authentication code from the rest of
the application logic, so I can avoid adding this logic to pages.
In addition, one of my authentication requirements involves some
integration with third party applications so I need to check for
authentication headers... to accommodate this I use a session
state object in my app (i.e. a T5 service), which is available for
the duration of a users session.
Implementing an ordinary servlet filter would do the trick for the
authentication part... but then I wouldn't be able to use it with
the IoC service. So:
1. Is there a way to register my filter with Tapestry IoC instead
of registering it in web.xml? (would I create a contribution to
the framework?)
2. Can I inject this service (i.e. my state object )into the
filter? and what does this involve i.e. eager loading etc?
I am not sure I am going about this the right way, if someone has
done something similar could I get some pointers.
Thanks in advance,
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]
---------------------------------------------------------------------
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]
---------------------------------------------------------------------
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]