If you where using threads in your application
Then i would do it this way:

Your WebApplication class has a method:
getExecutor() that returns a ThreadPoolExecutor

That threadpoolexecutor (that you extend) overrides 2 methods

protected void beforeExecute(Thread t, Runnable r) { }

that sets the thread locals (so the application instance that has the
executor) and

   protected void afterExecute(Runnable r, Throwable t) { }

to release all thread locals.

this way you use a pool (way better to control your web application) and all
the resources you need are set just before and release right after.

johanm



On Wed, May 19, 2010 at 23:41, James Carman <ja...@carmanconsulting.com>wrote:

> Will the inheritance of the application really work correctly?  For pooled
> threads that are created at application startup, the threadlocal will be
> null, because the parent thread is the thread that starts the container.
> For threads that are created within the context of the request thread, they
> will get the current application object, which would be fine if that thread
> executes and finishes.  But, for threads that are going to be reused
> (executor threads in a pool), they will see the original application object
> because the value is set at thread creation time.  If you have multiple
> wicket filters in the same context, that could be incorrect, meaning a
> request thread for a different application submitted a task to be executed.
>
> On May 19, 2010 4:13 PM, "Adriano dos Santos Fernandes" <
> adrian...@gmail.com>
> wrote:
>
> On 19/05/2010 17:03, Jeremy Thomerson wrote:
> >>
> >>
> >> To clarify this, I use Application.set and App...
> Well, forgetting to unset it would not leak any more than have it
> implicitly
> set like it's going to be. And I do think forgetting this is developer
> fault.
>
> What you all do not want to understand is what I said about Java library
> spawning its own threads, and that is not documented, as its for cleanup in
> the case I shown.
>
>
> Adriano
>

Reply via email to