You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tapestry.apache.org by Denis Stepanov <de...@gmail.com> on 2011/12/01 12:08:59 UTC
Re: 5.3 Service scope is not honored when using Autobuild (Upload's MultipartDecoder is not perthread!)
Igor, problem is that it doesn't work how it should, it is hard to explain :) btw I can tell a difference between proxy and real instance.
see steps to reproduce it https://issues.apache.org/jira/browse/TAP5-1765
I hope nobody has an upload component in production, interrupted file upload and every component event throws an exception. :)
Denis
Nov 30, 2011 v 6:21 PM, Igor Drobiazko:
> I'm sorry but I still don't get where the problem is. MultipartDecoder is
> per-thread service; there is not problem with @Autobuild in the builder
> method. UploadExceptionFilter holds the old instance because it holds the
> proxy which delegates to per-thread instances of MultipartDecoderImpl.
>
> On Wed, Nov 30, 2011 at 2:56 PM, Denis Stepanov <de...@gmail.com>wrote:
>
>> There is no problem with the code, problem is that it doesn't work how it
>> should since 5.3. MultipartDecoder is recreated I can see code beeing
>> invoked but UploadExceptionFilter still has the old instance an it will
>> throw an upload exception every component event.
>>
>> Problem it seems to be related to the using of Autobuild in a build
>> method, if I replace it with a constructor call MultipartDecoder will
>> became perthread again.
>>
>> Denis
>>
>> Nov 30, 2011 v 1:42 PM, Igor Drobiazko:
>>
>>> Hi,
>>>
>>> it works as expected. @Autobuild is a convenient way to invoke
>>> ObjectLocator#autobuild. As mentioned in the Javadocs, autobuild
>>> instantiates an object by invoking the public constructor with the most
>>> parameters. No scopes are mentioned there.
>>>
>>> Because the buildMultipartDecoder is annotated
>>> with @Scope(ScopeConstants.PERTHREAD), it's invoked for every new thread.
>>> The consequence is that the injected MultipartDecoderImpl instance is
>>> autobuild for every new request.
>>>
>>> I see no problems with that code.
>>>
>>> On Wed, Nov 30, 2011 at 1:27 PM, Denis Stepanov <
>> denis.stepanov@gmail.com>wrote:
>>>
>>>> Hi,
>>>>
>>>> It seems that instance created with @Autobuild will have default scope,
>>>> perthread is not honored at all, see folowing code from Upload project:
>>>>
>>>> @Scope(ScopeConstants.PERTHREAD)
>>>> public static MultipartDecoder buildMultipartDecoder(PerthreadManager
>>>> perthreadManager,
>>>>
>>>>
>>>> RegistryShutdownHub shutdownHub,
>>>>
>>>> @Autobuild
>>>>
>>>> MultipartDecoderImpl multipartDecoder)
>>>> {
>>>> // This is proabably overkill since the FileCleaner should catch
>>>> temporary files, but lets
>>>> // be safe.
>>>> perthreadManager.addThreadCleanupListener(multipartDecoder);
>>>>
>>>> if (needToAddShutdownListener.getAndSet(false))
>>>> {
>>>> shutdownHub.addRegistryShutdownListener(new Runnable()
>>>> {
>>>> public void run()
>>>> {
>>>> FileCleaner.exitWhenFinished();
>>>> }
>>>> });
>>>> }
>>>>
>>>> return multipartDecoder;
>>>> }
>>>>
>>>> MultipartDecoder should be perthread but it isn't, if there is an upload
>>>> exception every component event will throw that upload exception because
>>>> service have not been recreated perthread.
>>>>
>>>> Everything start to work correctly when I change build method to not
>> have
>>>> the autobuild implementation.
>>>>
>>>> Denis
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>> ---------------------------------------------------------------------
>>>> To unsubscribe, e-mail: dev-unsubscribe@tapestry.apache.org
>>>> For additional commands, e-mail: dev-help@tapestry.apache.org
>>>>
>>>>
>>>
>>>
>>> --
>>> Best regards,
>>>
>>> Igor Drobiazko
>>> http://tapestry5.de
>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: dev-unsubscribe@tapestry.apache.org
>> For additional commands, e-mail: dev-help@tapestry.apache.org
>>
>>
>
>
> --
> Best regards,
>
> Igor Drobiazko
> http://tapestry5.de
Re: 5.3 Service scope is not honored when using Autobuild (Upload's
MultipartDecoder is not perthread!)
Posted by Igor Drobiazko <ig...@gmail.com>.
Denis, you are right. I was able to reproduce your problem. Good catch.
Thank you for reporting the issue.
On Thu, Dec 1, 2011 at 12:08 PM, Denis Stepanov <de...@gmail.com>wrote:
> Igor, problem is that it doesn't work how it should, it is hard to explain
> :) btw I can tell a difference between proxy and real instance.
>
> see steps to reproduce it https://issues.apache.org/jira/browse/TAP5-1765
>
> I hope nobody has an upload component in production, interrupted file
> upload and every component event throws an exception. :)
>
> Denis
>
> Nov 30, 2011 v 6:21 PM, Igor Drobiazko:
>
> > I'm sorry but I still don't get where the problem is. MultipartDecoder is
> > per-thread service; there is not problem with @Autobuild in the builder
> > method. UploadExceptionFilter holds the old instance because it holds the
> > proxy which delegates to per-thread instances of MultipartDecoderImpl.
> >
> > On Wed, Nov 30, 2011 at 2:56 PM, Denis Stepanov <
> denis.stepanov@gmail.com>wrote:
> >
> >> There is no problem with the code, problem is that it doesn't work how
> it
> >> should since 5.3. MultipartDecoder is recreated I can see code beeing
> >> invoked but UploadExceptionFilter still has the old instance an it will
> >> throw an upload exception every component event.
> >>
> >> Problem it seems to be related to the using of Autobuild in a build
> >> method, if I replace it with a constructor call MultipartDecoder will
> >> became perthread again.
> >>
> >> Denis
> >>
> >> Nov 30, 2011 v 1:42 PM, Igor Drobiazko:
> >>
> >>> Hi,
> >>>
> >>> it works as expected. @Autobuild is a convenient way to invoke
> >>> ObjectLocator#autobuild. As mentioned in the Javadocs, autobuild
> >>> instantiates an object by invoking the public constructor with the most
> >>> parameters. No scopes are mentioned there.
> >>>
> >>> Because the buildMultipartDecoder is annotated
> >>> with @Scope(ScopeConstants.PERTHREAD), it's invoked for every new
> thread.
> >>> The consequence is that the injected MultipartDecoderImpl instance is
> >>> autobuild for every new request.
> >>>
> >>> I see no problems with that code.
> >>>
> >>> On Wed, Nov 30, 2011 at 1:27 PM, Denis Stepanov <
> >> denis.stepanov@gmail.com>wrote:
> >>>
> >>>> Hi,
> >>>>
> >>>> It seems that instance created with @Autobuild will have default
> scope,
> >>>> perthread is not honored at all, see folowing code from Upload
> project:
> >>>>
> >>>> @Scope(ScopeConstants.PERTHREAD)
> >>>> public static MultipartDecoder buildMultipartDecoder(PerthreadManager
> >>>> perthreadManager,
> >>>>
> >>>>
> >>>> RegistryShutdownHub shutdownHub,
> >>>>
> >>>> @Autobuild
> >>>>
> >>>> MultipartDecoderImpl multipartDecoder)
> >>>> {
> >>>> // This is proabably overkill since the FileCleaner should catch
> >>>> temporary files, but lets
> >>>> // be safe.
> >>>> perthreadManager.addThreadCleanupListener(multipartDecoder);
> >>>>
> >>>> if (needToAddShutdownListener.getAndSet(false))
> >>>> {
> >>>> shutdownHub.addRegistryShutdownListener(new Runnable()
> >>>> {
> >>>> public void run()
> >>>> {
> >>>> FileCleaner.exitWhenFinished();
> >>>> }
> >>>> });
> >>>> }
> >>>>
> >>>> return multipartDecoder;
> >>>> }
> >>>>
> >>>> MultipartDecoder should be perthread but it isn't, if there is an
> upload
> >>>> exception every component event will throw that upload exception
> because
> >>>> service have not been recreated perthread.
> >>>>
> >>>> Everything start to work correctly when I change build method to not
> >> have
> >>>> the autobuild implementation.
> >>>>
> >>>> Denis
> >>>>
> >>>>
> >>>>
> >>>>
> >>>>
> >>>>
> >>>> ---------------------------------------------------------------------
> >>>> To unsubscribe, e-mail: dev-unsubscribe@tapestry.apache.org
> >>>> For additional commands, e-mail: dev-help@tapestry.apache.org
> >>>>
> >>>>
> >>>
> >>>
> >>> --
> >>> Best regards,
> >>>
> >>> Igor Drobiazko
> >>> http://tapestry5.de
> >>
> >>
> >> ---------------------------------------------------------------------
> >> To unsubscribe, e-mail: dev-unsubscribe@tapestry.apache.org
> >> For additional commands, e-mail: dev-help@tapestry.apache.org
> >>
> >>
> >
> >
> > --
> > Best regards,
> >
> > Igor Drobiazko
> > http://tapestry5.de
>
>
--
Best regards,
Igor Drobiazko
http://tapestry5.de