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/
signature.asc
Description: This is a digitally signed message part
