powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Java EE DI concurrent processing thru ThreadPoolExecutor не работает
17 сообщений из 17, страница 1 из 1
Java EE DI concurrent processing thru ThreadPoolExecutor не работает
    #39266116
aby_2503
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть Injected Bean.
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
@Dependent
public class SubscribeEndpoint  {

    protected final Logger logger = LoggerFactory.getLogger(getClass());
    private ThreadPoolExecutor executorService;
    private ManagedThreadFactory threadFactory;

    public SubscribeEndpoint() {
        try {
            threadFactory = ServiceLocator.getInstance().lookupRemote("concurrent/ThreadFactory");
            executorService = new ThreadPoolExecutor(5, 10, 5, TimeUnit.SECONDS, new ArrayBlockingQueue<Runnable>(10), threadFactory);
        } catch (NamingException e) {
            logger.error("Exception: ", e);
        }
    }


    public void onMessage(Message message) {
        try {           
            SubscribeHandler handler = getSubscribeHandler();
            executorService.submit(() -> handler.runMessageProcessing(message));
        } catch (Throwable e) {
            logger.error("Exception: ", e);
        }
    }

}



Вот кусок кода
Код: java
1.
executorService.submit(() -> handler.runMessageProcessing(message));

уверенно не хочет раниться. Фактически таск даже не запускатеся. Пробовал просто через MangedThreadFactory и ManagedExecutor - та же фигня. В чем может быть проблема?
...
Рейтинг: 0 / 0
Java EE DI concurrent processing thru ThreadPoolExecutor не работает
    #39266125
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aby_2503,

getSubscribeHandler() возвращает null, в результате чего внутри лямбды выкидывается NPE, а все эти Executor-ы имеют замечательное свойство проглатывать все исключения молча.
Нужно либо все свои таски в try...catch оборачивать. Либо написать хитрую обертку над Executor-ом, которая умеет это сама делать, чтобы логировать.

ThreadPoolExecutorв в JEE использовать нельзя. Верните ManagedExecutor .
...
Рейтинг: 0 / 0
Java EE DI concurrent processing thru ThreadPoolExecutor не работает
    #39266134
aby_2503
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowicz, прошу прощения за упрощение.
Код: java
1.
getSubscribeHandler();

возврашает EJB bean. это я дабы сократить ненужный код - удалил метод. проблему с exception - это первое что я проверил
...
Рейтинг: 0 / 0
Java EE DI concurrent processing thru ThreadPoolExecutor не работает
    #39266137
aby_2503
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowicz,
что касается ThreadPoolExecutor. Использовать не рекомендуется стандартные реализации из javaSE типа Executors.blablabla.
вот ссылка из спеки на ThreadPoolExecutor
https://docs.oracle.com/javaee/7/api/javax/enterprise/concurrent/ManagedThreadFactory.html
...
Рейтинг: 0 / 0
Java EE DI concurrent processing thru ThreadPoolExecutor не работает
    #39266139
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aby_2503проблему с exception - это первое что я проверил
и где в коде try {} catch (Throwable) тогда?
...
Рейтинг: 0 / 0
Java EE DI concurrent processing thru ThreadPoolExecutor не работает
    #39266141
aby_2503
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowicz, каюсь. ушел в процессе перебора всевозможных вариантов.
...
Рейтинг: 0 / 0
Java EE DI concurrent processing thru ThreadPoolExecutor не работает
    #39266145
aby_2503
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowicz, Пробовал через
Код: java
1.
 Future.get()

Поток попросту виснет.
...
Рейтинг: 0 / 0
Java EE DI concurrent processing thru ThreadPoolExecutor не работает
    #39266148
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aby_2503Blazkowicz,
что касается ThreadPoolExecutor. Использовать не рекомендуется стандартные реализации из javaSE типа Executors.blablabla.
вот ссылка из спеки на ThreadPoolExecutor
https://docs.oracle.com/javaee/7/api/javax/enterprise/concurrent/ManagedThreadFactory.html

Вы меня как-то через слово читаете что ли? ThreadPoolExecutor это и есть "стандартные реализации из javaSE", а не только ваше "типа Executors.blablabla".

Я вам написал

BlazkowiczВерните ManagedExecutor
А вы мне ссылку на него.

Если у вас есть желание тупо поспорить, то так и напишите. Тогда не будем решать проблему, а обсудим ваше

