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