Разница между ManagedExecutorService и ManagedThreadFactory в Java EE - PullRequest
0 голосов
/ 06 июня 2019

Наше текущее устаревшее веб-приложение создает в нем потоки, которые не управляются контейнерами сервера приложений. Я должен изменить его со стандартами JavaEE для многопоточности.
Мое веб-приложение отлично работает на Tomcat, но не работает на Websphere.
Ошибка в Websphere:

... ... Caused by: javax.naming.ConfigurationException: A JNDI operation on a "java:" name cannot be completed because the server runtime is not able to associate the operation's thread with any J2EE application component.  This condition can occur when the JNDI client using the "java:" name is not executed on the thread of a server application request.  Make sure that a J2EE application does not execute JNDI operations on "java:" names within static code blocks or in threads created by that J2EE application.  Such code does not necessarily run on the thread of a server application request and therefore is not supported by JNDI operations on "java:" names.
    at com.ibm.ws.naming.java.javaURLContextImpl.throwExceptionIfDefaultJavaNS(javaURLContextImpl.java:534) ~[com.ibm.ws.runtime.jar:?]
    at com.ibm.ws.naming.java.javaURLContextImpl.throwConfigurationExceptionWithDefaultJavaNS(javaURLContextImpl.java:564) ~[com.ibm.ws.runtime.jar:?]
    at com.ibm.ws.naming.java.javaURLContextImpl.lookupExt(javaURLContextImpl.java:485) ~[com.ibm.ws.runtime.jar:?]
    at com.ibm.ws.naming.java.javaURLContextRoot.lookupExt(javaURLContextRoot.java:485) ~[com.ibm.ws.runtime.jar:?]

Для решения этой проблемы я имею в виду Утилиты параллелизма в Java EE . Я нашел похожее описание и пример для ManagedExecutorService и ManagedThreadFactory .

  • ManagedExecutorService: Служба управляемого исполнителя используется приложениями для асинхронного выполнения отправленных задач. Задачи выполняется в потоках, которые запускаются и управляются контейнером. контекст контейнера распространяется на поток, выполняющий задача.
  • ManagedThreadFactory: фабрика управляемых потоков используется приложениями для создания управляемых потоков. Темы запускаются и управляется контейнером. Контекст контейнера распространяется потоку, выполняющему задачу. Этот объект также может быть использован для предоставить настраиваемые фабрики для конкретных случаев использования (с настраиваемыми потоками) и, например, установить специальные / собственные свойства для этих объекты.

Какой из них предпочтительнее в каких условиях и почему?

1 Ответ

0 голосов
/ 11 июня 2019

Я решил проблему с помощью ManagedExecutorService.

Платформа ExecutorService действительно имеет больше способов обработки потоков, в то время как ManagedThreadFactory может вызывать только метод newThread ().

Проблема Websphere может быть решена с помощью ManagedExecutorService или ManagedThreadFactory. Обе работы. Но для дальнейшей обработки потоков ManagedExecutorService оказывается намного лучше.

Теперь это решение приводит к сбою того же веб-приложения на Tomcat. Исключение именования JNDI. Согласно моим исследованиям и разработкам, параллелизм на основе контейнеров поддерживается на сервере TomEE, а не в Tomcat, поэтому мы должны использовать механизм маршрутизации для переключения между кодами в соответствии с базовым сервером приложений.

...