Your logic is fine with regard to the ApplicationStateManager.

I wanted to mention the difference with the HibernateSessionManager
for the sake of anyone else that happens upon this thread.

All the best,
lasitha.

On 9/23/07, Chris Lewis <[EMAIL PROTECTED]> wrote:
> Let me restate - I do NOT need the HibernateSessionManager, but I DO
> need an ASO. ASOs are per client/request/thread, so I will have to
> figure this part out as my service is a Singleton (and I'm not convinced
> it needs to be per thread). So... couldn't I just inject a reference to
> the ApplicationStateManager into my Dispatcher, and then use it to grab
> ASOs? As long as the ApplicationStateManager accesses the current
> thread, this should work. I haven't yet put much thought into this, but
> I'm reading up now. Does my logic appear flawed?
>
> lasitha wrote:
> > AFAIK, @Inject only works on pages and components.  Services are
> > injected into via their constructors, without need of any annotations.
> >
> > Services are singletons by default, but you can use the @Scope
> > annotation to make them per-thread.
> >
> > If however you want the dispatcher to be a singleton, you've got a
> > little more work to do :)
> >
> > This recent thread about getting an ASO into a singleton service might
> > give you some ideas:  "T5 - Inject an Application State Object into a
> > Service" (Sep 12) [1]
> >
> > In your case, you need to create something similar to the
> > ApplicationStateManager to get a hold of the Session for the current
> > thread.  Unfortunately, the HibernateSessionManager [2] service won't
> > work because its also per-thread.
> >
> > Take a look at 'Shadow Services' [3] in the ioc.  I think you could
> > create a service that shadows the HibernateSessionManager.getSession()
> > method and have this injected into your dispatcher. Your dispatcher
> > and shadow service remain singletons.
> >
> > I'm afraid i don't have time to test it out, but it seems to work in my 
> > head :)
> >
> > Cheers,
> > lasitha.
> >
> > [1] 
> > http://mail-archives.apache.org/mod_mbox/tapestry-users/200709.mbox/[EMAIL 
> > PROTECTED]
> >
> > [2] 
> > http://tapestry.apache.org/tapestry5/tapestry-hibernate/apidocs/index.html?org/apache/tapestry/hibernate/HibernateSessionManager.html
> >
> > [3] http://tapestry.apache.org/tapestry5/tapestry-ioc/shadow.html
> >
> >
> > On 9/22/07, Chris Lewis <[EMAIL PROTECTED]> wrote:
> >
> >> Hi all,
> >>
> >> I'm implementing an access control service as a Dispatcher, and
> >> contributing it to the MasterDispatcher service. This dispatcher runs
> >> just before PageRender... and ComponentAction..., so that it can check
> >> if the user is allowed to access the page/resource. This seems to be a
> >> very "T5" way of doing things and completely removes the task of access
> >> control from the pages (ie i don't have to extend a base page that
> >> implements control logic).
> >> I want this service to use a database and am already using
> >> tapestry-hibernate in this project. I figured I could just @Inject the
> >> session into my service just like I would a page or component, but that
> >> doesn't work. In a way that makes sense; services are singletons if I'm
> >> not mistaken (which makes sense), and Sessions exist (and possibly
> >> injected?) per-thread. Being that my service will be started in a
> >> different thread than any request, I think @Inject is ignored.
> >>
> >> So my question is, how should I go about getting access to my database
> >> from my service? I'd like to use the blinding simplicity of of IoC just
> >> giving it to me, but I;m not sure that's an option. Any ideas?
> >>
> >> thanks,
> >> chris
> >>
> >> ---------------------------------------------------------------------
> >> 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]

Reply via email to