powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Как остановить поток при выключении сервера приложений?
25 сообщений из 25, страница 1 из 1
Как остановить поток при выключении сервера приложений?
    #34261999
wessen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть поток, он запускается в статическом инициализаторе сессионного бина без состояния. Как бы этот поток остановить (вызвать у него метод interrupt()), когда сервер приложении останавливается? Есть стандартные способы, которые будут работать на любом сервере приложений?
...
Рейтинг: 0 / 0
Как остановить поток при выключении сервера приложений?
    #34262046
mozheyko_d
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообще-то не рекомендуют потоки и сокеты в EJB использовать.
Когда-то надо было сделать ServerSocket так сделали на JMX.
...
Рейтинг: 0 / 0
Как остановить поток при выключении сервера приложений?
    #34262083
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mozheyko_dВообще-то не рекомендуют потоки и сокеты в EJB использовать.
Когда-то надо было сделать ServerSocket так сделали на JMX.

"не рекомендуют" это очень мягко сказано
...
Рейтинг: 0 / 0
Как остановить поток при выключении сервера приложений?
    #34262088
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wessenЕсть поток, он запускается в статическом инициализаторе сессионного бина без состояния. Как бы этот поток остановить (вызвать у него метод interrupt()), когда сервер приложении останавливается? Есть стандартные способы, которые будут работать на любом сервере приложений?

J2EE не специфицирует процесс деплоя а так же жизненый цикл сервера приложений. Поэтому решения для любого сервера нет. Зато есть решение для JVM. Уж если вы докатились до запуска потока из EJB, то Runtime.addShutdownHook это тоже ваш вариант.

Хотя есстесвенно он не будет работать если сервер умеет перезапускатся без остановки JVM
...
Рейтинг: 0 / 0
Как остановить поток при выключении сервера приложений?
    #34262161
wessen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если с потоками в EJB все так плохо, тогда подскажите решение. Собственно реализовать нужно следующее - есть сессионный бин без состояния, его вызывают клиенты, вызывают много и часто и передают ему XML документы, эти XML документы должны сначала попадать во временное хранилище (так надо и все тут). Параллельно с работой бина, должно работать еще что-то и это что-то должно перелапачивать это временное хранилище и при выполнении определенных условий производить выгрузку докуменов в постоянное хранилище. Что посоветуете?
Я думал создать в бине поле(хранилище) - private static final HashMap и запустить поток, который периодически перелапачивал бы хранилище. Или вместо потока использовать ejb timer service?
...
Рейтинг: 0 / 0
Как остановить поток при выключении сервера приложений?
    #34262193
unregestered
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ejbTimeout() ?
...
Рейтинг: 0 / 0
Как остановить поток при выключении сервера приложений?
    #34262203
mozheyko_d
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wessen...Или вместо потока использовать ejb timer service?

Да, самое то.
Можно ещё JMS попробовать, если подойдёт. Подумайте может задача укладывается в несколько очередей.
...
Рейтинг: 0 / 0
Как остановить поток при выключении сервера приложений?
    #34262225
wessen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не совсем понятно, чего хотели сантехники сказать этим предложением - Multithreaded applications are still possible, but control of multithreading is located in the container, not in the enterprise bean.
...
Рейтинг: 0 / 0
Как остановить поток при выключении сервера приложений?
    #34262240
mozheyko_d
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wessenНе совсем понятно, чего хотели сантехники сказать этим предложением - Multithreaded applications are still possible, but control of multithreading is located in the container, not in the enterprise bean.
Вот нашёл в спецификации EJB3
21.1.2 Programming Restrictions
• The enterprise bean must not attempt to manage threads. The enterprise bean must not attempt
to start, stop, suspend, or resume a thread, or to change a thread’s priority or name. The enterprise
bean must not attempt to manage thread groups.
These functions are reserved for the EJB container. Allowing the enterprise bean to manage threads
would decrease the container’s ability to properly manage the runtime environment.
...
Рейтинг: 0 / 0
Как остановить поток при выключении сервера приложений?
    #34262369
