Vadim Gritsenko wrote:

<snip/>

and (2) initialization Thread is not the same as thread making request. It could be from different ThreadGroup, even.

Is that a problem?

Actual problem is that RunnableManager's threads should not be children of any request processing thread, and currently this is the case because RunnableManager is initialized eagerly.

If RunnableManager's thread pools are created lazily (==children of single request processing thread), following can happen:

  * All threads in pools inherit locals of the request thread,
    which is wrong.

Using inheritable threadlocals is wrong anyway with thread pools

  * All threads will be created in the ThreadGroup of the request
    processing thread, will attempt to modify said group, and
    can fail with SecurityException (you can create thread in a
    thread group only if you have modifyThreadGroup priviledge).

I don't see the point. Do you mean that the thread that initializes a servlet is not the same and has different privileges than the one processing the request?

  * All threads will be limited to the priorities set for the
    request processing thread's group priorities.

Ok.

  * All threads will inherit isDaemon, priority, contextClassLoader
    attributes of the execution thread. Both setPriority and setDaemon
    require permissions configured.

Ok.

In short: request processing thread pool can be configured with different priorities, different permissions than initialization thread. Loading RunnableManager with lazy mode will hit these restrictions.

Hence my request to load RunnableManager eagerly to avoid any possible complications.

Ok, thanks for the explanations. RunnableManager is Startable again.

Sylvain

--
Sylvain Wallez                        Anyware Technologies
http://people.apache.org/~sylvain     http://www.anyware-tech.com
Apache Software Foundation Member     Research & Technology Director

Reply via email to