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