aby_2503не рекомендуется
Так как я более чем уверен что в JEE спеке формулировка более строгая, чем обычное "не рекомендуется".
...
Рейтинг: 0 / 0
Java EE DI concurrent processing thru ThreadPoolExecutor не работает
    #39266176
aby_2503
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowicz,я смотрю что проблема с чтением через слово - у нас общая.
Еще раз - ManagedExecutor пробовал - не помогает. Если вам будет легче на душе вот обработка Throwable
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
@Dependent
public class SubscribeEndpoint  {

    protected final Logger logger = LoggerFactory.getLogger(getClass());
    private ManagedExecutorService executorService;

    public SubscribeEndpoint() {
        try {
            executorService = ServiceLocator.getInstance().lookupRemote("concurrent/NatsMES");
        } catch (NamingException e) {
            logger.error("Exception: ", e);
        }
    }


    public void onMessage(Message message) {
            SubscribeHandler handler = getSubscribeHandler();
            executorService.submit(() -> {
                try {
                    handler.runMessageProcessing(message);
                } catch (Throwable e) {
                    logger.error("Exception: ", e);
                }
            });
    }

protected String getHandlerJNDIName() {
        return ConfigurationHandler.JNDI_GLOBAL_NAME;
    }

protected <T extends SubscribeHandler> T getSubscribeHandler() {
         T handler = null;
        try {
            handler = ServiceLocator.getInstance().lookupRemote(getHandlerJNDIName());
        } catch (NamingException e) {
            logger.error("Exception: ", e);
        }
        
        return handler;
    }

}


Не работает.
...
Рейтинг: 0 / 0
Java EE DI concurrent processing thru ThreadPoolExecutor не работает
    #39266183
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aby_2503Blazkowicz,я смотрю что проблема с чтением через слово - у нас общая.
Вы приводите заведомо дважды ошибочный код, и потом на каждое замечание пишете что у же пробовали.

aby_2503Еще раз - ManagedExecutor пробовал - не помогает.
Я вам написал "верните", а не начал рассказывать про то что есть такой класс. Если он не помогает, это ещё не значит что нужно добавлять новых ошибок в код.
...
Рейтинг: 0 / 0
Java EE DI concurrent processing thru ThreadPoolExecutor не работает
    #39266185
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aby_2503Blazkowicz, Пробовал через
Код: java
1.
 Future.get()

Поток попросту виснет.
Сделайте дамп потоков (или остановите все потоки), если get() блокируется, значит задача ещё выполняется. Возможно она тоже на чем-то заблокировалась.
...
Рейтинг: 0 / 0
Java EE DI concurrent processing thru ThreadPoolExecutor не работает
    #39266186
aby_2503
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowicz,
По-моему мы отдалились от темы. Я не собираюсь с Вами сейчас спорить что Вы имели в виду, а что нет. По поводу обработки ошибок - признаю, просто не указал в вопросе, но обработка была.
...
Рейтинг: 0 / 0
Java EE DI concurrent processing thru ThreadPoolExecutor не работает
    #39266187
aby_2503
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowicz,

Спасибо, проверю
...
Рейтинг: 0 / 0
Java EE DI concurrent processing thru ThreadPoolExecutor не работает
    #39266258
aby_2503
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowiczaby_2503Blazkowicz, Пробовал через
Код: java
1.
 Future.get()

Поток попросту виснет.
Сделайте дамп потоков (или остановите все потоки), если get() блокируется, значит задача ещё выполняется. Возможно она тоже на чем-то заблокировалась.

В целях теста сделал проще - заменил вызов бина на простой вывод лога. Поток также виснет.
...
Рейтинг: 0 / 0
Java EE DI concurrent processing thru ThreadPoolExecutor не работает
    #39266351
Atum1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
может порефакторить немного , например добавить

https://www.javacodegeeks.com/2013/05/java-8-completablefuture-in-action.html
как вариант ... код станет чище и понятнее ... я вот с третьего раза не понял что у вас происходит ...

Хотя некий общеизвестный паттерн просматривается .
...
Рейтинг: 0 / 0
Java EE DI concurrent processing thru ThreadPoolExecutor не работает
    #39266356
Atum1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
+ хочу тест увидеть Junit с простыми комментариями что вы делаете
...
Рейтинг: 0 / 0
Java EE DI concurrent processing thru ThreadPoolExecutor не работает
    #39266361
Atum1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
getSubscribeHandler - а это просто мокнуть .
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Java EE DI concurrent processing thru ThreadPoolExecutor не работает
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]