You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@tapestry.apache.org by Andrus Adamchik <an...@objectstyle.org> on 2010/04/02 12:58:12 UTC

ServiceOverride recursion issue - T5.2

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-unsubscribe@tapestry.apache.org
For additional commands, e-mail: users-help@tapestry.apache.org


Re: ServiceOverride recursion issue - T5.2

Posted by Andrus Adamchik <an...@objectstyle.org>.
FWIW, when I got back to the override issue after a few days of  
unrelated work (mostly expanding the registry with a few unrelated  
services), suddenly this started to work:

@SubModule( { ServicesModule.class })
public class AppModule {

	public static void contributeServiceOverride(
			MappedConfiguration<Class<?>, Object> configuration,
			@Local ISiteService siteServiceOverride) {

		configuration.add(ISiteService.class, siteServiceOverride);
	}

	public static ISiteService buildXyz(IDataService dataService) {
		return new MySiteService(dataService);
	}
}

A different order of service loading or a typo in the old build method  
name... Hard to say now.

Andrus


On Apr 2, 2010, at 4:52 PM, Andrus Adamchik wrote:

> Ok, not very specific, but I found what you are referring to.
>
> Unfortunately @Local annotation on the override itself doesn't help.  
> It seems like I have to define local versions of all dependencies,  
> which is something I'd really like to avoid for stateless services.  
> A similar structure of services worked with Hivemind and T4, so I  
> wonder if there's a way to make it work in T5 as well? (other than  
> binding concrete service implementation at the app level to avoid  
> overrides)
>
> Andrus
>
>
> On Apr 2, 2010, at 4:21 PM, Howard Lewis Ship wrote:
>
>> http://tapestry.apache.org/tapestry5.1/tapestry-ioc/cookbook/override.html
>>
>> On Fri, Apr 2, 2010 at 3:58 AM, Andrus Adamchik <andrus@objectstyle.org 
>> > wrote:
>>> 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-unsubscribe@tapestry.apache.org
>>> For additional commands, e-mail: users-help@tapestry.apache.org
>>>
>>>
>>
>>
>>
>> -- 
>> 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-unsubscribe@tapestry.apache.org
>> For additional commands, e-mail: users-help@tapestry.apache.org
>>
>>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
> For additional commands, e-mail: users-help@tapestry.apache.org
>
>


---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
For additional commands, e-mail: users-help@tapestry.apache.org


Re: ServiceOverride recursion issue - T5.2

Posted by Andrus Adamchik <an...@objectstyle.org>.
Ok, not very specific, but I found what you are referring to.

Unfortunately @Local annotation on the override itself doesn't help.  
It seems like I have to define local versions of all dependencies,  
which is something I'd really like to avoid for stateless services. A  
similar structure of services worked with Hivemind and T4, so I wonder  
if there's a way to make it work in T5 as well? (other than binding  
concrete service implementation at the app level to avoid overrides)

Andrus


On Apr 2, 2010, at 4:21 PM, Howard Lewis Ship wrote:

> http://tapestry.apache.org/tapestry5.1/tapestry-ioc/cookbook/override.html
>
> On Fri, Apr 2, 2010 at 3:58 AM, Andrus Adamchik <andrus@objectstyle.org 
> > wrote:
>> 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-unsubscribe@tapestry.apache.org
>> For additional commands, e-mail: users-help@tapestry.apache.org
>>
>>
>
>
>
> -- 
> 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-unsubscribe@tapestry.apache.org
> For additional commands, e-mail: users-help@tapestry.apache.org
>
>


---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
For additional commands, e-mail: users-help@tapestry.apache.org


Re: ServiceOverride recursion issue - T5.2

Posted by Howard Lewis Ship <hl...@gmail.com>.
http://tapestry.apache.org/tapestry5.1/tapestry-ioc/cookbook/override.html

On Fri, Apr 2, 2010 at 3:58 AM, Andrus Adamchik <an...@objectstyle.org> wrote:
> 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-unsubscribe@tapestry.apache.org
> For additional commands, e-mail: users-help@tapestry.apache.org
>
>



-- 
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-unsubscribe@tapestry.apache.org
For additional commands, e-mail: users-help@tapestry.apache.org