You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@tapestry.apache.org by Michael Gerzabek <mi...@gmx.net> on 2008/09/19 19:32:05 UTC

IoC Question with Alias

Hi,

I have a problem with the contributions to the alias service. The 
AppModule is ...

public static void bind( ServiceBinder binder ) {

    binder.bind( SiteDispatcher.class ).withId( "SiteDispatcher" );
    binder.bind( SiteServiceImpl.class ).withId( "SiteService" );
    binder.bind( HttpdRequestSecurityManager.class ).withId(
        "HttpdRequestSecurityManager" );
    binder.bind( SiteBaseURLSource.class ).withId( "SiteBaseURLSource" );
}

@SuppressWarnings( "unchecked" )
public void contributeAlias(
    Configuration<AliasContribution> configuration,
    @InjectService( "HttpdRequestSecurityManager" )
    RequestSecurityManager manager,
    @InjectService( "SiteBaseURLSource" )
    BaseURLSource baseUrlSource ) {

    configuration.add( AliasContribution.create(
        BaseURLSource.class,
        baseUrlSource ) );

    configuration.add( AliasContribution.create(
        RequestSecurityManager.class,
        manager ) );
}

The constructors of the services are ...

public SiteServiceImpl(
    RequestGlobals globals,
    ApplicationGlobals application,
    Session session,
    Logger logger,
    Collection<String> contributions,
    SymbolSource symbols ) {

    ...
}

public HttpdRequestSecurityManager(
    Request request,
    Response response,
    MetaDataLocator locator,
    RequestPageCache requestPageCache,
    @InjectService("SiteBaseURLSource")
    BaseURLSource baseURLSource,
    SiteService site ) {

    ...
}

public SiteBaseURLSource( SiteService site ) {

    ...
}

I get the [ERROR] Alias Construction of service Alias failed: Error 
invoking service builder method 
org.apache.tapestry5.services.TapestryModule.build(Logger, String, 
AliasManager, Collection) (at TapestryModule.java:205) (for service 
'Alias'): Error invoking service contribution method 
com.flexibelinstitut.tapestry5.site.SiteModule.contributeAlias(Configuration, 
RequestSecurityManager, BaseURLSource): Error building service proxy for 
service 'HttpdRequestSecurityManager' (at 
com.flexibelinstitut.tapestry5.site.services.internal.HttpdRequestSecurityManager(Request, 
Response, MetaDataLocator, RequestPageCache, BaseURLSource, SiteService) 
(at HttpdRequestSecurityManager.java:26)): Error invoking constructor 
com.flexibelinstitut.tapestry5.site.services.internal.HttpdRequestSecurityManager(Request, 
Response, MetaDataLocator, RequestPageCache, BaseURLSource, SiteService) 
(at HttpdRequestSecurityManager.java:26) (for service 
'HttpdRequestSecurityManager'): Exception constructing service 'Alias': 
Construction of service 'Alias' has failed due to recursion: the service 
depends on itself in some way. Please check 
org.apache.tapestry5.services.TapestryModule.build(Logger, String, 
AliasManager, Collection) (at TapestryModule.java:205) for references to 
another service that is itself dependent on service 'Alias'.

And I don't even have a clue where to look. I tried a lot of different 
version with @Inject, with @InjectService("..") on the constructors the 
contributeAlias(..) method. But none of them seems to work.

Any ideas?

/M



---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
For additional commands, e-mail: users-help@tapestry.apache.org


Re: IoC Question with Alias

Posted by Kristian Marinkovic <kr...@porsche.co.at>.
hi michael,

happened to me several times too :)

first you could try to define your services as proxy:

from:
binder.bind(HttpdRequestSecurityManager.class).withId("HttpdRequestSecurityManager");


to:
binder.bind(RequestSecurityManager.class, 
HttpdRequestSecurityManager.class).withId("HttpdRequestSecurityManager");

if this is not enough try to break the dependency cycle by 
injecting the ObjectLocator and creating the proxy manually