wessen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где-то читал, что так же нельзя делать синхронизированными бизнес методы. А как EJB контейнер переносит синхронизированные блоки в бизнес методах? Причем блоки синхронизируются по static final полю.
...
Рейтинг: 0 / 0
Как остановить поток при выключении сервера приложений?
    #34262414
mozheyko_d
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wessenГде-то читал, что так же нельзя делать синхронизированными бизнес методы. А как EJB контейнер переносит синхронизированные блоки в бизнес методах? Причем блоки синхронизируются по static final полю.
Всё там же пишут:
21.1.2 Programming Restrictions
• An enterprise bean must not use read/write static fields. Using read-only static fields is
allowed. Therefore, it is recommended that all static fields in the enterprise bean class be
declared as final.
This rule is required to ensure consistent runtime semantics because while some EJB containers may
use a single JVM to execute all enterprise bean’s instances, others may distribute the instances across
multiple JVMs.
• An enterprise bean must not use thread synchronization primitives to synchronize execution of
multiple instances.
This is for the same reason as above. Synchronization would not work if the EJB container distributed
enterprise bean’s instances across multiple JVMs.

Так что Вы, похоже, всё что можно нарушили :)
...
Рейтинг: 0 / 0
Как остановить поток при выключении сервера приложений?
    #34262441
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mozheyko_dМожно ещё JMS попробовать, если подойдёт.
Как по мне в описаной задаче JMS самое то
...
Рейтинг: 0 / 0
Как остановить поток при выключении сервера приложений?
    #34262477
wessen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На счет синхронизации не все так просто. Вот например - http://www.theserverside.com/discussions/thread.tss?thread_id=25383

Как я понял, синхронизировать можно, только не все подряд и осторожно.

И даже если своими мозгами пораскинуть, без ссылок на спецификации и блоги бывалых программеров - есть у меня сессион бин, в нем используется большое кол-во библиотек, как стандартных, так и сторонних, в итоге, одних импортов на 70 строк. И неужели не одна из этих библиотек не содержит синхронизированных блоков и методов? Конечно содержат, банально, тот же SynchronizedHashMap. И более того, наверника эти библиотеки создают потоки и не один. Так-что запутано все как-то...
...
Рейтинг: 0 / 0
Как остановить поток при выключении сервера приложений?
    #34262494
mozheyko_d
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wessenНа счет синхронизации не все так просто. Вот например - http://www.theserverside.com/discussions/thread.tss?thread_id=25383

Как я понял, синхронизировать можно, только не все подряд и осторожно.

И даже если своими мозгами пораскинуть, без ссылок на спецификации и блоги бывалых программеров - есть у меня сессион бин, в нем используется большое кол-во библиотек, как стандартных, так и сторонних, в итоге, одних импортов на 70 строк. И неужели не одна из этих библиотек не содержит синхронизированных блоков и методов? Конечно содержат, банально, тот же SynchronizedHashMap. И более того, наверника эти библиотеки создают потоки и не один. Так-что запутано все как-то...

Ну и попробуйте сделать с JMS.
Будет всё правильно и красиво.
...
Рейтинг: 0 / 0
Как остановить поток при выключении сервера приложений?
    #34262524
wessen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mozheyko_d
Ну и попробуйте сделать с JMS.
Будет всё правильно и красиво.

Если использовать JMS, что будет из себя представлять временное хранилище?
...
Рейтинг: 0 / 0
Как остановить поток при выключении сервера приложений?
    #34262562
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wessenЕсли использовать JMS, что будет из себя представлять временное хранилище?

Очередь сообщений.
...
Рейтинг: 0 / 0
Как остановить поток при выключении сервера приложений?
    #34262595
wessen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz wessenЕсли использовать JMS, что будет из себя представлять временное хранилище?

Очередь сообщений.

С очередями я работал через Message Driven Bean и на сколько я знаю, как только в очередь попадает сообщение, сразу же создается экземпляр MDB и внем я получаю сообщение. Так а хранить сообщения где тогда? Или очередь можно настроить так, чтобы сообщения в ней накапливались, а потом их можно получить пачкой получить?
...
Рейтинг: 0 / 0
Как остановить поток при выключении сервера приложений?
    #34262816
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На счет получить пачкой не знаю. Но асинхронная очередь - не проблема.
...
Рейтинг: 0 / 0
Как остановить поток при выключении сервера приложений?
    #34263477
