I'm willing to use uncached symbols at the moment for 2 reasons. 1) Saving
massive refactoring effor, 2) I really want to know how to do this !

I implemented the following:

> public static void bind(ServiceBinder binder) {
> binder.bind(IDBSymbolSource.class, DBSymbolSource.class);
> //Binding the source to SymbolSource forces me to assign an ID to that
> bind as Tapestry complains about binding the same service interface
> and it makes it easier to contribute to the service (only using it's
> interface). Also the interface extends SymbolSource.
> }
> @Contribute(IDBSymbolSource.class)
> public static void
> contributeDBSymbolSource(OrderedConfiguration<SymbolProvider>
> configuration, @Named("IpkConfig") SymbolProvider ipkConfig,
>         @Named("IxConfig") SymbolProvider ixConfig) {
> configuration.add("SystemProperties", new
> SystemPropertiesSymbolProvider(), "before:*");
> configuration.add("IpkConfig", ipkConfig, "after:SystemProperties");
> configuration.add("IxConfig", ixConfig, "after:SystemProperties");
> }
> @Contribute(MasterObjectProvider.class)
> public static void
> setupDBSYmbolObjectProviders(OrderedConfiguration<ObjectProvider>
> configuration) {
> configuration.addInstance("DBSymbol", DBSymbolObjectProvider.class,
> OrderConstraintBuilder.before("Symbol").build());
> }


The DBSymbolObjectProvider constructor is:

> public DBSymbolObjectProvider(IDBSymbolSource symbolSource, @Builtin
> TypeCoercer typeCoercer) {
> this.symbolSource = symbolSource;
> this.typeCoercer = typeCoercer;
> }


I think the following exception is thrown because the *IDBSymbolSource *service
in the constructor needs to be resolved while the *MasterObjectProvider *it
self hasn't been constructed which is reasonable but how can I resolve this
?

