Hello,

I am in a process of writting my own SymbolProvider (the configuration for
my app will come from REST service) and I am facing a dilemma. The
contribution looks like:

    public void contributeSymbolSource(OrderedConfiguration<SymbolProvider>
providers, Logger logger) {
        providers.add("myAppConfiguration", new RESTSymbolProvider(logger,
"development"), "after:SystemProperties", "before:ApplicationDefaults");
    }

You can see I hardcoded the string "development". I want to replace this
string with another symbol

@Symbol(SymbolConstants.EXECUTION_MODE) String executionMode

As I need this symbol in another method (sendEmailMessage) in the AppModule
I naively tried like this and failed:

public class AppModule {

    private String *executionMode*;

    public AppModule(@Symbol(SymbolConstants.EXECUTION_MODE) String
executionMode) {
        this.executionMode = executionMode;
    }

    @Startup
    public void sendEmailMessage(Logger logger) {
        if ("development".equals(*executionMode*)) {
            logger.info(MarkerFactory.getMarker("EDITORS"), "DEVELOPMENT
Starting najdi-web");
        } else {
            logger.info(MarkerFactory.getMarker("EDITORS"), "PRODUCTION
Starting najdi-web");
        }
    }

    public void contributeSymbolSource(OrderedConfiguration<SymbolProvider>
providers, Logger logger) {
        providers.add("myAppConfiguration", new RESTSymbolProvider(logger, *
executionMode*), "after:SystemProperties", "before:ApplicationDefaults");
    }
...
}


Fails with:

[2011/12/30 14:59:04.537] ERROR [o.a.t.i.Registry:log]: Construction of
service 'SymbolSource' has failed due to recursion: the service depends on
itself in some way. Please check
org.apache.tapestry5.ioc.internal.services.SymbolSourceImpl(List) (at
SymbolSourceImpl.java:198) via
org.apache.tapestry5.ioc.services.TapestryIOCModule.bind(ServiceBinder) (at
TapestryIOCModule.java:49) for references to another service that is itself
dependent on service 'SymbolSource'.
[2011/12/30 14:59:04.538] ERROR [o.a.t.i.Registry:log]: Operations trace:
[2011/12/30 14:59:04.539] ERROR [o.a.t.i.Registry:log]: [ 1] Realizing
service ServletApplicationInitializer
[2011/12/30 14:59:04.539] ERROR [o.a.t.i.Registry:log]: [ 2] Instantiating
service ServletApplicationInitializer implementation via
org.apache.tapestry5.services.TapestryModule.buildServletApplicationInitializer(Logger,
List, ApplicationInitializer) (at TapestryModule.java:1395)
[2011/12/30 14:59:04.540] ERROR [o.a.t.i.Registry:log]: [ 3] Constructing
module class org.apache.tapestry5.services.TapestryModule
[2011/12/30 14:59:04.540] ERROR [o.a.t.i.Registry:log]: [ 4] Determining
injection value for parameter #1
(org.apache.tapestry5.ioc.services.PipelineBuilder)
[2011/12/30 14:59:04.541] ERROR [o.a.t.i.Registry:log]: [ 5] Resolving
object of type org.apache.tapestry5.ioc.services.PipelineBuilder using
MasterObjectProvider
[2011/12/30 14:59:04.541] ERROR [o.a.t.i.Registry:log]: [ 6] Realizing
service ServiceOverride
[2011/12/30 14:59:04.542] ERROR [o.a.t.i.Registry:log]: [ 7] Instantiating
service ServiceOverride implementation via
org.apache.tapestry5.ioc.internal.services.ServiceOverrideImpl(Map) (at
ServiceOverrideImpl.java:31) via
org.apache.tapestry5.ioc.services.TapestryIOCModule.bind(ServiceBinder) (at
TapestryIOCModule.java:49)
[2011/12/30 14:59:04.542] ERROR [o.a.t.i.Registry:log]: [ 8] Creating plan
to instantiate
org.apache.tapestry5.ioc.internal.services.ServiceOverrideImpl via public
org.apache.tapestry5.ioc.internal.services.ServiceOverrideImpl(java.util.Map)
[2011/12/30 14:59:04.543] ERROR [o.a.t.i.Registry:log]: [ 9] Determining
injection value for parameter #1 (java.util.Map)
[2011/12/30 14:59:04.544] ERROR [o.a.t.i.Registry:log]: [10] Collecting
mapped configuration for service ServiceOverride
[2011/12/30 14:59:04.544] ERROR [o.a.t.i.Registry:log]: [11] Invoking
org.apache.tapestry5.services.TapestryModule.productionModeOverrides(MappedConfiguration,
boolean) (at TapestryModule.java:2871)
[2011/12/30 14:59:04.545] ERROR [o.a.t.i.Registry:log]: [12] Determining
injection value for parameter #2 (boolean)
[2011/12/30 14:59:04.545] ERROR [o.a.t.i.Registry:log]: [13] Resolving
object of type boolean using MasterObjectProvider
[2011/12/30 14:59:04.546] ERROR [o.a.t.i.Registry:log]: [14] Realizing
service SymbolSource
[2011/12/30 14:59:04.546] ERROR [o.a.t.i.Registry:log]: [15] Instantiating
service SymbolSource implementation via
org.apache.tapestry5.ioc.internal.services.SymbolSourceImpl(List) (at
SymbolSourceImpl.java:198) via
org.apache.tapestry5.ioc.services.TapestryIOCModule.bind(ServiceBinder) (at
TapestryIOCModule.java:49)
[2011/12/30 14:59:04.547] ERROR [o.a.t.i.Registry:log]: [16] Creating plan
to instantiate org.apache.tapestry5.ioc.internal.services.SymbolSourceImpl
via public
org.apache.tapestry5.ioc.internal.services.SymbolSourceImpl(java.util.List)
[2011/12/30 14:59:04.547] ERROR [o.a.t.i.Registry:log]: [17] Determining
injection value for parameter #1 (java.util.List)
[2011/12/30 14:59:04.548] ERROR [o.a.t.i.Registry:log]: [18] Collecting
ordered configuration for service SymbolSource
[2011/12/30 14:59:04.548] ERROR [o.a.t.i.Registry:log]: [19] Invoking
si.najdi.web.services.AppModule.contributeSymbolSource(OrderedConfiguration,
Logger) (at AppModule.java:40)
[2011/12/30 14:59:04.549] ERROR [o.a.t.i.Registry:log]: [20] Constructing
module class si.najdi.web.services.AppModule
[2011/12/30 14:59:04.550] ERROR [o.a.t.i.Registry:log]: [21] Determining
injection value for parameter #1 (java.lang.String)
[2011/12/30 14:59:04.550] ERROR [o.a.t.i.Registry:log]: [22] Resolving
object of type java.lang.String using MasterObjectProvider
[2011/12/30 14:59:04.551] ERROR [o.a.t.i.Registry:log]: [23] Realizing
service SymbolSource
[2011/12/30 14:59:04.569] ERROR [o.a.t.i.s.T.SymbolSource:createObject]:
Construction of service SymbolSource failed: Unable to instantiate class
si.najdi.web.services.AppModule as a module: Exception constructing service
'SymbolSource': Construction of service 'SymbolSource' has failed due to
recursion: the service depends on itself in some way. Please check
org.apache.tapestry5.ioc.internal.services.SymbolSourceImpl(List) (at
SymbolSourceImpl.java:198) via
org.apache.tapestry5.ioc.services.TapestryIOCModule.bind(ServiceBinder) (at
TapestryIOCModule.java:49) for references to another service that is itself
dependent on service 'SymbolSource'.
java.lang.RuntimeException: Unable to instantiate class
si.najdi.web.services.AppModule as a module: Exception constructing service
'SymbolSource': Construction of service 'SymbolSource' has failed due to
recursion: the service depends on itself in some way. Please check
org.apache.tapestry5.ioc.internal.services.SymbolSourceImpl(List) (at
SymbolSourceImpl.java:198) via
org.apache.tapestry5.ioc.services.TapestryIOCModule.bind(ServiceBinder) (at
TapestryIOCModule.java:49) for references to another service that is itself
dependent on service 'SymbolSource'.

Am I facing multiple problems here?

Regards,
borut

Reply via email to