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 >