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" > <users@tapestry.apache.org> > > > > > An > Tapestry users > <users@tapestry.apache.org> > 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