hi Howard

Thanks for the reply, based on your description I seem to be on the right
track with the filters and the pipeline, so I will keep plugging away until
I get it right.

As far as the disambiguation goes, I have read the documentation and tried a
few things from the docs out but was not having any luck so I thought I
would ask.  It is helpful to know that it definitely is possible to have the
same interface represented in different services.   I will give the @Local a
try and will also revisit the docs to see what vital bit of info I have
missed.

Regards

Stephen


On Fri, Oct 2, 2009 at 12:47 AM, Howard Lewis Ship <hls...@gmail.com> wrote:

> Have you read the documentation?  There's a careful relationship
> between the main service interface and the related filter interface.
>
> Disambiguation can be by explicit service id (a last resort) or by
> using marker annotation, including the special built-in @Local
> annotation.  You can also help with disambiguation ... check the docs
> about overriding services.
>
> You will not get that list of filters anywhere but contributed into
> the service implementation (or service builder method).
>
> Remember; filters wrap around services.  Each filter sees the service
> as its delegate (the extra parameter). If you have multiple filters,
> the delegate is actually a special bridge to the next filter (!).
> The service itself is the stack of filters plus a terminator (which
> implements the service interface) ... one is supplied if you don't
> provide a terminator.
>
> So the first step is to define your own service and filter interfaces.
>
> The final service, which can be injected into pages, represents that
> whole stack: the filters, the bridges, the terminator. It also
> includes the lazy instantiation of the whole stack.
>
> The PipelineBuilder returns an object that implements the service
> interface: either the terminator itself, or the bridge around the
> outermost filter.
>
> It's fun stuff!
>
> On Thu, Oct 1, 2009 at 4:35 PM, Steve Cowx <steve.c...@gmail.com> wrote:
> > Hi
> >
> > I have a few questions, I am looking for understanding rather than a
> > solution to any particular problem.
> >
> > The following code comes from the
> > org.apache.tapestry.services.TapestryModule
> >
> > /**
> >     * A wrapper around {...@link
> > <%...@link>org.apache.tapestry5.internal.services.PageRenderQueue} used
> > for partial
> > page renders.
> >     * Supports an ordered configuration of {...@link
> > <%...@link>org.apache.tapestry5.services.PartialMarkupRendererFilter}s.
>  >     *
> >     * @see
> >
> #contributePartialMarkupRenderer(org.apache.tapestry5.ioc.OrderedConfiguration,
> > org.apache.tapestry5.Asset,
> >     *      org.apache.tapestry5.ioc.services.SymbolSource, AssetSource)
> >     */
> >    public PartialMarkupRenderer buildPartialMarkupRenderer(Logger logger,
> >
> > List<PartialMarkupRendererFilter> configuration,
> >                                                            @Autobuild
> > PartialMarkupRendererTerminator terminator)
> >    {
> >        return pipelineBuilder.build(logger, PartialMarkupRenderer.class,
> > PartialMarkupRendererFilter.class,
> >                                     configuration, terminator);
> >    }
> >
> >
> > The questions that I have relate to the code above:
> >
> > 1) What is the type of the instance of the class that gets built by the
> > pipelineBuilder (ignoring the fact that it is a proxy)?  I would have
> > expected it to be a PartialMarkupRenderer but some experimenting has led
> me
> > to believe that it may be an instance of a
> > PartialMarkupRendererFilter.   The source of my confusion is that  I have
> > built an almost exact replica of the setup in the TapestryModule for this
> > particular pipeline (using all my own mirror interfaces to avoid
> > ambigouity). I have then injected my service into a component and called
> a
> > service method on the injected instance and received the following
> > error "Method
> > void renderMarkup(org.apache.tapestry5.MarkupWriter,
> > org.apache.tapestry5.json.JSONObject) has no match in filter
> > interface com.mypackage.PartialMarkupRendererFilter."  suggesting that an
> > instance of the Filter that was injected into my component and not an
> > instance of the service (which does have that method)
> >
> > 2) If I was to copy the above code exactly and paste it into my own
> module
> > then change the name to  buildMyOwnPartialMarkupRenderer()
> >     a) how would I disambiguate the two services which were built (i.e.
> the
> > one in the TapestryModule and the one in my module) so that I did not get
> > the error "Automatic dependency resolution requires that exactly one
> service
> > implement the interface".
> >     b) Assumin gthat this is possible how would I then disambiguate in
> the
> > page or a component where the service is to be injected.
> >     c) would the List of PartialMarkupRendererFilters which gets passed
> > into my builder method be the same instance that gets passed in to the
> > TapestryModule builder method?
> >
> > Regards
> >
> > Stephen
> >
>
>
>
> --
> Howard M. Lewis Ship
>
> Creator of Apache Tapestry
>
> The source for Tapestry training, mentoring and support. Contact me to
> learn how I can get you up and productive in Tapestry fast!
>
> (971) 678-5210
> http://howardlewisship.com
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org
> For additional commands, e-mail: users-h...@tapestry.apache.org
>
>


-- 
Kind regards

Stephen Cowx
+44 (0) 7748 490 323
+44 (0) 1306 740 523

Reply via email to