You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@tapestry.apache.org by Muhammad Gelbana <m....@gmail.com> on 2012/12/20 22:37:48 UTC

[5.3.6] RegistryShutdownHub.addRegistryWillShutdownListener cannot refer to injected services

One of my sub-modules registers a "Registry will shutdown" listener. That
listener is a service that needs to know if the app is shutting down and
thats how I'm doing this:



@Startup
>     public void startup(final ISCMailer mailer, RegistryShutdownHub
> registryShutdown) {
>         registryShutdown.addRegistryWillShutdownListener(new Runnable() {
>             @Override
>             public void run() {
>                 mailer.shutdown();
>             }
>         });
>     }


The thing is that tapestry throws an exception whenever the app shuts down:

23:29:04 ERROR (RecursiveServiceCreationCheckWrapper.java:64)-[Thread-999]
> Construction of service ISCMailer failed: Method
> org.apache.tapestry5.ioc.internal.RegistryImpl.getObject(RegistryImpl.java:853)
> may no longer be invoked.
> org.apache.tapestry5.ioc.internal.OperationException: Method
> org.apache.tapestry5.ioc.internal.RegistryImpl.getObject(RegistryImpl.java:853)
> may no longer be invoked.
> 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.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)
> at
> org.apache.tapestry5.ioc.internal.services.JustInTimeObjectCreator.createObject(JustInTimeObjectCreator.java:54)
> at $ISCMailer_6d6446fae0659.delegate(Unknown Source)
> at $ISCyMailer_6d6446fae0659.shutdown(Unknown Source)
> at com.sc.ipk.services.CoreModule$1.run(CoreModule.java:100)


Shouldn't it be safe to invoke that method (shutdown) on an injected
service since this is expected to run before the registry shuts down ?

Re: [5.3.6] RegistryShutdownHub.addRegistryWillShutdownListener cannot refer to injected services

Posted by Muhammad Gelbana <m....@gmail.com>.
It's possible that it hasn't been initialized till then. Should I open a
jira issue ?

On Fri, Dec 21, 2012 at 4:19 AM, Howard Lewis Ship <hl...@gmail.com> wrote:

> We could possibly do some work so that the necessary locks are only locked
> after the "will-shutdown" listeners are notified, but before the
> "did-shutdown" listeners are notified.
>
>
> On Thu, Dec 20, 2012 at 4:50 PM, Thiago H de Paula Figueiredo <
> thiagohp@gmail.com> wrote:
>
> > On Thu, 20 Dec 2012 20:24:54 -0200, Muhammad Gelbana <
> m.gelbana@gmail.com>
> > wrote:
> >
> >  No it's not
> >>
> >> binder.bind(ISCMailer.class, SCMailerImpl.class);
> >>
> >
> > Try binder.bind(ISCMailer.class, SCMailerImpl.class).eagerLoad(**); It
> > seems your service wasn't used nor reallyl instanced (Tapestry services
> are
> > proxied, so only the proxy is created at first, with the real service
> > instance created on demand) before the registry shutdown, so Tapestry
> ends
> > up attempting to instance it when the registry is already shutting down.
> >
> >
> > --
> > Thiago H. de Paula Figueiredo
> >
> > ------------------------------**------------------------------**---------
> > To unsubscribe, e-mail: users-unsubscribe@tapestry.**apache.org<
> 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
>

Re: [5.3.6] RegistryShutdownHub.addRegistryWillShutdownListener cannot refer to injected services

Posted by Howard Lewis Ship <hl...@gmail.com>.
We could possibly do some work so that the necessary locks are only locked
after the "will-shutdown" listeners are notified, but before the
"did-shutdown" listeners are notified.


On Thu, Dec 20, 2012 at 4:50 PM, Thiago H de Paula Figueiredo <
thiagohp@gmail.com> wrote:

> On Thu, 20 Dec 2012 20:24:54 -0200, Muhammad Gelbana <m....@gmail.com>
> wrote:
>
>  No it's not
>>
>> binder.bind(ISCMailer.class, SCMailerImpl.class);
>>
>
> Try binder.bind(ISCMailer.class, SCMailerImpl.class).eagerLoad(**); It
> seems your service wasn't used nor reallyl instanced (Tapestry services are
> proxied, so only the proxy is created at first, with the real service
> instance created on demand) before the registry shutdown, so Tapestry ends
> up attempting to instance it when the registry is already shutting down.
>
>
> --
> Thiago H. de Paula Figueiredo
>
> ------------------------------**------------------------------**---------
> To unsubscribe, e-mail: users-unsubscribe@tapestry.**apache.org<us...@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

Re: [5.3.6] RegistryShutdownHub.addRegistryWillShutdownListener cannot refer to injected services

Posted by Thiago H de Paula Figueiredo <th...@gmail.com>.
On Thu, 20 Dec 2012 20:24:54 -0200, Muhammad Gelbana <m....@gmail.com>  
wrote:

> No it's not
>
> binder.bind(ISCMailer.class, SCMailerImpl.class);

Try binder.bind(ISCMailer.class, SCMailerImpl.class).eagerLoad(); It seems  
your service wasn't used nor reallyl instanced (Tapestry services are  
proxied, so only the proxy is created at first, with the real service  
instance created on demand) before the registry shutdown, so Tapestry ends  
up attempting to instance it when the registry is already shutting down.

