Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Как остановить поток при выключении сервера приложений? / 25 сообщений из 25, страница 1 из 1
17.01.2007, 15:06:45
    #34261999
wessen
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как остановить поток при выключении сервера приложений?
Есть поток, он запускается в статическом инициализаторе сессионного бина без состояния. Как бы этот поток остановить (вызвать у него метод interrupt()), когда сервер приложении останавливается? Есть стандартные способы, которые будут работать на любом сервере приложений?
...
Рейтинг: 0 / 0
17.01.2007, 15:17:24
    #34262046
mozheyko_d
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как остановить поток при выключении сервера приложений?
Вообще-то не рекомендуют потоки и сокеты в EJB использовать.
Когда-то надо было сделать ServerSocket так сделали на JMX.
...
Рейтинг: 0 / 0
17.01.2007, 15:29:46
    #34262083
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как остановить поток при выключении сервера приложений?
mozheyko_dВообще-то не рекомендуют потоки и сокеты в EJB использовать.
Когда-то надо было сделать ServerSocket так сделали на JMX.

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

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

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

Да, самое то.
Можно ещё JMS попробовать, если подойдёт. Подумайте может задача укладывается в несколько очередей.
...
Рейтинг: 0 / 0
17.01.2007, 16:14:12
    #34262225
wessen
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как остановить поток при выключении сервера приложений?
Не совсем понятно, чего хотели сантехники сказать этим предложением - Multithreaded applications are still possible, but control of multithreading is located in the container, not in the enterprise bean.
...
Рейтинг: 0 / 0
17.01.2007, 16:17:56
    #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
17.01.2007, 16:47:54
    #34262369
wessen
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как остановить поток при выключении сервера приложений?
Где-то читал, что так же нельзя делать синхронизированными бизнес методы. А как EJB контейнер переносит синхронизированные блоки в бизнес методах? Причем блоки синхронизируются по static final полю.
...
Рейтинг: 0 / 0
17.01.2007, 17:00:14
    #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
17.01.2007, 17:06:44
    #34262441
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как остановить поток при выключении сервера приложений?
mozheyko_dМожно ещё JMS попробовать, если подойдёт.
Как по мне в описаной задаче JMS самое то
...
Рейтинг: 0 / 0
17.01.2007, 17:15:40
    #34262477
wessen
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как остановить поток при выключении сервера приложений?
На счет синхронизации не все так просто. Вот например - http://www.theserverside.com/discussions/thread.tss?thread_id=25383

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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