java.lang.RuntimeException: Exception constructing service
> 'RegistryStartup': Unable to instantiate class com.skycomm.IpKaizenTAModule
> as a module: Exception constructing service 'MasterObjectProvider': Error
> invoking service contribution method
> com.skycomm.ipkaizen.services.CoreModule.setupDBSYmbolObjectProviders(OrderedConfiguration):
> Exception constructing service 'MasterObjectProvider': Construction of
> service 'MasterObjectProvider' has failed due to recursion: the service
> depends on itself in some way. Please check
> org.apache.tapestry5.ioc.internal.services.MasterObjectProviderImpl(List,
> OperationTracker) (at MasterObjectProviderImpl.java:33) via
> org.apache.tapestry5.ioc.services.TapestryIOCModule.bind(ServiceBinder) (at
> TapestryIOCModule.java:49) for references to another service that is itself
> dependent on service 'MasterObjectProvider'.
>
> at
> org.apache.tapestry5.ioc.internal.services.JustInTimeObjectCreator.obtainObjectFromCreator(JustInTimeObjectCreator.java:75)
> at
> org.apache.tapestry5.ioc.internal.services.JustInTimeObjectCreator.createObject(JustInTimeObjectCreator.java:54)
> at $Runnable_440ab1f4dbb6.delegate(Unknown Source)
> at $Runnable_440ab1f4dbb6.run(Unknown Source)
> at
> org.apache.tapestry5.ioc.internal.RegistryImpl.performRegistryStartup(RegistryImpl.java:325)
> at
> org.apache.tapestry5.ioc.internal.RegistryWrapper.performRegistryStartup(RegistryWrapper.java:80)
> at com.skycomm.IpKaizenTA.main(IpKaizenTA.java:25)
> Caused by: java.lang.RuntimeException: Unable to instantiate class
> com.skycomm.IpKaizenTAModule as a module: Exception constructing service
> 'MasterObjectProvider': Error invoking service contribution method
> com.skycomm.ipkaizen.services.CoreModule.setupDBSYmbolObjectProviders(OrderedConfiguration):
> Exception constructing service 'MasterObjectProvider': Construction of
> service 'MasterObjectProvider' has failed due to recursion: the service
> depends on itself in some way. Please check
> org.apache.tapestry5.ioc.internal.services.MasterObjectProviderImpl(List,
> OperationTracker) (at MasterObjectProviderImpl.java:33) via
> org.apache.tapestry5.ioc.services.TapestryIOCModule.bind(ServiceBinder) (at
> TapestryIOCModule.java:49) for references to another service that is itself
> dependent on service 'MasterObjectProvider'.
> at
> org.apache.tapestry5.ioc.internal.ModuleImpl.instantiateModuleInstance(ModuleImpl.java:447)
> at
> org.apache.tapestry5.ioc.internal.ModuleImpl.access$1200(ModuleImpl.java:39)
> at
> org.apache.tapestry5.ioc.internal.ModuleImpl$6$1.invoke(ModuleImpl.java:355)
> at
> org.apache.tapestry5.ioc.internal.OperationTrackerImpl.invoke(OperationTrackerImpl.java:74)
> at
> org.apache.tapestry5.ioc.internal.PerThreadOperationTracker.invoke(PerThreadOperationTracker.java:87)
> at
> org.apache.tapestry5.ioc.internal.RegistryImpl.invoke(RegistryImpl.java:1124)
> at org.apache.tapestry5.ioc.internal.ModuleImpl$6.run(ModuleImpl.java:350)
> at
> org.apache.tapestry5.ioc.internal.util.ConcurrentBarrier$2.invoke(ConcurrentBarrier.java:200)
> at
> org.apache.tapestry5.ioc.internal.util.ConcurrentBarrier$2.invoke(ConcurrentBarrier.java:197)
> at
> org.apache.tapestry5.ioc.internal.util.ConcurrentBarrier.withWrite(ConcurrentBarrier.java:140)
> at
> org.apache.tapestry5.ioc.internal.util.ConcurrentBarrier.withWrite(ConcurrentBarrier.java:206)
> at
> org.apache.tapestry5.ioc.internal.ModuleImpl$7.invoke(ModuleImpl.java:366)
> at
> org.apache.tapestry5.ioc.internal.util.ConcurrentBarrier.withRead(ConcurrentBarrier.java:85)
> at
> org.apache.tapestry5.ioc.internal.ModuleImpl.getModuleBuilder(ModuleImpl.java:374)
> at
> org.apache.tapestry5.ioc.internal.ContributionDefImpl.invokeMethod(ContributionDefImpl.java:113)
> at
> org.apache.tapestry5.ioc.internal.ContributionDefImpl.contribute(ContributionDefImpl.java:80)
> at
> org.apache.tapestry5.ioc.internal.RegistryImpl$9.run(RegistryImpl.java:633)
> at
> org.apache.tapestry5.ioc.internal.OperationTrackerImpl$1.invoke(OperationTrackerImpl.java:51)
> at
> org.apache.tapestry5.ioc.internal.OperationTrackerImpl$1.invoke(OperationTrackerImpl.java:48)
> at
> org.apache.tapestry5.ioc.internal.OperationTrackerImpl.invoke(OperationTrackerImpl.java:74)
> at
> org.apache.tapestry5.ioc.internal.OperationTrackerImpl.run(OperationTrackerImpl.java:47)
> at
> org.apache.tapestry5.ioc.internal.PerThreadOperationTracker.run(PerThreadOperationTracker.java:76)
> at
> org.apache.tapestry5.ioc.internal.RegistryImpl.addToOrderedConfiguration(RegistryImpl.java:629)
> at
> org.apache.tapestry5.ioc.internal.RegistryImpl.getOrderedConfiguration(RegistryImpl.java:483)
> at
> org.apache.tapestry5.ioc.internal.ServiceResourcesImpl$2.invoke(ServiceResourcesImpl.java:110)
> at
> org.apache.tapestry5.ioc.internal.ServiceResourcesImpl$2.invoke(ServiceResourcesImpl.java:107)
> at
> org.apache.tapestry5.ioc.internal.OperationTrackerImpl.invoke(OperationTrackerImpl.java:74)
> at
> org.apache.tapestry5.ioc.internal.PerThreadOperationTracker.invoke(PerThreadOperationTracker.java:87)
> at
> org.apache.tapestry5.ioc.internal.RegistryImpl.invoke(RegistryImpl.java:1124)
> at
> org.apache.tapestry5.ioc.internal.ServiceResourcesImpl.getOrderedConfiguration(ServiceResourcesImpl.java:105)
> at
> org.apache.tapestry5.ioc.internal.AbstractServiceCreator.getOrderedConfiguration(AbstractServiceCreator.java:123)
> at
> org.apache.tapestry5.ioc.internal.AbstractServiceCreator.access$200(AbstractServiceCreator.java:35)
> at
> org.apache.tapestry5.ioc.internal.AbstractServiceCreator$1.findResource(AbstractServiceCreator.java:103)
> at
> org.apache.tapestry5.ioc.internal.util.DelegatingInjectionResources.findResource(DelegatingInjectionResources.java:38)
> at
> org.apache.tapestry5.ioc.internal.util.InternalUtils.calculateInjection(InternalUtils.java:231)
> at
> org.apache.tapestry5.ioc.internal.util.InternalUtils.access$000(InternalUtils.java:50)
> at
> org.apache.tapestry5.ioc.internal.util.InternalUtils$4.invoke(InternalUtils.java:289)
> at
> org.apache.tapestry5.ioc.internal.util.InternalUtils$4.invoke(InternalUtils.java:286)
> at
> org.apache.tapestry5.ioc.internal.OperationTrackerImpl.invoke(OperationTrackerImpl.java:74)
> at
> org.apache.tapestry5.ioc.internal.PerThreadOperationTracker.invoke(PerThreadOperationTracker.java:87)
> at
> org.apache.tapestry5.ioc.internal.RegistryImpl.invoke(RegistryImpl.java:1124)
> at
> org.apache.tapestry5.ioc.internal.util.InternalUtils.calculateParameters(InternalUtils.java:293)
> at
> org.apache.tapestry5.ioc.internal.util.InternalUtils$23.invoke(InternalUtils.java:1488)
> at
> org.apache.tapestry5.ioc.internal.util.InternalUtils$23.invoke(InternalUtils.java:1483)
> at
> org.apache.tapestry5.ioc.internal.OperationTrackerImpl.invoke(OperationTrackerImpl.java:74)
> at
> org.apache.tapestry5.ioc.internal.PerThreadOperationTracker.invoke(PerThreadOperationTracker.java:87)
> at
> org.apache.tapestry5.ioc.internal.RegistryImpl.invoke(RegistryImpl.java:1124)
> at
> org.apache.tapestry5.ioc.internal.util.InternalUtils.createConstructorConstructionPlan(InternalUtils.java:1480)
> at
> org.apache.tapestry5.ioc.internal.ConstructorServiceCreator.getPlan(ConstructorServiceCreator.java:52)
> at
> org.apache.tapestry5.ioc.internal.ConstructorServiceCreator.createObject(ConstructorServiceCreator.java:61)
> at
> org.apache.tapestry5.ioc.internal.OperationTrackingObjectCreator$1.invoke(OperationTrackingObjectCreator.java:45)
> at
> org.apache.tapestry5.ioc.internal.OperationTrackerImpl.invoke(OperationTrackerImpl.java:74)
> at
> org.apache.tapestry5.ioc.internal.PerThreadOperationTracker.invoke(PerThreadOperationTracker.java:87)
> at
> org.apache.tapestry5.ioc.internal.RegistryImpl.invoke(RegistryImpl.java:1124)
> at
> org.apache.tapestry5.ioc.internal.OperationTrackingObjectCreator.createObject(OperationTrackingObjectCreator.java:49)
> at
> org.apache.tapestry5.ioc.internal.SingletonServiceLifecycle.createService(SingletonServiceLifecycle.java:29)
> at
> org.apache.tapestry5.ioc.internal.LifecycleWrappedServiceCreator.createObject(LifecycleWrappedServiceCreator.java:46)
> at
> org.apache.tapestry5.ioc.internal.AdvisorStackBuilder.createObject(AdvisorStackBuilder.java:63)
> at
> org.apache.tapestry5.ioc.internal.InterceptorStackBuilder.createObject(InterceptorStackBuilder.java:54)
> at
> org.apache.tapestry5.ioc.internal.RecursiveServiceCreationCheckWrapper.createObject(RecursiveServiceCreationCheckWrapper.java:60)
> at
> org.apache.tapestry5.ioc.internal.OperationTrackingObjectCreator$1.invoke(OperationTrackingObjectCreator.java:45)
> at
> org.apache.tapestry5.ioc.internal.OperationTrackerImpl.invoke(OperationTrackerImpl.java:74)
> at
> org.apache.tapestry5.ioc.internal.PerThreadOperationTracker.invoke(PerThreadOperationTracker.java:87)
> at
> org.apache.tapestry5.ioc.internal.RegistryImpl.invoke(RegistryImpl.java:1124)
> at
> org.apache.tapestry5.ioc.internal.OperationTrackingObjectCreator.createObject(OperationTrackingObjectCreator.java:49)
> at
> org.apache.tapestry5.ioc.internal.services.JustInTimeObjectCreator.obtainObjectFromCreator(JustInTimeObjectCreator.java:66)
> ... 6 more
> Caused by: java.lang.RuntimeException: Exception constructing service
> 'MasterObjectProvider': Error invoking service contribution method
> com.skycomm.ipkaizen.services.CoreModule.setupDBSYmbolObjectProviders(OrderedConfiguration):
> Exception constructing service 'MasterObjectProvider': Construction of
> service 'MasterObjectProvider' has failed due to recursion: the service
> depends on itself in some way. Please check
> org.apache.tapestry5.ioc.internal.services.MasterObjectProviderImpl(List,
> OperationTracker) (at MasterObjectProviderImpl.java:33) via
> org.apache.tapestry5.ioc.services.TapestryIOCModule.bind(ServiceBinder) (at
> TapestryIOCModule.java:49) for references to another service that is itself
> dependent on service 'MasterObjectProvider'.
> at
> org.apache.tapestry5.ioc.internal.services.JustInTimeObjectCreator.obtainObjectFromCreator(JustInTimeObjectCreator.java:75)
> at
> org.apache.tapestry5.ioc.internal.services.JustInTimeObjectCreator.createObject(JustInTimeObjectCreator.java:54)
> at $MasterObjectProvider_440ab1f4dbb7.delegate(Unknown Source)
> at $MasterObjectProvider_440ab1f4dbb7.provide(Unknown Source)
> at
> org.apache.tapestry5.ioc.internal.RegistryImpl.getObject(RegistryImpl.java:871)
> at
> org.apache.tapestry5.ioc.internal.ObjectLocatorImpl.getObject(ObjectLocatorImpl.java:57)
> at
> org.apache.tapestry5.ioc.internal.util.InternalUtils$6.run(InternalUtils.java:371)
> at
> org.apache.tapestry5.ioc.internal.OperationTrackerImpl$1.invoke(OperationTrackerImpl.java:51)
> at
> org.apache.tapestry5.ioc.internal.OperationTrackerImpl$1.invoke(OperationTrackerImpl.java:48)
> at
> org.apache.tapestry5.ioc.internal.OperationTrackerImpl.invoke(OperationTrackerImpl.java:74)
> at
> org.apache.tapestry5.ioc.internal.OperationTrackerImpl.run(OperationTrackerImpl.java:47)
> at
> org.apache.tapestry5.ioc.internal.PerThreadOperationTracker.run(PerThreadOperationTracker.java:76)
> at
> org.apache.tapestry5.ioc.internal.RegistryImpl.run(RegistryImpl.java:1119)
> at
> org.apache.tapestry5.ioc.internal.util.InternalUtils.injectIntoFields(InternalUtils.java:338)
> at
> org.apache.tapestry5.ioc.internal.ModuleImpl.instantiateModuleInstance(ModuleImpl.java:433)
> ... 71 more
> Caused by: java.lang.RuntimeException: Error invoking service contribution
> method
> com.skycomm.ipkaizen.services.CoreModule.setupDBSYmbolObjectProviders(OrderedConfiguration):
> Exception constructing service 'MasterObjectProvider': Construction of
> service 'MasterObjectProvider' has failed due to recursion: the service
> depends on itself in some way. Please check
> org.apache.tapestry5.ioc.internal.services.MasterObjectProviderImpl(List,
> OperationTracker) (at MasterObjectProviderImpl.java:33) via
> org.apache.tapestry5.ioc.services.TapestryIOCModule.bind(ServiceBinder) (at
> TapestryIOCModule.java:49) for references to another service that is itself
> dependent on service 'MasterObjectProvider'.
> at
> org.apache.tapestry5.ioc.internal.ContributionDefImpl.invokeMethod(ContributionDefImpl.java:130)
> at
> org.apache.tapestry5.ioc.internal.ContributionDefImpl.contribute(ContributionDefImpl.java:80)
> at
> org.apache.tapestry5.ioc.internal.RegistryImpl$9.run(RegistryImpl.java:633)
> at
> org.apache.tapestry5.ioc.internal.OperationTrackerImpl$1.invoke(OperationTrackerImpl.java:51)
> at
> org.apache.tapestry5.ioc.internal.OperationTrackerImpl$1.invoke(OperationTrackerImpl.java:48)
> at
> org.apache.tapestry5.ioc.internal.OperationTrackerImpl.invoke(OperationTrackerImpl.java:74)
> at
> org.apache.tapestry5.ioc.internal.OperationTrackerImpl.run(OperationTrackerImpl.java:47)
> at
> org.apache.tapestry5.ioc.internal.PerThreadOperationTracker.run(PerThreadOperationTracker.java:76)
> at
> org.apache.tapestry5.ioc.internal.RegistryImpl.addToOrderedConfiguration(RegistryImpl.java:629)
> at
> org.apache.tapestry5.ioc.internal.RegistryImpl.getOrderedConfiguration(RegistryImpl.java:483)
> at
> org.apache.tapestry5.ioc.internal.ServiceResourcesImpl$2.invoke(ServiceResourcesImpl.java:110)
> at
> org.apache.tapestry5.ioc.internal.ServiceResourcesImpl$2.invoke(ServiceResourcesImpl.java:107)
> at
> org.apache.tapestry5.ioc.internal.OperationTrackerImpl.invoke(OperationTrackerImpl.java:74)
> at
> org.apache.tapestry5.ioc.internal.PerThreadOperationTracker.invoke(PerThreadOperationTracker.java:87)
> at
> org.apache.tapestry5.ioc.internal.RegistryImpl.invoke(RegistryImpl.java:1124)
> at
> org.apache.tapestry5.ioc.internal.ServiceResourcesImpl.getOrderedConfiguration(ServiceResourcesImpl.java:105)
> at
> org.apache.tapestry5.ioc.internal.AbstractServiceCreator.getOrderedConfiguration(AbstractServiceCreator.java:123)
> at
> org.apache.tapestry5.ioc.internal.AbstractServiceCreator.access$200(AbstractServiceCreator.java:35)
> at
> org.apache.tapestry5.ioc.internal.AbstractServiceCreator$1.findResource(AbstractServiceCreator.java:103)
> at
> org.apache.tapestry5.ioc.internal.util.DelegatingInjectionResources.findResource(DelegatingInjectionResources.java:38)
> at
> org.apache.tapestry5.ioc.internal.util.InternalUtils.calculateInjection(InternalUtils.java:231)
> at
> org.apache.tapestry5.ioc.internal.util.InternalUtils.access$000(InternalUtils.java:50)
> at
> org.apache.tapestry5.ioc.internal.util.InternalUtils$4.invoke(InternalUtils.java:289)
> at
> org.apache.tapestry5.ioc.internal.util.InternalUtils$4.invoke(InternalUtils.java:286)
> at
> org.apache.tapestry5.ioc.internal.OperationTrackerImpl.invoke(OperationTrackerImpl.java:74)
> at
> org.apache.tapestry5.ioc.internal.PerThreadOperationTracker.invoke(PerThreadOperationTracker.java:87)
> at
> org.apache.tapestry5.ioc.internal.RegistryImpl.invoke(RegistryImpl.java:1124)
> at
> org.apache.tapestry5.ioc.internal.util.InternalUtils.calculateParameters(InternalUtils.java:293)
> at
> org.apache.tapestry5.ioc.internal.util.InternalUtils$23.invoke(InternalUtils.java:1488)
> at
> org.apache.tapestry5.ioc.internal.util.InternalUtils$23.invoke(InternalUtils.java:1483)
> at
> org.apache.tapestry5.ioc.internal.OperationTrackerImpl.invoke(OperationTrackerImpl.java:74)
> at
> org.apache.tapestry5.ioc.internal.PerThreadOperationTracker.invoke(PerThreadOperationTracker.java:87)
> at
> org.apache.tapestry5.ioc.internal.RegistryImpl.invoke(RegistryImpl.java:1124)
> at
> org.apache.tapestry5.ioc.internal.util.InternalUtils.createConstructorConstructionPlan(InternalUtils.java:1480)
> at
> org.apache.tapestry5.ioc.internal.ConstructorServiceCreator.getPlan(ConstructorServiceCreator.java:52)
> at
> org.apache.tapestry5.ioc.internal.ConstructorServiceCreator.createObject(ConstructorServiceCreator.java:61)
> at
> org.apache.tapestry5.ioc.internal.OperationTrackingObjectCreator$1.invoke(OperationTrackingObjectCreator.java:45)
> at
> org.apache.tapestry5.ioc.internal.OperationTrackerImpl.invoke(OperationTrackerImpl.java:74)
> at
> org.apache.tapestry5.ioc.internal.PerThreadOperationTracker.invoke(PerThreadOperationTracker.java:87)
> at
> org.apache.tapestry5.ioc.internal.RegistryImpl.invoke(RegistryImpl.java:1124)
> at
> org.apache.tapestry5.ioc.internal.OperationTrackingObjectCreator.createObject(OperationTrackingObjectCreator.java:49)
> at
> org.apache.tapestry5.ioc.internal.SingletonServiceLifecycle.createService(SingletonServiceLifecycle.java:29)
> at
> org.apache.tapestry5.ioc.internal.LifecycleWrappedServiceCreator.createObject(LifecycleWrappedServiceCreator.java:46)
> at
> org.apache.tapestry5.ioc.internal.RecursiveServiceCreationCheckWrapper.createObject(RecursiveServiceCreationCheckWrapper.java:60)
> at
> org.apache.tapestry5.ioc.internal.OperationTrackingObjectCreator$1.invoke(OperationTrackingObjectCreator.java:45)
> at
> org.apache.tapestry5.ioc.internal.OperationTrackerImpl.invoke(OperationTrackerImpl.java:74)
> at
> org.apache.tapestry5.ioc.internal.PerThreadOperationTracker.invoke(PerThreadOperationTracker.java:87)
> at
> org.apache.tapestry5.ioc.internal.RegistryImpl.invoke(RegistryImpl.java:1124)
> at
> org.apache.tapestry5.ioc.internal.OperationTrackingObjectCreator.createObject(OperationTrackingObjectCreator.java:49)
> at
> org.apache.tapestry5.ioc.internal.services.JustInTimeObjectCreator.obtainObjectFromCreator(JustInTimeObjectCreator.java:66)
> ... 85 more
> Caused by: java.lang.RuntimeException: Exception constructing service
> 'MasterObjectProvider': Construction of service 'MasterObjectProvider' has
> failed due to recursion: the service depends on itself in some way. Please
> check
> org.apache.tapestry5.ioc.internal.services.MasterObjectProviderImpl(List,
> OperationTracker) (at MasterObjectProviderImpl.java:33) via
> org.apache.tapestry5.ioc.services.TapestryIOCModule.bind(ServiceBinder) (at
> TapestryIOCModule.java:49) for references to another service that is itself
> dependent on service 'MasterObjectProvider'.
> at
> org.apache.tapestry5.ioc.internal.services.JustInTimeObjectCreator.obtainObjectFromCreator(JustInTimeObjectCreator.java:75)
> at
> org.apache.tapestry5.ioc.internal.services.JustInTimeObjectCreator.createObject(JustInTimeObjectCreator.java:54)
> at $MasterObjectProvider_440ab1f4dbb7.delegate(Unknown Source)
> at $MasterObjectProvider_440ab1f4dbb7.provide(Unknown Source)
> at
> org.apache.tapestry5.ioc.internal.RegistryImpl.getObject(RegistryImpl.java:871)
> at
> org.apache.tapestry5.ioc.internal.ObjectLocatorImpl.getObject(ObjectLocatorImpl.java:57)
> at
> org.apache.tapestry5.ioc.internal.util.InternalUtils.calculateInjection(InternalUtils.java:257)
> at
> org.apache.tapestry5.ioc.internal.util.InternalUtils.access$000(InternalUtils.java:50)
> at
> org.apache.tapestry5.ioc.internal.util.InternalUtils$4.invoke(InternalUtils.java:289)
> at
> org.apache.tapestry5.ioc.internal.util.InternalUtils$4.invoke(InternalUtils.java:286)
> at
> org.apache.tapestry5.ioc.internal.OperationTrackerImpl.invoke(OperationTrackerImpl.java:74)
> at
> org.apache.tapestry5.ioc.internal.PerThreadOperationTracker.invoke(PerThreadOperationTracker.java:87)
> at
> org.apache.tapestry5.ioc.internal.RegistryImpl.invoke(RegistryImpl.java:1124)
> at
> org.apache.tapestry5.ioc.internal.util.InternalUtils.calculateParameters(InternalUtils.java:293)
> at
> org.apache.tapestry5.ioc.internal.util.InternalUtils$23.invoke(InternalUtils.java:1488)
> at
> org.apache.tapestry5.ioc.internal.util.InternalUtils$23.invoke(InternalUtils.java:1483)
> at
> org.apache.tapestry5.ioc.internal.OperationTrackerImpl.invoke(OperationTrackerImpl.java:74)
> at
> org.apache.tapestry5.ioc.internal.PerThreadOperationTracker.invoke(PerThreadOperationTracker.java:87)
> at
> org.apache.tapestry5.ioc.internal.RegistryImpl.invoke(RegistryImpl.java:1124)
> at
> org.apache.tapestry5.ioc.internal.util.InternalUtils.createConstructorConstructionPlan(InternalUtils.java:1480)
> at
> org.apache.tapestry5.ioc.internal.ConstructorServiceCreator.getPlan(ConstructorServiceCreator.java:52)
> at
> org.apache.tapestry5.ioc.internal.ConstructorServiceCreator.createObject(ConstructorServiceCreator.java:61)
> at
> org.apache.tapestry5.ioc.internal.ServiceResourcesImpl$4.invoke(ServiceResourcesImpl.java:160)
> at
> org.apache.tapestry5.ioc.internal.OperationTrackerImpl.invoke(OperationTrackerImpl.java:74)
> at
> org.apache.tapestry5.ioc.internal.PerThreadOperationTracker.invoke(PerThreadOperationTracker.java:87)
> at
> org.apache.tapestry5.ioc.internal.RegistryImpl.invoke(RegistryImpl.java:1124)
> at
> org.apache.tapestry5.ioc.internal.ServiceResourcesImpl.autobuild(ServiceResourcesImpl.java:146)
> at
> org.apache.tapestry5.ioc.internal.ServiceResourcesImpl.autobuild(ServiceResourcesImpl.java:170)
> at
> org.apache.tapestry5.ioc.internal.AbstractConfigurationImpl.instantiate(AbstractConfigurationImpl.java:45)
> at
> org.apache.tapestry5.ioc.internal.ValidatingOrderedConfigurationWrapper.addInstance(ValidatingOrderedConfigurationWrapper.java:95)
> at
> com.skycomm.ipkaizen.services.CoreModule.setupDBSYmbolObjectProviders(CoreModule.java:51)
> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
> at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
> at java.lang.reflect.Method.invoke(Unknown Source)
> at
> org.apache.tapestry5.ioc.internal.ContributionDefImpl.invokeMethod(ContributionDefImpl.java:120)
> ... 134 more
> Caused by: org.apache.tapestry5.ioc.internal.OperationException:
> Construction of service 'MasterObjectProvider' has failed due to recursion:
> the service depends on itself in some way. Please check
> org.apache.tapestry5.ioc.internal.services.MasterObjectProviderImpl(List,
> OperationTracker) (at MasterObjectProviderImpl.java:33) via
> org.apache.tapestry5.ioc.services.TapestryIOCModule.bind(ServiceBinder) (at
> TapestryIOCModule.java:49) for references to another service that is itself
> dependent on service 'MasterObjectProvider'.
> at
> org.apache.tapestry5.ioc.internal.OperationTrackerImpl.logAndRethrow(OperationTrackerImpl.java:121)
> at
> org.apache.tapestry5.ioc.internal.OperationTrackerImpl.invoke(OperationTrackerImpl.java:88)
> at
> org.apache.tapestry5.ioc.internal.PerThreadOperationTracker.invoke(PerThreadOperationTracker.java:87)
> at
> org.apache.tapestry5.ioc.internal.RegistryImpl.invoke(RegistryImpl.java:1124)
> at
> org.apache.tapestry5.ioc.internal.OperationTrackingObjectCreator.createObject(OperationTrackingObjectCreator.java:49)
> at
> org.apache.tapestry5.ioc.internal.services.JustInTimeObjectCreator.obtainObjectFromCreator(JustInTimeObjectCreator.java:66)
> ... 169 more
> Caused by: java.lang.IllegalStateException: Construction of service
> 'MasterObjectProvider' has failed due to recursion: the service depends on
> itself in some way. Please check
> org.apache.tapestry5.ioc.internal.services.MasterObjectProviderImpl(List,
> OperationTracker) (at MasterObjectProviderImpl.java:33) via
> org.apache.tapestry5.ioc.services.TapestryIOCModule.bind(ServiceBinder) (at
> TapestryIOCModule.java:49) for references to another service that is itself
> dependent on service 'MasterObjectProvider'.
> at
> org.apache.tapestry5.ioc.internal.RecursiveServiceCreationCheckWrapper.createObject(RecursiveServiceCreationCheckWrapper.java:52)
> at
> org.apache.tapestry5.ioc.internal.OperationTrackingObjectCreator$1.invoke(OperationTrackingObjectCreator.java:45)
> at
> org.apache.tapestry5.ioc.internal.OperationTrackerImpl.invoke(OperationTrackerImpl.java:74)
> ... 173 more
>
>


