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