Hi guys,
having a bit of trouble overriding my services with T5.2 (build from a
few days ago ... can't use 5.1 due to some bugs that got fixed in
5.2). I have AppModule and a submodule:
@SubModule( { ServicesModule.class })
public class AppModule {
public static void bind(ServiceBinder binder) {
// this works if ISiteService is not bound in
ServicesModule
// binder.bind(ISiteService.class, MySiteService.class);
}
public static void contributeServiceOverride(
MappedConfiguration<Class<?>, Object> configuration) {
// this fails with exception below
configuration.addInstance(ISiteService.class,
MySiteService.class);
}
}
On startup I get an error below about recursive loading of
'ServiceOverride'. MySiteService has a long chain of dependencies, but
nothing is recursive in it. If instead I override with a mock service
with no dependencies, things work. So the culprit here is not the
custom services, but rather Tapestry 'ServiceOverride'. Any idea
what's wrong?
Thanks,
Andrus
[02/Apr/2010:13:50:03] main ERROR Registry: Construction of service
'ServiceOverride' has failed due to recursion: the service depends on
itself in some way. Please check
org.apache.tapestry5.ioc.internal.services.ServiceOverrideImpl(Map)
(at ServiceOverrideImpl.java:31) via
org
.apache.tapestry5.ioc.services.TapestryIOCModule.bind(ServiceBinder)
(at TapestryIOCModule.java:46) for references to another service that
is itself dependent on service 'ServiceOverride'.
[02/Apr/2010:13:50:03] main ERROR Registry: Operations trace:
[02/Apr/2010:13:50:03] main ERROR Registry: [ 1] Realizing service
ServletApplicationInitializer
[02/Apr/2010:13:50:03] main ERROR Registry: [ 2] Invoking
org
.apache
.tapestry5
.services.TapestryModule.buildServletApplicationInitializer(Logger,
List, ApplicationInitializer) (at TapestryModule.java:1435)
[02/Apr/2010:13:50:03] main ERROR Registry: [ 3] Constructing module
class org.apache.tapestry5.services.TapestryModule
[02/Apr/2010:13:50:03] main ERROR Registry: [ 4] Determining
injection value for parameter #1
(org.apache.tapestry5.ioc.services.PipelineBuilder)
[02/Apr/2010:13:50:03] main ERROR Registry: [ 5] Resolving object of
type org.apache.tapestry5.ioc.services.PipelineBuilder using
MasterObjectProvider
[02/Apr/2010:13:50:03] main ERROR Registry: [ 6] Realizing service
ServiceOverride
[02/Apr/2010:13:50:03] main ERROR Registry: [ 7] Invoking
org.apache.tapestry5.ioc.internal.services.ServiceOverrideImpl(Map)
(at ServiceOverrideImpl.java:31) via
org
.apache.tapestry5.ioc.services.TapestryIOCModule.bind(ServiceBinder)
(at TapestryIOCModule.java:46)
[02/Apr/2010:13:50:03] main ERROR Registry: [ 8] Determining
injection value for parameter #1 (java.util.Map)
[02/Apr/2010:13:50:03] main ERROR Registry: [ 9] Collecting mapped
configuration for service ServiceOverride
[02/Apr/2010:13:50:03] main ERROR Registry: [10] Invoking method
xxxxx
.services.AppModule.contributeServiceOverride(MappedConfiguration) (at
AppModule.java:25).
[02/Apr/2010:13:50:03] main ERROR Registry: [11] Autobuilding
instance of class xxxxx.services.site.MySiteService
[02/Apr/2010:13:50:03] main ERROR Registry: [12] Determining
injection value for parameter #1 (xxxx.service.db.IDataService)
[02/Apr/2010:13:50:03] main ERROR Registry: [13] Resolving object of
type xxxx.service.db.IDataService using MasterObjectProvider
[02/Apr/2010:13:50:03] main ERROR Registry: [14] Realizing service
ServiceOverride
[02/Apr/2010:13:50:03] main ERROR ServiceOverride: Construction of
service ServiceOverride failed: Error invoking constructor
org.apache.tapestry5.ioc.internal.services.ServiceOverrideImpl(Map)
(at ServiceOverrideImpl.java:31) via
org
.apache.tapestry5.ioc.services.TapestryIOCModule.bind(ServiceBinder)
(at TapestryIOCModule.java:46) (for service 'ServiceOverride'): Error
invoking service contribution method
xxxxx
.services.AppModule.contributeServiceOverride(MappedConfiguration):
Error invoking constructor
xxxxx.services.site.MySiteService(IDataService) (at MySiteService.java:
16) (for service 'ServiceOverride'): Exception constructing service
'ServiceOverride': Construction of service 'ServiceOverride' has
failed due to recursion: the service depends on itself in some way.
Please check
org.apache.tapestry5.ioc.internal.services.ServiceOverrideImpl(Map)
(at ServiceOverrideImpl.java:31) via
org
.apache.tapestry5.ioc.services.TapestryIOCModule.bind(ServiceBinder)
(at TapestryIOCModule.java:46) for references to another service that
is itself dependent on service 'ServiceOverride'.
...
java.lang.IllegalStateException: Construction of service
'ServiceOverride' has failed due to recursion: the service depends on
itself in some way. Please check
org.apache.tapestry5.ioc.internal.services.ServiceOverrideImpl(Map)
(at ServiceOverrideImpl.java:31) via
org
.apache.tapestry5.ioc.services.TapestryIOCModule.bind(ServiceBinder)
(at TapestryIOCModule.java:46) for references to another service that
is itself dependent on service 'ServiceOverride'.
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:68)
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org
For additional commands, e-mail: users-h...@tapestry.apache.org