[
https://issues.apache.org/jira/browse/TOMEE-2044?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=18121482#comment-18121482
]
Richard Zowalla commented on TOMEE-2044:
----------------------------------------
You're right, thanks for reopening. The 2017 change only covered services that
are Unwrappable, and EjbServer passes itself to KeepAliveServer, so
getQueue\(\) still returned null.
KeepAliveServer now falls back to looking up the ServicePool in
ServicePool.Registry, matching the pool that wraps this exact service instance,
so ejbd, ejbds and httpejbd each get their own queue. There is a test that
fails without the fix.* main \(11.0.0\):
[https://github.com/apache/tomee/pull/3012|https://github.com/apache/tomee/pull/3012]
* tomee\-10.x \(10.3.0\):
[https://github.com/apache/tomee/pull/3013|https://github.com/apache/tomee/pull/3013]
> threadPool-queue (in ServicePool) from ejbd-Service is never processed
> -----------------------------------------------------------------------
>
> Key: TOMEE-2044
> URL: https://issues.apache.org/jira/browse/TOMEE-2044
> Project: TomEE
> Issue Type: Bug
> Components: TomEE Core Server
> Affects Versions: 1.7.4, 1.7.5, 1.7.6, 7.0.9, 7.0.10, 7.1.5, 9.0.0.RC1,
> 8.0.13, 8.0.14, 8.0.15, 10.0.0-M1, 9.0.0, 9.1.0
> Environment: FreeBSD 10.3-STABLE amd64
> openjdk8-8.131.11
> Reporter: Lars Herschke
> Assignee: Richard Zowalla
> Priority: Major
> Fix For: 7.0.4, 11.0.0, 10.3.0
>
> Time Spent: 20m
> Remaining Estimate: 0h
>
> If you have many requests to your ejbd-service the queue from the threadPool
> in ServicePool.java is filled. This queue is never processed depending on
> your server config. If you have only ejbd-service enabled and the services
> admin, ejbds and httpejbd are disabled all is fine. If you have two or more
> of these services enabled the issue could occur. The reason is the following.
> KeepAliveServer.java has the following line to get the queue.
> final ServicePool incoming =
> SystemInstance.get().getComponent(ServicePool.class);
> SystemInstance.java hold components in a HahMap with the class type as key.
> On server-startup the above named services are initalized in
> ServiceManager.manage(...). This method instances new ServicePool for this
> services. Each ServicePool-instance calls in his constructor
> SystemInstance.get().setComponent(ServicePool.class, this);.
> Every other call of setComponent replace the old entry in the components
> HashMap. So KeepAliveServer gets always the queue of the last initalized
> service.
> Workaround:
> Use only one of the four above named services
> or
> set threadsCore for your services at least as high, that the queue is never
> used.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)