eg:
configuration.add( AliasContribution.create(
   RequestSecurityManager.class,
   locator.proxy(
        RequestSecurityManager.class, 
        HttpdRequestSecurityManager.class)) );

see also following post 
http://tapestry-user.markmail.org/search/?q=kristian+marinkovic#query:kristian%20marinkovic%20order%3Adate-backward+page:1+mid:pmmti5eoegosg2n5+state:results

g,
kris




Michael Gerzabek <mi...@gmx.net> 
19.09.2008 19:32
Bitte antworten an
"Tapestry users" <us...@tapestry.apache.org>


An
users@tapestry.apache.org
Kopie

Thema
IoC Question with Alias







Hi,

I have a problem with the contributions to the alias service. The 
AppModule is ...

public static void bind( ServiceBinder binder ) {

    binder.bind( SiteDispatcher.class ).withId( "SiteDispatcher" );
    binder.bind( SiteServiceImpl.class ).withId( "SiteService" );
    binder.bind( HttpdRequestSecurityManager.class ).withId(
        "HttpdRequestSecurityManager" );
    binder.bind( SiteBaseURLSource.class ).withId( "SiteBaseURLSource" );
}

@SuppressWarnings( "unchecked" )
public void contributeAlias(
    Configuration<AliasContribution> configuration,
    @InjectService( "HttpdRequestSecurityManager" )
    RequestSecurityManager manager,
    @InjectService( "SiteBaseURLSource" )
    BaseURLSource baseUrlSource ) {

    configuration.add( AliasContribution.create(
        BaseURLSource.class,
        baseUrlSource ) );

    configuration.add( AliasContribution.create(
        RequestSecurityManager.class,
        manager ) );
}

The constructors of the services are ...

public SiteServiceImpl(
    RequestGlobals globals,
    ApplicationGlobals application,
    Session session,
    Logger logger,
    Collection<String> contributions,
    SymbolSource symbols ) {

    ...
}

public HttpdRequestSecurityManager(
    Request request,
    Response response,
    MetaDataLocator locator,
    RequestPageCache requestPageCache,
    @InjectService("SiteBaseURLSource")
    BaseURLSource baseURLSource,
    SiteService site ) {

    ...
}

public SiteBaseURLSource( SiteService site ) {

    ...
}

I get the [ERROR] Alias Construction of service Alias failed: Error 
invoking service builder method 
org.apache.tapestry5.services.TapestryModule.build(Logger, String, 
AliasManager, Collection) (at TapestryModule.java:205) (for service 
'Alias'): Error invoking service contribution method 
com.flexibelinstitut.tapestry5.site.SiteModule.contributeAlias(Configuration, 

RequestSecurityManager, BaseURLSource): Error building service proxy for 
service 'HttpdRequestSecurityManager' (at 
com.flexibelinstitut.tapestry5.site.services.internal.HttpdRequestSecurityManager(Request, 

Response, MetaDataLocator, RequestPageCache, BaseURLSource, SiteService) 
(at HttpdRequestSecurityManager.java:26)): Error invoking constructor 
com.flexibelinstitut.tapestry5.site.services.internal.HttpdRequestSecurityManager(Request, 

Response, MetaDataLocator, RequestPageCache, BaseURLSource, SiteService) 
(at HttpdRequestSecurityManager.java:26) (for service 
'HttpdRequestSecurityManager'): Exception constructing service 'Alias': 
Construction of service 'Alias' has failed due to recursion: the service 
depends on itself in some way. Please check 
org.apache.tapestry5.services.TapestryModule.build(Logger, String, 
AliasManager, Collection) (at TapestryModule.java:205) for references to 
another service that is itself dependent on service 'Alias'.

And I don't even have a clue where to look. I tried a lot of different 
version with @Inject, with @InjectService("..") on the constructors the 
contributeAlias(..) method. But none of them seems to work.

Any ideas?

/M



---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
For additional commands, e-mail: users-help@tapestry.apache.org