[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