[prev in list] [next in list] [prev in thread] [next in thread] 

List:       tapestry-dev
Subject:    Re: 5.3 Service scope is not honored when using Autobuild (Upload's
From:       Igor Drobiazko <igor.drobiazko () gmail ! com>
Date:       2011-11-30 17:21:24
Message-ID: CAB36eAwu3ksEzLNq429--7OAdGvaHprj8rh8VbyroR8skruFHw () mail ! gmail ! com
[Download RAW message or body]


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


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic