On Mon, 2007-07-02 at 16:06 +0200, Kristian Marinkovic wrote: > > service implementations contributed to the alias service will > override the other service implementations. this is also true for > implementations originally provided by tapestry > > the additional id is to distinguish multiple implementations of the > same interface. in your case you should only need it twice: > 1) to define your service > 2) to contribute to the alias service.... then you can forget it :)
If I understand you correctly, you say that
public static PageResponseRenderer decoratePageResponseRenderer(
@InjectService("PageMarkupRenderer")
final PageMarkupRenderer markupRenderer,
@InjectService("MarkupWriterFactory")
final MarkupWriterFactory markupWriterFactory,
final Object delegate )
should provide our custom MarkupWriterFactory?
This is not the fact - with @InjectService("MarkupWriterFactory")
T5 provides its MarkupWriterFactoryImpl and not our custom
MarkupWriterFactory.
Did I understand you wrong, or is this a "bug" in T5?
Cheers,
Martin
>
> g,
> kris
>
>
>
> Martin Grotzke
> <[EMAIL PROTECTED]>
>
> 02.07.2007 14:10
> Bitte antworten an
> "Tapestry users"
> <[email protected]>
>
>
>
>
> An
> Tapestry users
> <[email protected]>
> Kopie
>
> Thema
> RE: T5 Decoupling
> a Template From
> its Component
> Class
>
>
>
>
>
>
>
>
> On Mon, 2007-07-02 at 11:03 +0200, Kristian Marinkovic wrote:
> >
> > hi martin,
> >
> > if you use the ServiceBinder to contribute a class that implements
> an
> > already
> > "contributed" interface you have to assign an id for your class by
> > invoking withId,
> > because the Interface is no longer sufficient to identifiy the
> service
> >
> > binder.bind(PageTemplateLocator.class,
> > MyPageTemplateLocatorImpl.class).withId("myLocator");
> >
> > furthermore you have to contribute to the aliasOverrides Service
> > to actually replace the old implementation:
> >
> > public static void contributeAliasOverrides(
> > @InjectService("myLocator") PageTemplateLocator
> locator,
> > Configuration<AliasContribution> configuration) {
> >
> > configuration.add(
> > AliasContribution.create(
> > PageTemplateLocator.class, locator));
>
> Great, this works - thanx a lot!
>
> Just for clarification: the specified id has to be used anywhere else,
> right? E.g. for us the service in question is the MarkupWriterFactory,
> and previously we also had this in our AppModule:
>
> public static PageResponseRenderer decoratePageResponseRenderer(
> @InjectService("PageMarkupRenderer")
> final PageMarkupRenderer markupRenderer,
> @InjectService("MarkupWriterFactory")
> final MarkupWriterFactory markupWriterFactory,
> final Object delegate )
>
> which we have to change to @InjectService("myMarkupWriterFactory")
> then.
> Is this the intended way? Is it guaranteed, that T5 does not reference
> the MarkupWriterFactory implementation by the id
> "MarkupWriterFactory"?
>
> Thanx && cheers,
> Martin
>
>
> >
> >
> > g,
> > kris
> >
> >
> >
> > Martin Grotzke
> > <[EMAIL PROTECTED]>
> >
> > 02.07.2007 10:00
> > Bitte antworten an
> > "Tapestry users"
> > <[email protected]>
> >
> >
> >
> >
> > An
> > Tapestry users
> > <[email protected]>
> > Kopie
> >
> > Thema
> > RE: T5 Decoupling
> > a Template From
> > its Component
> > Class
> >
> >
> >
> >
> >
> >
> >
> >
> > > Digging through the code I notice there is a PageTemplateLocator
> > > interface which seems like the appropriate service to override.
> What
> > I
> > > have tried is to add the following method to my AppModule
> class....
> > >
> > >
> > > public static void bind(ServiceBinder binder) {
> > > ServiceBindingOptions options =
> > > binder.bind(
> > >
> > PageTemplateLocator.class,
> > >
> > MyPageTemplateLocatorImpl.class
> > > );
> > > }
> > >
> > >
> > > ...but I get the following exception at startup.....
> > >
> > >
> > > java.lang.RuntimeException: Service id 'PageTemplateLocator' has
> > already
> > > been defined by
> >
> > Did you solve this issue? I get the same exception with another
> > Service
> > that's defined in TapestryModule that I want to override in my
> > AppModule
> > with my custom implementation...
> >
> > Thx && cheers,
> > Martin
> >
> >
> > On Wed, 2007-05-30 at 19:17 -0700, David Kendall wrote:
> > > > From: Howard Lewis Ship [mailto:[EMAIL PROTECTED]
> > > > Sent: Wednesday, May 30, 2007 5:15 PM
> > > > There are internal services that can be overridden to handle
> > those
> > > > kinds of situations.
> > > > The goal is to create something that works amazingly well for
> all
> > > > the more typical cases, then start going after these others.
> > Often
> > > > it will involve moving a private interface out into the public
> > space
> > > ..
> > >
> > >
> > >
> > >
> > > Thanks Howard - I appreciate your prompt response. However - I am
> > not
> > > clear if you are saying it cannot be done currently - or if you
> mean
> > > that it can be done - but that I would be treading on somewhat
> > unstable
> > > ground given that the internal interfaces are subject to change.
> > >
> > > Digging through the code I notice there is a PageTemplateLocator
> > > interface which seems like the appropriate service to override.
> What
> > I
> > > have tried is to add the following method to my AppModule
> class....
> > >
> > >
> > > public static void bind(ServiceBinder binder) {
> > > ServiceBindingOptions options =
> > > binder.bind(
> > >
> > PageTemplateLocator.class,
> > >
> > MyPageTemplateLocatorImpl.class
> > > );
> > > }
> > >
> > >
> > > ...but I get the following exception at startup.....
> > >
> > >
> > > java.lang.RuntimeException: Service id 'PageTemplateLocator' has
> > already
> > > been defined by
> > >
> >
> org.apache.tapestry.internal.services.InternalModule.build(AssetFactory,
> > > ComponentClassResolver) (at InternalModule.java:231) and may not
> be
> > > redefined by
> > > org.example.myapp.services.AppModule$MyPageTemplateLocatorImpl()
> (at
> > > AppModule.java:159). You should rename one of the service builder
> > > methods.
> > >
> > >
> > >
> > >
> > > Am I wasting my time trying this? I can tolerate a certain amount
> of
> > > instability when pulling in subsequent revisions of Tap5 - however
> -
> > I
> > > would like to get a proof of concept up and running if at all
> > possible.
> > >
> > > Any thoughts on this?
> > >
> > > Thanks again.
> > >
> > > David Kendall
> > >
> > >
> > >
> > >
> >
> ---------------------------------------------------------------------
> > > To unsubscribe, e-mail: [EMAIL PROTECTED]
> > > For additional commands, e-mail: [EMAIL PROTECTED]
> > >
> > --
> > Martin Grotzke
> > http://www.javakaffee.de/blog/
> >
> >
> ---------------------------------------------------------------------
> > To unsubscribe, e-mail: [EMAIL PROTECTED]
> > For additional commands, e-mail: [EMAIL PROTECTED]
> --
> Martin Grotzke
> http://www.javakaffee.de/blog/
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
--
Martin Grotzke
http://www.javakaffee.de/blog/
signature.asc
Description: This is a digitally signed message part