-- 
Thiago H. de Paula Figueiredo

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


Re: [5.3.6] RegistryShutdownHub.addRegistryWillShutdownListener cannot refer to injected services

Posted by Muhammad Gelbana <m....@gmail.com>.
No it's not

binder.bind(ISCMailer.class, SCMailerImpl.class);


On Thu, Dec 20, 2012 at 11:48 PM, Thiago H de Paula Figueiredo <
thiagohp@gmail.com> wrote:

> Is this ISCMailer server perthread? Just guessing . . .
>
>
> On Thu, 20 Dec 2012 19:37:48 -0200, Muhammad Gelbana <m....@gmail.com>
> wrote:
>
>  One of my sub-modules registers a "Registry will shutdown" listener. That
>> listener is a service that needs to know if the app is shutting down and
>> thats how I'm doing this:
>>
>>
>>
>> @Startup
>>
>>>     public void startup(final ISCMailer mailer, RegistryShutdownHub
>>> registryShutdown) {
>>>         registryShutdown.**addRegistryWillShutdownListene**r(new
>>> Runnable() {
>>>             @Override
>>>             public void run() {
>>>                 mailer.shutdown();
>>>             }
>>>         });
>>>     }
>>>
>>
>>
>> The thing is that tapestry throws an exception whenever the app shuts
>> down:
>>
>> 23:29:04 ERROR (**RecursiveServiceCreationCheckW**
>> rapper.java:64)-[Thread-999]
>>
>>> Construction of service ISCMailer failed: Method
>>> org.apache.tapestry5.ioc.**internal.RegistryImpl.**
>>> getObject(RegistryImpl.java:**853)
>>> may no longer be invoked.
>>> org.apache.tapestry5.ioc.**internal.OperationException: Method
>>> org.apache.tapestry5.ioc.**internal.RegistryImpl.**
>>> getObject(RegistryImpl.java:**853)
>>> may no longer be invoked.
>>> 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.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.**
>>> createConstructorConstructionP**lan(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.**RecursiveServiceCreationCheckW**
>>> rapper.createObject(**RecursiveServiceCreationCheckW**rapper.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)
>>> at
>>> org.apache.tapestry5.ioc.**internal.services.**JustInTimeObjectCreator.*
>>> *createObject(**JustInTimeObjectCreator.java:**54)
>>> at $ISCMailer_6d6446fae0659.**delegate(Unknown Source)
>>> at $ISCyMailer_6d6446fae0659.**shutdown(Unknown Source)
>>> at com.sc.ipk.services.**CoreModule$1.run(CoreModule.**java:100)
>>>
>>
>>
>> Shouldn't it be safe to invoke that method (shutdown) on an injected
>> service since this is expected to run before the registry shuts down ?
>>
>
>
> --
> Thiago H. de Paula Figueiredo
>
> ------------------------------**------------------------------**---------
> To unsubscribe, e-mail: users-unsubscribe@tapestry.**apache.org<us...@tapestry.apache.org>
> For additional commands, e-mail: users-help@tapestry.apache.org
>
>

Re: [5.3.6] RegistryShutdownHub.addRegistryWillShutdownListener cannot refer to injected services

Posted by Thiago H de Paula Figueiredo <th...@gmail.com>.
Is this ISCMailer server perthread? Just guessing . . .

On Thu, 20 Dec 2012 19:37:48 -0200, Muhammad Gelbana <m....@gmail.com>  
wrote:

> One of my sub-modules registers a "Registry will shutdown" listener. That
> listener is a service that needs to know if the app is shutting down and
> thats how I'm doing this:
>
>
>
> @Startup
>>     public void startup(final ISCMailer mailer, RegistryShutdownHub
>> registryShutdown) {
>>         registryShutdown.addRegistryWillShutdownListener(new Runnable()  
>> {
>>             @Override
>>             public void run() {
>>                 mailer.shutdown();
>>             }
>>         });
>>     }
>
>
> The thing is that tapestry throws an exception whenever the app shuts  
> down:
>
> 23:29:04 ERROR  
> (RecursiveServiceCreationCheckWrapper.java:64)-[Thread-999]
>> Construction of service ISCMailer failed: Method
>> org.apache.tapestry5.ioc.internal.RegistryImpl.getObject(RegistryImpl.java:853)
>> may no longer be invoked.
>> org.apache.tapestry5.ioc.internal.OperationException: Method
>> org.apache.tapestry5.ioc.internal.RegistryImpl.getObject(RegistryImpl.java:853)
>> may no longer be invoked.
>> 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.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)
>> at
>> org.apache.tapestry5.ioc.internal.services.JustInTimeObjectCreator.createObject(JustInTimeObjectCreator.java:54)
>> at $ISCMailer_6d6446fae0659.delegate(Unknown Source)
>> at $ISCyMailer_6d6446fae0659.shutdown(Unknown Source)
>> at com.sc.ipk.services.CoreModule$1.run(CoreModule.java:100)
>
>
> Shouldn't it be safe to invoke that method (shutdown) on an injected
> service since this is expected to run before the registry shuts down ?


-- 
Thiago H. de Paula Figueiredo

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