|
|
|
Как остановить поток при выключении сервера приложений?
|
|||
|---|---|---|---|
|
#18+
Есть поток, он запускается в статическом инициализаторе сессионного бина без состояния. Как бы этот поток остановить (вызвать у него метод interrupt()), когда сервер приложении останавливается? Есть стандартные способы, которые будут работать на любом сервере приложений? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2007, 15:06:45 |
|
||
|
Как остановить поток при выключении сервера приложений?
|
|||
|---|---|---|---|
|
#18+
Вообще-то не рекомендуют потоки и сокеты в EJB использовать. Когда-то надо было сделать ServerSocket так сделали на JMX. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2007, 15:17:24 |
|
||
|
Как остановить поток при выключении сервера приложений?
|
|||
|---|---|---|---|
|
#18+
mozheyko_dВообще-то не рекомендуют потоки и сокеты в EJB использовать. Когда-то надо было сделать ServerSocket так сделали на JMX. "не рекомендуют" это очень мягко сказано ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2007, 15:29:46 |
|
||
|
Как остановить поток при выключении сервера приложений?
|
|||
|---|---|---|---|
|
#18+
wessenЕсть поток, он запускается в статическом инициализаторе сессионного бина без состояния. Как бы этот поток остановить (вызвать у него метод interrupt()), когда сервер приложении останавливается? Есть стандартные способы, которые будут работать на любом сервере приложений? J2EE не специфицирует процесс деплоя а так же жизненый цикл сервера приложений. Поэтому решения для любого сервера нет. Зато есть решение для JVM. Уж если вы докатились до запуска потока из EJB, то Runtime.addShutdownHook это тоже ваш вариант. Хотя есстесвенно он не будет работать если сервер умеет перезапускатся без остановки JVM ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2007, 15:32:36 |
|
||
|
Как остановить поток при выключении сервера приложений?
|
|||
|---|---|---|---|
|
#18+
Если с потоками в EJB все так плохо, тогда подскажите решение. Собственно реализовать нужно следующее - есть сессионный бин без состояния, его вызывают клиенты, вызывают много и часто и передают ему XML документы, эти XML документы должны сначала попадать во временное хранилище (так надо и все тут). Параллельно с работой бина, должно работать еще что-то и это что-то должно перелапачивать это временное хранилище и при выполнении определенных условий производить выгрузку докуменов в постоянное хранилище. Что посоветуете? Я думал создать в бине поле(хранилище) - private static final HashMap и запустить поток, который периодически перелапачивал бы хранилище. Или вместо потока использовать ejb timer service? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2007, 15:54:15 |
|
||
|
Как остановить поток при выключении сервера приложений?
|
|||
|---|---|---|---|
|
#18+
ejbTimeout() ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2007, 16:03:51 |
|
||
|
Как остановить поток при выключении сервера приложений?
|
|||
|---|---|---|---|
|
#18+
wessen...Или вместо потока использовать ejb timer service? Да, самое то. Можно ещё JMS попробовать, если подойдёт. Подумайте может задача укладывается в несколько очередей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2007, 16:07:59 |
|
||
|
Как остановить поток при выключении сервера приложений?
|
|||
|---|---|---|---|
|
#18+
Не совсем понятно, чего хотели сантехники сказать этим предложением - Multithreaded applications are still possible, but control of multithreading is located in the container, not in the enterprise bean. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2007, 16:14:12 |
|
||
|
Как остановить поток при выключении сервера приложений?
|
|||
|---|---|---|---|
|
#18+
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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2007, 16:17:56 |
|
||
|
Как остановить поток при выключении сервера приложений?
|
|||
|---|---|---|---|
|
#18+
Где-то читал, что так же нельзя делать синхронизированными бизнес методы. А как EJB контейнер переносит синхронизированные блоки в бизнес методах? Причем блоки синхронизируются по static final полю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2007, 16:47:54 |
|
||
|
Как остановить поток при выключении сервера приложений?
|
|||
|---|---|---|---|
|
#18+
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. Так что Вы, похоже, всё что можно нарушили :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2007, 17:00:14 |
|
||
|
Как остановить поток при выключении сервера приложений?
|
|||
|---|---|---|---|
|
#18+
mozheyko_dМожно ещё JMS попробовать, если подойдёт. Как по мне в описаной задаче JMS самое то ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2007, 17:06:44 |
|
||
|
Как остановить поток при выключении сервера приложений?
|
|||
|---|---|---|---|
|
#18+
На счет синхронизации не все так просто. Вот например - http://www.theserverside.com/discussions/thread.tss?thread_id=25383 Как я понял, синхронизировать можно, только не все подряд и осторожно. И даже если своими мозгами пораскинуть, без ссылок на спецификации и блоги бывалых программеров - есть у меня сессион бин, в нем используется большое кол-во библиотек, как стандартных, так и сторонних, в итоге, одних импортов на 70 строк. И неужели не одна из этих библиотек не содержит синхронизированных блоков и методов? Конечно содержат, банально, тот же SynchronizedHashMap. И более того, наверника эти библиотеки создают потоки и не один. Так-что запутано все как-то... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2007, 17:15:40 |
|
||
|
Как остановить поток при выключении сервера приложений?
|
|||
|---|---|---|---|
|
#18+
wessenНа счет синхронизации не все так просто. Вот например - http://www.theserverside.com/discussions/thread.tss?thread_id=25383 Как я понял, синхронизировать можно, только не все подряд и осторожно. И даже если своими мозгами пораскинуть, без ссылок на спецификации и блоги бывалых программеров - есть у меня сессион бин, в нем используется большое кол-во библиотек, как стандартных, так и сторонних, в итоге, одних импортов на 70 строк. И неужели не одна из этих библиотек не содержит синхронизированных блоков и методов? Конечно содержат, банально, тот же SynchronizedHashMap. И более того, наверника эти библиотеки создают потоки и не один. Так-что запутано все как-то... Ну и попробуйте сделать с JMS. Будет всё правильно и красиво. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2007, 17:20:10 |
|
||
|
Как остановить поток при выключении сервера приложений?
|
|||
|---|---|---|---|
|
#18+
mozheyko_d Ну и попробуйте сделать с JMS. Будет всё правильно и красиво. Если использовать JMS, что будет из себя представлять временное хранилище? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2007, 17:27:52 |
|
||
|
Как остановить поток при выключении сервера приложений?
|
|||
|---|---|---|---|
|
#18+
wessenЕсли использовать JMS, что будет из себя представлять временное хранилище? Очередь сообщений. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2007, 17:36:22 |
|
||
|
Как остановить поток при выключении сервера приложений?
|
|||
|---|---|---|---|
|
#18+
Blazkowicz wessenЕсли использовать JMS, что будет из себя представлять временное хранилище? Очередь сообщений. С очередями я работал через Message Driven Bean и на сколько я знаю, как только в очередь попадает сообщение, сразу же создается экземпляр MDB и внем я получаю сообщение. Так а хранить сообщения где тогда? Или очередь можно настроить так, чтобы сообщения в ней накапливались, а потом их можно получить пачкой получить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2007, 17:42:10 |
|
||
|
Как остановить поток при выключении сервера приложений?
|
|||
|---|---|---|---|
|
#18+
На счет получить пачкой не знаю. Но асинхронная очередь - не проблема. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2007, 18:42:41 |
|
||
|
Как остановить поток при выключении сервера приложений?
|
|||
|---|---|---|---|
|
#18+
wessen Blazkowicz wessenЕсли использовать JMS, что будет из себя представлять временное хранилище? Очередь сообщений. С очередями я работал через Message Driven Bean и на сколько я знаю, как только в очередь попадает сообщение, сразу же создается экземпляр MDB и внем я получаю сообщение. Так а хранить сообщения где тогда? Или очередь можно настроить так, чтобы сообщения в ней накапливались, а потом их можно получить пачкой получить? Хранятся сообщения в очереди, причём при выключении сервера записываются в постоянное хранилище и потом не пропадают. Забирать их оттуда необязательно с помощью MDB, можно написать внешнюю программу( или несколько). Правда забираются они оттуда по одному, но есть способы просмотра очереди и анализа содержимого без изъятия сообщений из неё. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2007, 09:03:40 |
|
||
|
Как остановить поток при выключении сервера приложений?
|
|||
|---|---|---|---|
|
#18+
Не совсем мне нравиться JMS для решения моей задачи. Потому как, мне нужно именно хранилище, со всеми вытекающими. А именно: блокировка всего хранилища во время добавления в него документа, поиск в нем документов по определенным критериям, непоследовательный доступ к документам. Все это наверное можно сделать при помощи JMS, но ведь изврат то какой получится. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2007, 09:46:11 |
|
||
|
Как остановить поток при выключении сервера приложений?
|
|||
|---|---|---|---|
|
#18+
может сделать domain model и персистить её хибером. у него два уровня кэша. по-моему всё сделает ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2007, 09:55:04 |
|
||
|
Как остановить поток при выключении сервера приложений?
|
|||
|---|---|---|---|
|
#18+
wessenНе совсем мне нравиться JMS для решения моей задачи. Потому как, мне нужно именно хранилище, со всеми вытекающими. А именно: блокировка всего хранилища во время добавления в него документа , поиск в нем документов по определенным критериям, непоследовательный доступ к документам. Все это наверное можно сделать при помощи JMS, но ведь изврат то какой получится. зачем?? чем БД не подходит? вместо изобретения велосипеда. Можно и хибер использовать, если хочеца. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2007, 11:25:45 |
|
||
|
Как остановить поток при выключении сервера приложений?
|
|||
|---|---|---|---|
|
#18+
wessenНе совсем мне нравиться JMS для решения моей задачи. Потому как, мне нужно именно хранилище, со всеми вытекающими. А именно: блокировка всего хранилища во время добавления в него документа, поиск в нем документов по определенным критериям, непоследовательный доступ к документам. Все это наверное можно сделать при помощи JMS, но ведь изврат то какой получится. Это надо ковырять конкретные реализации. Например, JBoss MQ. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2007, 11:56:48 |
|
||
|
Как остановить поток при выключении сервера приложений?
|
|||
|---|---|---|---|
|
#18+
wessenЕсли с потоками в EJB все так плохо, тогда подскажите решение. Собственно реализовать нужно следующее - есть сессионный бин без состояния, его вызывают клиенты, вызывают много и часто и передают ему XML документы, эти XML документы должны сначала попадать во временное хранилище (так надо и все тут). Параллельно с работой бина, должно работать еще что-то и это что-то должно перелапачивать это временное хранилище и при выполнении определенных условий производить выгрузку докуменов в постоянное хранилище. Что посоветуете? Я думал создать в бине поле(хранилище) - private static final HashMap и запустить поток, который периодически перелапачивал бы хранилище. Или вместо потока использовать ejb timer service? Так почему в ejbTimeout нельзя засунуть периодические вещи? Он же как раз для этого предназначен ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2007, 13:09:26 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=34262562&tid=2146881]: |
0ms |
get settings: |
17ms |
get forum list: |
20ms |
check forum access: |
6ms |
check topic access: |
6ms |
track hit: |
47ms |
get topic data: |
16ms |
get forum data: |
4ms |
get page messages: |
89ms |
get tp. blocked users: |
2ms |
| others: | 282ms |
| total: | 489ms |

| 0 / 0 |