mozheyko_d
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wessen Blazkowicz wessenЕсли использовать JMS, что будет из себя представлять временное хранилище?

Очередь сообщений.

С очередями я работал через Message Driven Bean и на сколько я знаю, как только в очередь попадает сообщение, сразу же создается экземпляр MDB и внем я получаю сообщение. Так а хранить сообщения где тогда? Или очередь можно настроить так, чтобы сообщения в ней накапливались, а потом их можно получить пачкой получить?

Хранятся сообщения в очереди, причём при выключении сервера записываются в постоянное хранилище и потом не пропадают.
Забирать их оттуда необязательно с помощью MDB, можно написать внешнюю программу( или несколько). Правда забираются они оттуда по одному, но есть способы просмотра очереди и анализа содержимого без изъятия сообщений из неё.
...
Рейтинг: 0 / 0
Как остановить поток при выключении сервера приложений?
    #34263579
wessen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не совсем мне нравиться JMS для решения моей задачи. Потому как, мне нужно именно хранилище, со всеми вытекающими. А именно: блокировка всего хранилища во время добавления в него документа, поиск в нем документов по определенным критериям, непоследовательный доступ к документам. Все это наверное можно сделать при помощи JMS, но ведь изврат то какой получится.
...
Рейтинг: 0 / 0
Как остановить поток при выключении сервера приложений?
    #34263624
expp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
может сделать domain model и персистить её хибером. у него два уровня кэша. по-моему всё сделает
...
Рейтинг: 0 / 0
Как остановить поток при выключении сервера приложений?
    #34264049
Фотография Timm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wessenНе совсем мне нравиться JMS для решения моей задачи. Потому как, мне нужно именно хранилище, со всеми вытекающими. А именно: блокировка всего хранилища во время добавления в него документа , поиск в нем документов по определенным критериям, непоследовательный доступ к документам. Все это наверное можно сделать при помощи JMS, но ведь изврат то какой получится.
зачем??
чем БД не подходит? вместо изобретения велосипеда.
Можно и хибер использовать, если хочеца.
...
Рейтинг: 0 / 0
Как остановить поток при выключении сервера приложений?
    #34264228
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wessenНе совсем мне нравиться JMS для решения моей задачи. Потому как, мне нужно именно хранилище, со всеми вытекающими. А именно: блокировка всего хранилища во время добавления в него документа, поиск в нем документов по определенным критериям, непоследовательный доступ к документам. Все это наверное можно сделать при помощи JMS, но ведь изврат то какой получится.

Это надо ковырять конкретные реализации. Например, JBoss MQ.
...
Рейтинг: 0 / 0
Как остановить поток при выключении сервера приложений?
    #34269754
unregestered
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wessenЕсли с потоками в EJB все так плохо, тогда подскажите решение. Собственно реализовать нужно следующее - есть сессионный бин без состояния, его вызывают клиенты, вызывают много и часто и передают ему XML документы, эти XML документы должны сначала попадать во временное хранилище (так надо и все тут). Параллельно с работой бина, должно работать еще что-то и это что-то должно перелапачивать это временное хранилище и при выполнении определенных условий производить выгрузку докуменов в постоянное хранилище. Что посоветуете?
Я думал создать в бине поле(хранилище) - private static final HashMap и запустить поток, который периодически перелапачивал бы хранилище. Или вместо потока использовать ejb timer service?

Так почему в ejbTimeout нельзя засунуть периодические вещи? Он же как раз для этого предназначен ...
...
Рейтинг: 0 / 0
Как остановить поток при выключении сервера приложений?
    #34271598
wessen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
unregestered

Так почему в ejbTimeout нельзя засунуть периодические вещи? Он же как раз для этого предназначен ...

я так и сделал
...
Рейтинг: 0 / 0
25 сообщений из 25, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Как остановить поток при выключении сервера приложений?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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