It is not possible. However, you can initialize a symbol with another symbol's value:
configuration.add("my.new.symbol", "${some.other.symbol}") Tapestry does a good job of detecting and reporting any unintentional cycles you might create this way. On Tue, Jan 3, 2012 at 7:59 AM, Borut Bolčina <borut.bolc...@gmail.com> wrote: > Hi, > > I would still like an advice on the approach on how to initialize custom > symbol provider with tapestry provided symbol. The code below ends in > IllegalStateException > > Construction of service 'SymbolSource' has failed due to recursion: the > service depends on itself in some way. > > > The code from AppModule: > > public RESTSymbolProvider buildRESTSymbolProvider(Logger logger, > @Inject @Symbol(SymbolConstants.EXECUTION_MODE) String executionMode) { > return new RESTSymbolProvider(logger, executionMode); > } > > public void contributeSymbolSource(OrderedConfiguration<SymbolProvider> > providers, Logger logger, > @InjectService("RESTSymbolProvider") SymbolProvider > restSymbolProvider) { > providers.add("myAppConfiguration", restSymbolProvider); > } > > Thanks for any input, > borut > > 2011/12/30 Borut Bolčina <borut.bolc...@gmail.com> > >> 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 >> -- Howard M. Lewis Ship Creator of Apache Tapestry The source for Tapestry training, mentoring and support. Contact me to learn how I can get you up and productive in Tapestry fast! (971) 678-5210 http://howardlewisship.com --------------------------------------------------------------------- To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org