|
|
|
Можно ли через MessageDrivenBean выполнять какие-то длительные операции?
|
|||
|---|---|---|---|
|
#18+
Хотелось бы как-то прояснить этот момент. Допустим, у нас есть некая потребность сформировать какой-то отчёт в Exel. У нас есть какая-то очень длительная выборка из СУБД и мы что-то в отчёт вставляем. Формируем его JasperReport'ом. Инициатором начала формирования отчёта является Stand Alone Java Client с GUI Swing интерфейсом. Если использовать просто Remote SessionBean, то если отчёт формировался бы достаточно долго, то клиент просто отвалился бы по TimeOut'у. Это всё равно кабы я пришёл за колбасой в магазин и сказал продавщице: "Хочу колбасы!" А она: "Несу!" И остался бы ждать. Прошло 30 мин (например), я по TimeOut развернулся у ушёл и никогда бы больше не пришёл. Пришла бы продавщица через 2 часа и вызвала бы исключение. А вот в случае с MessageDrivenBean: Пришёл бы я в магазин за колбасой и крикнул бы: "Хочу колбасы!" И ушёл бы не дожидаясь бы ответа от продавщицы. А вот вопрос: Может ли продавщица меня как-то уведомить, например, послать мне Клиенту сообщение о том, что колбаса готова, а я бы увидев сообщение пошёл бы в магазин за колбасой. Или я должен буду как демон бегать в магазин каждые 5 минут и спрашивать у какого-нибудь Sigleton'а (так к примеру): "Готова ли колбаса?" До тех пор пока он не скажет: "Готова!" И самое главное никто ли не отвалится в этой схеме? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2012, 12:35:39 |
|
||
|
Можно ли через MessageDrivenBean выполнять какие-то длительные операции?
|
|||
|---|---|---|---|
|
#18+
Вам нужен третий персонаж, находящийся у прилавка. Вы проиходите и говорите ему "мне колбасу". Он говорит продавщице - "мне колбасу". Вы уходите, продавщица приносит колбасу и говорит третьему человеку "вам колбаса". Третий человек связывается с вами и говорит вам "вам колбаса". В вашем случае третьим человеком может быть JMS-очередь, в которую будет писаться сообщение после приготовления отчета. Или просто отправляйте отчет по еmail. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2012, 13:52:06 |
|
||
|
Можно ли через MessageDrivenBean выполнять какие-то длительные операции?
|
|||
|---|---|---|---|
|
#18+
авторТретий человек связывается с вами и говорит вам "вам колбаса". Вот в этом-то и вопрос как он связываться должен. Я тут немного почитал: Then EJB specification does not outline any mechanism that allows a JMS message-driven bean to propagete a response back to the client that oroginally generated the message. Типа, нет стандартных механизмов для того, чтобы Message Driven Bean как-то уведомил источник сообщения, в данном случае клиента. авторВам нужен третий персонаж, находящийся у прилавка. Ну, это да. Например, это может быть некий Singleton, как вариант, или JMS-очередь. Singleton как-то понятнее был бы, на мой взгляд. Но в любом случае надо будет бегать каждые какие-то секунды и спрашивать не готова ли колбаса, потому что E-mail может не везде использоваться. Я вот сейча решил попробовать. Сделал серверу вечный цикл: Код: sql 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. Вроде, пока работает уже часа полтора и ничего не отваливается. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2012, 14:09:15 |
|
||
|
Можно ли через MessageDrivenBean выполнять какие-то длительные операции?
|
|||
|---|---|---|---|
|
#18+
Внутри mdb лучше не делать длительных операций, в конце-концов, у контейнера есть таймауты. Лучше писать задачи об отчете в таблицу, а потом в отдельном потоке дергать её и формировать отчеты. JMS тут наверное не очень подходит, JMS хорошо когда много сообщений. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2012, 14:19:03 |
|
||
|
Можно ли через MessageDrivenBean выполнять какие-то длительные операции?
|
|||
|---|---|---|---|
|
#18+
Внутри mdb лучше не делать длительных операций, в конце-концов, у контейнера есть таймауты. JMS тут наверное не очень подходит, JMS хорошо когда много сообщений. Уже часа 2 работает. Может быть этот TimeOut просто большой и я его не дождался пока. Ну, а как тогда быть с длительными операциями, если они есть или могут быть? Есть ли какая-то общая тактика? Лучше писать задачи об отчете в таблицу, а потом в отдельном потоке дергать её и формировать отчеты. А это как это? Код: sql 1. 2. Так что ли? Или нет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2012, 14:49:02 |
|
||
|
Можно ли через MessageDrivenBean выполнять какие-то длительные операции?
|
|||
|---|---|---|---|
|
#18+
Niky4000Так что ли? Или нет? Ну да, примерно так. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2012, 14:58:14 |
|
||
|
Можно ли через MessageDrivenBean выполнять какие-то длительные операции?
|
|||
|---|---|---|---|
|
#18+
в конце-концов, у контейнера есть таймауты. То есть у MessageDrivenBean TimeOut'ы есть, а у @Schedule нет что ли TimeOut'ов? Просто у SessionBean они точно есть. Пока я ходил на обед - они случались. Там TimeOut довольно большой, но и не слишком большой одновременно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2012, 15:02:51 |
|
||
|
Можно ли через MessageDrivenBean выполнять какие-то длительные операции?
|
|||
|---|---|---|---|
|
#18+
Я не пойму каким боком тут вообще таймауты? Вам же предельно ясно обьяснили - надо разбить задачу на несколько компонентов. Компонент 1 - добавляет заявку на длительную операцию в посредник. Компонент 2(посредник) - передает заявку в систему где она обрабатывается(компонент 3) и запускает таймер в зависимости от задачи, в котором опрашивается система на наличие обработанной заявки. Когда заявка обработана - таймер удаляется, компонент 1 оповещается и забирает результат. Какие тут таймауты? Как это конкретно реализовать - ну можно и через очереди, вариантов миллион ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2012, 16:18:53 |
|
||
|
Можно ли через MessageDrivenBean выполнять какие-то длительные операции?
|
|||
|---|---|---|---|
|
#18+
Я не пойму каким боком тут вообще таймауты? Вам же предельно ясно обьяснили - надо разбить задачу на несколько компонентов. Компонент 1 - добавляет заявку на длительную операцию в посредник. Компонент 2(посредник) - передает заявку в систему где она обрабатывается(компонент 3) и запускает таймер в зависимости от задачи, в котором опрашивается система на наличие обработанной заявки. Когда заявка обработана - таймер удаляется, компонент 1 оповещается и забирает результат. Какие тут таймауты? Как это конкретно реализовать - ну можно и через очереди, вариантов миллион забыл ник просто у меня начинают возникать сомнения на счёт того, что Лагман прав на счёт того, что у Message Driven Bean'а есть TimeOut. Я запустил сервер на debug. Ставлю в цикл break point и вижу, что поток на сервере работает до сих пор. И пока нет никаких TimeOut'ов. ...и запускает таймер... Ну, вот я и думаю, а если нет у Message Driven Bean'а никаких TimeOut'ов, то есть если его запустить, то он может работать вечно, то может быть его и использовать для длительных операций, а не таймер. Просто таймер мне кажется менее привлекательной штукой по сравнению с Message Driven Bean'ом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2012, 16:38:18 |
|
||
|
Можно ли через MessageDrivenBean выполнять какие-то длительные операции?
|
|||
|---|---|---|---|
|
#18+
Я попробую это всё до завтра оставить. Если ничего не отвалится, то, наверное, можно считать, что Лагман вероятно ошибился и Message Driven Bean может работать вечно и хорошо подходит для длительных операций, инициализированных клиентом. А может и я ошибаюсь... кто знает... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2012, 16:41:34 |
|
||
|
Можно ли через MessageDrivenBean выполнять какие-то длительные операции?
|
|||
|---|---|---|---|
|
#18+
Niky4000, Очередь заэкспайрит мессадж если бин долго будет молотить. И количество истанциированных контейнером MDB увеличиться(при большом таймауте очереди). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2012, 17:00:04 |
|
||
|
Можно ли через MessageDrivenBean выполнять какие-то длительные операции?
|
|||
|---|---|---|---|
|
#18+
Очередь заэкспайрит мессадж если бин долго будет молотить. И количество истанциированных контейнером MDB увеличиться(при большом таймауте очереди). У сервера есть ограничение на количество MDB. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2012, 17:04:16 |
|
||
|
Можно ли через MessageDrivenBean выполнять какие-то длительные операции?
|
|||
|---|---|---|---|
|
#18+
Последнее зависит от реализации. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2012, 17:06:23 |
|
||
|
Можно ли через MessageDrivenBean выполнять какие-то длительные операции?
|
|||
|---|---|---|---|
|
#18+
ejb 3.1 asynchronous session beans ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2012, 01:13:04 |
|
||
|
Можно ли через MessageDrivenBean выполнять какие-то длительные операции?
|
|||
|---|---|---|---|
|
#18+
Я ради интереса на ночь всё это оставил. Пришёл сейчас утром - ничего не отвалилось break ставится и перехватывает выполнение. ejb 3.1 asynchronous session beans Есть даже такие штуки... Но по сути Message Driven Bean то же самое. И он ведёт себя так как мне нужно. Единственное, что надо учесть - это то что по своей природе он Stateless и их может существовать не более чем указано в настройках сервера, а иначе, вероятно, произойдёт глобальное исключение. Ну, значит, делаем вывод, что Лагман был не прав и у Message Driven Bean нет никаких TimeOut и их вполне можно использовать для длительных операций. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2012, 08:15:17 |
|
||
|
Можно ли через MessageDrivenBean выполнять какие-то длительные операции?
|
|||
|---|---|---|---|
|
#18+
Niky4000Message Driven Bean нет никаких TimeOut есть ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2012, 08:50:33 |
|
||
|
Можно ли через MessageDrivenBean выполнять какие-то длительные операции?
|
|||
|---|---|---|---|
|
#18+
есть Ну, а сколько. Он у меня почти сутки отработал в вечном цикле и ничего никаких TimeOut'ов не было. Каков же этот TimeOut? Неделя, месяц или год? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2012, 10:34:24 |
|
||
|
Можно ли через MessageDrivenBean выполнять какие-то длительные операции?
|
|||
|---|---|---|---|
|
#18+
Niky4000есть Ну, а сколько. Он у меня почти сутки отработал в вечном цикле и ничего никаких TimeOut'ов не было. Каков же этот TimeOut? Неделя, месяц или год?в websphere 6.1, например, по умолчанию 120 секунд ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2012, 11:14:12 |
|
||
|
Можно ли через MessageDrivenBean выполнять какие-то длительные операции?
|
|||
|---|---|---|---|
|
#18+
например, jboss: @ActivationConfigProperty(propertyName="transactionTimeout", propertyValue="xxx") ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2012, 11:20:54 |
|
||
|
Можно ли через MessageDrivenBean выполнять какие-то длительные операции?
|
|||
|---|---|---|---|
|
#18+
в websphere 6.1, например, по умолчанию 120 секунд А в Glassfish около суток как минимум. Как практика показала. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2012, 14:03:07 |
|
||
|
Можно ли через MessageDrivenBean выполнять какие-то длительные операции?
|
|||
|---|---|---|---|
|
#18+
Niky4000в websphere 6.1, например, по умолчанию 120 секунд А в Glassfish около суток как минимум. Как практика показала.я посмотрю завтра ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2012, 22:29:12 |
|
||
|
Можно ли через MessageDrivenBean выполнять какие-то длительные операции?
|
|||
|---|---|---|---|
|
#18+
я посмотрю завтра Ну, и как результаты тестов? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.11.2012, 10:54:17 |
|
||
|
Можно ли через MessageDrivenBean выполнять какие-то длительные операции?
|
|||
|---|---|---|---|
|
#18+
Niky4000я посмотрю завтра Ну, и как результаты тестов?охблеать ) прости ) отпишусь, да спосип за напоминалку ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.11.2012, 10:55:48 |
|
||
|
Можно ли через MessageDrivenBean выполнять какие-то длительные операции?
|
|||
|---|---|---|---|
|
#18+
В JBoss 4.2.2 таймаут по умолчанию 3 минуты, по истечению этого времени сообщение автоматически посылается повторно. Я как-то два дня просидел с отладчиком, выясняя, что за м*дак посылает повторные сообщения. В итоге отключил у MDB поддержку транзакций, т.к. они там были не нужны. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.11.2012, 11:15:02 |
|
||
|
Можно ли через MessageDrivenBean выполнять какие-то длительные операции?
|
|||
|---|---|---|---|
|
#18+
grasoff.netNiky4000пропущено... А в Glassfish около суток как минимум. Как практика показала.я посмотрю завтрану вот glassfish 3.1.1 / Jul 19 2011 120 секунд mdb вот отсюда: http://today.java.net/pub/a/today/2008/01/22/jms-messaging-using-glassfish.html там где написано "// persist data" идут беспорядочные создания/удаления файлов и запись в них текста ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.11.2012, 13:58:31 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=38017883&tid=2129660]: |
0ms |
get settings: |
14ms |
get forum list: |
24ms |
check forum access: |
6ms |
check topic access: |
6ms |
track hit: |
61ms |
get topic data: |
21ms |
get forum data: |
5ms |
get page messages: |
124ms |
get tp. blocked users: |
3ms |
| others: | 322ms |
| total: | 586ms |

| 0 / 0 |
