Hi All

Looking at the definition of a ManagedExecutorService, such as below, it
looks like there isn't a way to force the service to have no queue, and
always use more threads, up to the max threads.

If you consider this definition:

    <Resource
        id="MyManagedExecutor"
        type="javax.enterprise.concurrent.ManagedExecutorService">
        Core=5
        Max=150
        KeepAlive=60s
        Queue=0
        WaitAtShutdown=5s
    </Resource>

Per the logic here:
https://github.com/apache/tomee/blob/758e64e7fb69862c94233669531902b65bc1ab80/container/openejb-core/src/main/java/org/apache/openejb/resource/thread/ManagedExecutorServiceImplFactory.java#L77-L81
,

If size is specified (>0), anything executed will be added to the queue,
and the threadpool will only increase from the core size to the max size
when the queue is full.

If size is 0 or negative, the same behaviour applies, but the queue is
unbounded (so the thread pool will not grow at all).

There's no way to specify a zero sized queue (and always grow the thread
pool up to max; and reject work if all threads are busy and the pools is at
the max size).

What are peoples thoughts on a change like this one?
https://github.com/apache/tomee/pull/2011

This does change the behaviour, and I'm not necessarily a fan of "magic"
numbers - an additional boolean setting to control the behaviour might be
an alternative?

What do you think?

Jon

Reply via email to