On Mon, Sep 17, 2012 at 7:41 PM, Muhammad Gelbana <m.gelb...@gmail.com>wrote:

> *@Lance*
>
>> Are you running into a "chicken or the egg scanerio"?
>
> No. I don't think so it's just that I was trying to make tapestry not
> cache my symbols values. What gave you that impression ?
>
>
> *@Thiago*
>
>> Don't forget that you can create your own Symbol-like annotation to
>> inject your mutable configuration symbols without using your service
>> directly.
>
> That's exactly what I was trying to do. Just to get my feet wet with
> tapestry.
>
> You need to contribute your ServiceProviders to the SymbolSource service,
>> not MasterObjectProvider. There's no need
>
> But I need a source that doesn't cache it's values. I'm contributing a *
> SymbolObjectProvider* because I cannot contribute my providers to the
> default *SymbolSource* which caches values and has 1 to 1 relationship
> with *SymbolObjectProvider*. So I think I need to contribute my own *
> SymbolObjectProvider* (i.e. *DBSymbolObjectProvider*) along with my own *
> SymbolSource* (i.e. *DBSymbolSource*) which doesn't cache values and
> contribute to the latter my own *SymbolProviders*.
>
> So all this is to have uncachable symbols. But about the solution I'll
> finally implement, which is to inject my own *SymbolSource* which doesn't
> cache values with my *SymbolProviders* contributed to it, is it ok to
> also contribute the *SystemPropertiesProvider* contributed to it too ?
> Because I'll need to expand symbols in my custom *SymbolProviders*. For
> example:
>
> My providers will have symbols such as: testagent.{ta.id}.enabled
> And my application will startup with a JVM option -Dta.id=XXX
>
> So I need to contribute *SystemPropertiesProvider* to my new *SymbolSource
> *, will there by any issue I didn't notice ? I assume not, just asking
> the developers.
>
> Thank you all a lot for your time.
>
>
> On Mon, Sep 17, 2012 at 6:45 PM, Thiago H de Paula Figueiredo <
> thiag...@gmail.com> wrote:
>
>> On Mon, 17 Sep 2012 12:40:50 -0300, Muhammad Gelbana <m.gelb...@gmail.com>
>> wrote:
>>
>>
>>>> Why don't you just @Inject your SymbolProvider implementation in the
>>>> place
>>>> you need the mutable configurations and use it directly instead of using
>>>> SymbolSource?
>>>>
>>>
>>> You are talking about injecting a service and calling it's methods for
>>> values, correct ? Anyway, I guess I don't have another option.
>>>
>>
>> Yep. Don't forget that you can create your own Symbol-like annotation to
>> inject your mutable configuration symbols without using your service
>> directly. In Tapestry sources, take a look at SymbolObjectProvider and
>> TapestryIOCModule to know how to wire it into Tapestry-IoC.
>>
>>  One more thing, although I'll follow your advice, but I still want to
>>> know how to do this the *@Symbol* way. I tried to contribute a symbol object
>>>
>>> provider with it's own symbol source and the symbol source it self has my
>>> own symbol providers dealing with the database, but it isn't working. I'm
>>> just trying to figure out my mistake.
>>>
>>> @Contribute(**MasterObjectProvider.class)
>>>
>>>> public static void
>>>> setupDBSYmbolObjectProviders(**OrderedConfiguration<**ObjectProvider>
>>>> configuration) {
>>>> configuration.addInstance("**DBSymbol", DBSymbolObjectProvider.class,
>>>> OrderConstraintBuilder.before(**"AnnotationBasedContributions"**
>>>> ).build());
>>>> }
>>>>
>>>
>> You need to contribute your ServiceProviders to the SymbolSource service,
>> not MasterObjectProvider. There's no need
>>
>>  *DBSymbolObjectProvider* implements *ObjectProvider* and actually get's
>>>
>>> built with my own symbol source. My symbol source is built this way:
>>>
>>> public SymbolSource buildDBSymbolSource(@Named("**IpkConfig")
>>> SymbolProvider
>>>
>>>> ipkConfig, @Named("IxProConfig") SymbolProvider ixProConfig) {
>>>> return new DBSymbolSource(Arrays.asList(**ipkConfig, ixProConfig));
>>>> }
>>>>
>>>
>> You're just creating a service named DBSymbolSource, while you should
>> contribute your service providers to the SymbolSource service instead.
>>
>>
>> --
>> Thiago H. de Paula Figueiredo
>>
>
>

Reply via email to