Also, build methods go in the appmodule, right? Guess it wasn't my final question. :)
Also, are RequestFilters per-Thread, or Singleton? Can they be per-thread if needed? -Daniel On Thu, Apr 9, 2009 at 7:42 PM, daniel joyce <daniel.a.jo...@gmail.com> wrote: > I also found a HttpServletRequestFilter. > > Thanks for the response, it helps to explain a lot. > > I am finding my biggest problem is the documentation. I have OReilley > safari access, and the Tapestry 5 book there leaves out about half > features. What is needed is a tapestry cookbook/recipe style thing. > How to make a service, How to make a filter. > > One final question. In the document examples on service building, > sometimes the build method is called build, othertimes buildFoo where > foo is the service being built. Which is correct, or does it matter? > > -Daniel > > On Thu, Apr 9, 2009 at 7:10 PM, Robert Zeigler <robe...@scazdl.org> wrote: >> Autobuilder vs. builder vs. constructor: >> >> Depends on your needs. These aren't mutually exclusive, either. >> >> a) Tapestry's ioc container will attempt to use an "ObjectLocator" to fill >> in the arguments to the constructor; one such object provider is a service >> injection provider. >> So, though it used to be that you /had/ to specify @InjectService on >> constructor arguments, it's not so anymore. There are cases where using >> @InjectService with a specific service id is still useful (to avoid >> dependency recursion issues, for example). But often, you can just put the >> service interface in and have it "work". >> >> b) Builder: a builder method is useful when you're constructing certain >> types of services. For example, pipelines. You might use tapestry's >> pipeline builder service to build your pipeline for you, so you don't have >> an actual "PipelineXImpl" class lying around; instead, you use a builder >> method to construct the service "on the fly". >> >> c) Autobuilding - the ability to "autobuild" objects is very nice. >> Typically, I use this when the object I'm building is /not/ a "standalone >> service" that I'm going to reference from somewhere else (not something that >> will directly injected or contributed to). In that sense, the >> CayenneRequestFilter could have been autobuilt, since I could have done a >> "contributeRequestHandler(OrderedConfiguration<RequestFilter> conf, >> @Autobuild CayenneRequestHandler handler) {...} >> >> I don't need to inject CayenneRequestHandler anywhere else, so there's no >> real need to define it as a separate service. But @Autobuild didn't exist >> when I wrote the module. ;) >> If I were to write it today (or refactor it today), I would probably use >> @Autobuild for that one. Keep in mind that @Autobuild is going to use the >> constructor parameters to determine what to inject*. :) >> >> Regarding HttpServletRequest, if you need it directly, you can inject it, as >> tapestry provides a thread-based proxy around it. Something like: >> >> public MyRequestFilter implements RequestFilter { >> >> private final HttpServletRequest servletRequest; >> >> public MyRequestFilter(HttpServletRequest request) { >> servletRequest = request; >> } >> >> public boolean service(Request request, Response response, >> RequestHandler handler) >> { >> //do stuff with the servlet request. >> return handler.service(request,response); >> } >> } >> >> Robert >> >> * Recently, field-based injection support was added for services, so this >> isn't strictly true anymore. But I still prefer constructor injection for >> services. >> >> On Apr 9, 2009, at 4/95:54 PM , daniel joyce wrote: >> >>> How/where do I inject it? It's not obvious from the docs on when/how I >>> should user autobuilder vs builder vs constructor. >>> >>> The docs say you need to inject services explicitely inside the >>> constructor, yet the CayenneRequestFilter has a constructor w/o Inject >>> annotations. >>> >>> Also, the Tapestry 5 Request object supposedly wraps the >>> HttpServletRequest ( where remote user is set ), but provides no way >>> to get the raw request, from which I can grab RemoteUser which tells >>> me which user tomcat logged in. >>> >>> -Daniel >>> >>> On Thu, Apr 9, 2009 at 1:57 PM, daniel joyce <daniel.a.jo...@gmail.com> >>> wrote: >>>> >>>> Awesome, Thanks! >>>> >>>> So far, the nice thing about Tapestry has been its very fluid >>>> component based nature. I am so used to having to do things in a >>>> certain order with other frameworks. Here, things are very orthogonal, >>>> and my reasoning about how to use Tapestry keeps improving. >>>> >>>> -Daniel >>>> >>>> On Thu, Apr 9, 2009 at 12:51 PM, Robert Zeigler <robe...@scazdl.org> >>>> wrote: >>>>> >>>>> Here's a sample request filter that plays with application state objects >>>>> (which are backed by the http session): >>>>> >>>>> http://code.google.com/p/tapestry5-cayenne/source/browse/trunk/tapestry5-cayenne-core/src/main/java/com/googlecode/tapestry5cayenne/services/CayenneRequestFilter.java >>>>> >>>>> You can also use the tapestry-provided Request object (which wraps >>>>> HttpServletRequest), which provides access to the wrapper "Session" >>>>> object. >>>>> You can also directly inject HttpServletRequest. >>>>> >>>>> Cheers, >>>>> >>>>> Robert >>>>> >>>>> On Apr 9, 2009, at 4/92:11 PM , daniel joyce wrote: >>>>> >>>>>> What about using a requestfilter? Any better docs on how to implement >>>>>> one? I see bits and pieces here and there, but nothing as coherent as >>>>>> the Dispatcher howto. >>>>>> >>>>>> -Daniel >>>>>> >>>>>> >>>>>> On Thu, Apr 9, 2009 at 11:38 AM, daniel joyce >>>>>> <daniel.a.jo...@gmail.com> >>>>>> wrote: >>>>>>> >>>>>>> I looked at spring security, and it required yet-another annotation, >>>>>>> and annotating a class to protect it didn't protect the methods as >>>>>>> well. This struck me as too hit-or-miss >>>>>>> >>>>>>> With Tomcat, I can simply protect whole paths or pages, no need to >>>>>>> worry about annotating a class, and then annotating each method. Bit >>>>>>> too fine-grained for my needs. >>>>>>> >>>>>>> On Thu, Apr 9, 2009 at 11:00 AM, manuel aldana <ald...@gmx.de> wrote: >>>>>>>> >>>>>>>> Maybe you should look at the tapestry-spring-security plugin >>>>>>>> (http://www.localhost.nu/java/tapestry-spring-security/index.html). >>>>>>>> It >>>>>>>> works >>>>>>>> great and integrating is also not that difficult. >>>>>>>> >>>>>>>> Good thing is that you can both secure by single page or by page >>>>>>>> folders. >>>>>>>> >>>>>>>> Beware that it is not compatible with 5.1.x yet (works only for >>>>>>>> 5.0.18). >>>>>>>> >>>>>>>> daniel joyce schrieb: >>>>>>>>> >>>>>>>>> So I want to use pages with context so that it is easily >>>>>>>>> bookmarkable. >>>>>>>>> >>>>>>>>> My website uses a DataSourcerealm to determine which pages can be >>>>>>>>> accessed by a user. >>>>>>>>> >>>>>>>>> So normal flow is user logs in, first page he gets directed to sets >>>>>>>>> up >>>>>>>>> the User object as a ASO, other pages use this user. >>>>>>>>> >>>>>>>>> But if he bookmarks a url with context, say >>>>>>>>> "configureProject/124332", >>>>>>>>> and he clickes on the bookmark, logs in to tomcat, and gets >>>>>>>>> redirected >>>>>>>>> to it, the User object may not have been initialized yet. Now >>>>>>>>> configure project is fine, since it is mostly working with projects. >>>>>>>>> But I want the user object to exist so that I confirm the user >>>>>>>>> actually owns it. >>>>>>>>> >>>>>>>>> Now I could have a basepage, whose onActivate() grabs the auth'd >>>>>>>>> user >>>>>>>>> string from the Httpsession, runs a query, and either sets up the >>>>>>>>> User >>>>>>>>> object, or bounces out the login page. And every other page could >>>>>>>>> inherit from this one, and call super.OnActivate in their onActivate >>>>>>>>> method. >>>>>>>>> >>>>>>>>> But I was wondering, is there a service I can write that can examine >>>>>>>>> the HttpSession, and populate the User object. Is HttpSession >>>>>>>>> available to services already? IE, can I inject it in the usual >>>>>>>>> method >>>>>>>>> via my builder? >>>>>>>>> >>>>>>>>> -Daniel >>>>>>>>> >>>>>>>>> >>>>>>>>> --------------------------------------------------------------------- >>>>>>>>> To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org >>>>>>>>> For additional commands, e-mail: users-h...@tapestry.apache.org >>>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> -- >>>>>>>> manuel aldana >>>>>>>> ald...@gmx.de >>>>>>>> software-engineering blog: http://www.aldana-online.de >>>>>>>> >>>>>>>> >>>>>>>> --------------------------------------------------------------------- >>>>>>>> To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org >>>>>>>> For additional commands, e-mail: users-h...@tapestry.apache.org >>>>>>>> >>>>>>>> >>>>>>> >>>>>> >>>>>> --------------------------------------------------------------------- >>>>>> To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org >>>>>> For additional commands, e-mail: users-h...@tapestry.apache.org >>>>> >>>>> >>>>> --------------------------------------------------------------------- >>>>> To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org >>>>> For additional commands, e-mail: users-h...@tapestry.apache.org >>>>> >>>>> >>>> >>> >>> --------------------------------------------------------------------- >>> To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org >>> For additional commands, e-mail: users-h...@tapestry.apache.org >> >> >> --------------------------------------------------------------------- >> To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org >> For additional commands, e-mail: users-h...@tapestry.apache.org >> >> > --------------------------------------------------------------------- To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org