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));


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]

Reply via email to