|
|
|
Можно ли через 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 |
|
||
|
Можно ли через MessageDrivenBean выполнять какие-то длительные операции?
|
|||
|---|---|---|---|
|
#18+
120 секунд Странно... А у меня висел сутки и не отваливался. Может быть у меня какой-то Glassfish необычный? У меня 3.1.2. Попробую тогда сделать создание и удаление фалов в качестве эксперимента, а до этого был вечный цикл под отладчиком. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.11.2012, 14:37:26 |
|
||
|
Можно ли через MessageDrivenBean выполнять какие-то длительные операции?
|
|||
|---|---|---|---|
|
#18+
Niky4000У меня 3.1.2мне кажется, что с 3.0 будет такой же результат ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.11.2012, 15:12:43 |
|
||
|
Можно ли через MessageDrivenBean выполнять какие-то длительные операции?
|
|||
|---|---|---|---|
|
#18+
Niky4000120 секунд Странно... А у меня висел сутки и не отваливался. Может быть у меня какой-то Glassfish необычный? У меня 3.1.2. Попробую тогда сделать создание и удаление фалов в качестве эксперимента, а до этого был вечный цикл под отладчиком. О каком еще таймаутие идет речь? Код: java 1. 2. 3. 4. 5. 6. 7. Это что за жесть? В MDB не нужно никаких бесконечных циклов и.т.д Метод onMessage сам отработает когда вернется новое сообщение. Я бы вам советовал сформулировать требования не на колбасе, а техническими терминами ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2012, 14:59:58 |
|
||
|
Можно ли через MessageDrivenBean выполнять какие-то длительные операции?
|
|||
|---|---|---|---|
|
#18+
OOsalivanNiky4000пропущено... Странно... А у меня висел сутки и не отваливался. Может быть у меня какой-то Glassfish необычный? У меня 3.1.2. Попробую тогда сделать создание и удаление фалов в качестве эксперимента, а до этого был вечный цикл под отладчиком. О каком еще таймаутие идет речь? Код: java 1. 2. 3. 4. 5. 6. 7. Это что за жесть? В MDB не нужно никаких бесконечных циклов и.т.д Метод onMessage сам отработает когда вернется новое сообщение. Я бы вам советовал сформулировать требования не на колбасе, а техническими терминамиты вот хуйню сейчас сказал и спросил ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2012, 00:18:43 |
|
||
|
Можно ли через MessageDrivenBean выполнять какие-то длительные операции?
|
|||
|---|---|---|---|
|
#18+
grasoff.netOOsalivanпропущено... О каком еще таймаутие идет речь? Код: java 1. 2. 3. 4. 5. 6. 7. Это что за жесть? В MDB не нужно никаких бесконечных циклов и.т.д Метод onMessage сам отработает когда вернется новое сообщение. Я бы вам советовал сформулировать требования не на колбасе, а техническими терминамиты вот хуйню сейчас сказал и спросилпотому что у человека вопрос - более академического характера ниче нет плохого в том, что он пытается выяснить как работает mdb и ниче нет плохого в этом цикле почему тебя не возмутило, что я во временный файлы пишу 100 тысяч раз слово сранаябулка? а потом удаляю эти временные файлы ведь с точки зрения нормального человека - это бред и дебилизм а уж с точки зрения психолога - ой-ой-ай ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2012, 00:21:51 |
|
||
|
Можно ли через MessageDrivenBean выполнять какие-то длительные операции?
|
|||
|---|---|---|---|
|
#18+
Что-то никак руки не доходили до эксперимента. Вот! Код: 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. 30. 31. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Ну никак (Thu Nov 15 08:56:20 GST 2012 - Thu Nov 15 08:49:37 GST 2012) != 120 секунд ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2012, 09:02:15 |
|
||
|
Можно ли через MessageDrivenBean выполнять какие-то длительные операции?
|
|||
|---|---|---|---|
|
#18+
Попробовал повторить тоже самое на Linux: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. Вот что в Log'ах Сервера: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. По логам видно, что по крайней мере всё работает больше 120 секунд и ничего не отваливается, никаких исключений и никаких TimeOut'ов нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2012, 09:58:20 |
|
||
|
Можно ли через MessageDrivenBean выполнять какие-то длительные операции?
|
|||
|---|---|---|---|
|
#18+
Niky4000, Да и не будет у Вас таймаута с Auto-acknowledge. Порочная эта практика в mdm что-то долгоиграющее запихивать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2012, 10:52:09 |
|
||
|
Можно ли через MessageDrivenBean выполнять какие-то длительные операции?
|
|||
|---|---|---|---|
|
#18+
Да и не будет у Вас таймаута с Auto-acknowledge. Порочная эта практика в mdm что-то долгоиграющее запихивать. А куда что-то "долгоиграющее" запихивать? Идея что-то "долгоиграющее" вот в это запихивать: Код: sql 1. Мне не нравится. А во что ещё можно запихнуть что-то "долгоиграющее", если это "долгоиграющее" принципиально существует? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2012, 11:21:55 |
|
||
|
Можно ли через MessageDrivenBean выполнять какие-то длительные операции?
|
|||
|---|---|---|---|
|
#18+
Можно создавать свои потоки причем вполне по феншую с WorkManager-ами, Work-ами и пулами. Ипусть булькают в низком приоритете. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2012, 11:56:15 |
|
||
|
Можно ли через MessageDrivenBean выполнять какие-то длительные операции?
|
|||
|---|---|---|---|
|
#18+
Можно создавать свои потоки причем вполне по феншую с WorkManager-ами, Work-ами и пулами. Ипусть булькают в низком приоритете. А по подробнее... Просто Message Driven Bean выполняется, по всей видимости, в высоком приоритете и сервер не тормознёшь, пока они не завершат своё выполнение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2012, 12:20:59 |
|
||
|
Можно ли через MessageDrivenBean выполнять какие-то длительные операции?
|
|||
|---|---|---|---|
|
#18+
Niky4000Можно создавать свои потоки причем вполне по феншую с WorkManager-ами, Work-ами и пулами. Ипусть булькают в низком приоритете. А по подробнее... Просто Message Driven Bean выполняется, по всей видимости, в высоком приоритете и сервер не тормознёшь, пока они не завершат своё выполнение. Какой смысл в EJB собственные потоки городить? это противоречит идеологии. Уже говорили что подобные ситуации решаются асинхронными бинами . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2012, 12:46:28 |
|
||
|
Можно ли через MessageDrivenBean выполнять какие-то длительные операции?
|
|||
|---|---|---|---|
|
#18+
OOsalivan, Полностью согласен, но это если 3.1 есть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2012, 14:49:34 |
|
||
|
Можно ли через MessageDrivenBean выполнять какие-то длительные операции?
|
|||
|---|---|---|---|
|
#18+
Какой смысл в EJB собственные потоки городить? это противоречит идеологии. Какой ещё идеологии? Порочная эта практика в mdm что-то долгоиграющее запихивать. А какова тогда их сфера применения? Ведь небольшие недолгие операции можно при помощи Stateless легко решить. Мне нужно запустить процесс, который может выполняться довольно-таки долго, например, час или день. Message Driven Bean для меня самое то, единственное неудобство в том, что пока он не отработает сервер тормознуть невозможно штатным образом, например, это может понадобиться в процессе отладки или разработки. Попробую посмотреть что такое эти асинхронные бины и что с ними делать можно... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2012, 19:13:46 |
|
||
|
Можно ли через MessageDrivenBean выполнять какие-то длительные операции?
|
|||
|---|---|---|---|
|
#18+
Niky4000Мне нужно запустить процесс, который может выполняться довольно-таки долго, например, час или день. найди такой процесс. Если это СУБД, то боюсь это противоречит её идеологии)))). Тут уже СУБД отвалится по таймауту. Т.е. найди жизненный пример. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2012, 19:49:05 |
|
||
|
Можно ли через MessageDrivenBean выполнять какие-то длительные операции?
|
|||
|---|---|---|---|
|
#18+
найди такой процесс. Если это СУБД, то боюсь это противоречит её идеологии)))). Тут уже СУБД отвалится по таймауту. Т.е. найди жизненный пример. Формирование сложного отчёта с кучей join'ов, например, Jasper Report --> xls. Может выполняться довольно-таки долго. А почему это СУБД отвалится. Я, например, как-то писал хранимую процедуру, которая может неделю работать. Ничего не отваливалось. Кстати, вот, поэкспериментировал: Код: 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. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. Есть сервлет, который вызывает асинхронный newSessionBean.some(). Если убрать @Asynchronous, то вызов станет синхронным и браузер висит до тех пор, пока newSessionBean.some() не отпустит сервлет. Что интересно, браузер сразу же отображает страничку, а в логах сервер идут "Hello World". Я зашёл на страничку с сервлетом 2 раза и запустил 2 асинхронных потока, что видно в логах, которые независимо друг от друга выполняются, потом я запустил ещё 2 потока и тормознул сервер, как видно, мне это, в отличие от Message Driven Bean, ничто сделать не помешало! Надо бы ещё поэкспериментировать с TimeOut'ами. Есть ли какие-то TimeOut'ы у этих асинхронных бинов. Ну, вообще выглядит это всё проще. Вызов проще, работает как демон и не надо прописывать никаких ресурсов на сервере, в отличие от Message Driven Bean. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2012, 20:27:13 |
|
||
|
Можно ли через MessageDrivenBean выполнять какие-то длительные операции?
|
|||
|---|---|---|---|
|
#18+
Niky4000найди такой процесс. Если это СУБД, то боюсь это противоречит её идеологии)))). Тут уже СУБД отвалится по таймауту. Т.е. найди жизненный пример. Формирование сложного отчёта с кучей join'ов, например, Jasper Report --> xls. Может выполняться довольно-таки долго. А почему это СУБД отвалится. Я, например, как-то писал хранимую процедуру, которая может неделю работать. Ничего не отваливалось. Кстати, вот, поэкспериментировал: Код: 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. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. Есть сервлет, который вызывает асинхронный newSessionBean.some(). Если убрать @Asynchronous, то вызов станет синхронным и браузер висит до тех пор, пока newSessionBean.some() не отпустит сервлет. Что интересно, браузер сразу же отображает страничку, а в логах сервер идут "Hello World". Я зашёл на страничку с сервлетом 2 раза и запустил 2 асинхронных потока, что видно в логах, которые независимо друг от друга выполняются, потом я запустил ещё 2 потока и тормознул сервер, как видно, мне это, в отличие от Message Driven Bean, ничто сделать не помешало! Надо бы ещё поэкспериментировать с TimeOut'ами. Есть ли какие-то TimeOut'ы у этих асинхронных бинов. Ну, вообще выглядит это всё проще. Вызов проще, работает как демон и не надо прописывать никаких ресурсов на сервере, в отличие от Message Driven Bean. Ну и что будет если сеть отвалится?возьми дергани сетевой шнурок). Вообще я так и не понял что вам в итоге надо. Могу рассказать как сделано у нас нечть подобное, и может дам вам пищу для размышлений. Во-первых такого понятия как стандартный таймаут в EJB и JMS-спеках нет, все это сугубо специфично для сервера, и обычно конфигурируемо. Если у вас приложение под определенный сервер(у нас WebLogic) - то сконфигурируйте jms b все ок - такой подход вполне нормален. Во-вторых долгие асинхронные операции в рамках jms -это вполне нормальный подход. В-третьих, я не понимаю что значит mdb мешает перестартовать сервер. Речь не может идти о продакшен сервере - так как на продакшен недопустиммо пускать непротестированный код, а если речь идет о локальном сервере или тестовом - команда kill вам всегда поможет. Тут есть один момент - чтобы не терять проделанную работу, надо проаналзировать задачу(долгий процесс) и определить safe-pointы, и когда процесс заработает то он должен с некоторым интервалом достигать этих сейфпоинтов, чтобы при следующем перезапуске начинать не с начала а с последенго сейфпоинта. А теперь кратко как это работает у нас - Само приложение - это система по наблюдению за здоровьем людей. У нас есть огромное количество юзеров, которые постоянно ходят на фитнесс, проходят медобследования, проходят курсы по питанию и тп - все это приходит к нам в базу асинхронно через ESB, иногда с опозданием. Так вот ночью, когда самая маленькая загрузка у нас шедулится процесс -RecommendationProcess - именно как MDB, он делает следующее - подымает всех юзеров, у которых есть необработанные события. И в цикле анализирует каждого юзера и в итоге ставит ему диагноз или дает рекомендации. В данном случае сейфпоинт - это обработка одного конкретного юзера. То есть если даже вырубится электричество и тп - то мы рестартуем процесс и он обрабатывает только необработанных пользователей. Система работает уже 3 года - полет нормальный. Процесс длится 3-4 часа,завели специальную очередь для него. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2012, 21:21:06 |
|
||
|
Можно ли через MessageDrivenBean выполнять какие-то длительные операции?
|
|||
|---|---|---|---|
|
#18+
Речь не может идти о продакшен сервере - так как на продакшен недопустиммо пускать непротестированный код, а если речь идет о локальном сервере или тестовом - команда kill вам всегда поможет. Сервер тестовый. Попробовать так или как-то по-другому... разные варианты реализации. Ну, вот как-то был у меня прецедент, когда я грохнул сервер так, и после этого он перестал запускаться - при старте валил кучу исключений и не стартовал. Я стараюсь сервер как-то более штатно вырубать. В-третьих, я не понимаю что значит mdb мешает перестартовать сервер. Ну, что значит? Значит, что если есть mdb-поток, если можно так выразиться, то: INFO: Server shutdown initiated ... INFO: Server shutdown initiated ... INFO: Server shutdown initiated ... А сервер всё равно не останавливается до тех пор пока этот mdb-поток (или потоки) не завершится. Кстати, вот результаты тестов: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Час отработал. Ну, да в принципе, этот способ даже лучше, чем mdb, так как у mdb есть ещё какая-то заморочка с передачей объектов - там как-то это всё замороченней, чем с асинхронным session bean. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2012, 21:53:11 |
|
||
|
Можно ли через MessageDrivenBean выполнять какие-то длительные операции?
|
|||
|---|---|---|---|
|
#18+
Niky4000А почему это СУБД отвалится. Я, например, как-то писал хранимую процедуру, которая может неделю работать. Ничего не отваливалось. я о чем и говорю. Делают хранимку "Закрытеи оперДня" - запускают её АСИНХРОННО с клиента. После запуска в СУБД висит процесс. СУБД работает. А коннект с клиентом не нужен. И твой процесс на трое суток НЕ НУЖЕН. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2012, 22:07:40 |
|
||
|
Можно ли через MessageDrivenBean выполнять какие-то длительные операции?
|
|||
|---|---|---|---|
|
#18+
забыл никТак вот ночью, когда самая маленькая загрузка у нас шедулится процесс -RecommendationProcess - именно как MDB +1 этот вариант, если БЛ не в ХП в СУБД, а на АппСервере. Длинный процесс из 4 часов состоит из бизнес-транзакций на одного юзверя. Поэтому всё логично. Чем аффтатру не подходит - я не понял. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2012, 22:17:33 |
|
||
|
Можно ли через MessageDrivenBean выполнять какие-то длительные операции?
|
|||
|---|---|---|---|
|
#18+
какой ужас... процедур работающие неделями... mdb запускаете на сутки. Может вам java только мешает своими "идеалогиями"? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2012, 22:29:34 |
|
||
|
Можно ли через MessageDrivenBean выполнять какие-то длительные операции?
|
|||
|---|---|---|---|
|
#18+
ИМХО "Длинные операции" лучше выполнять средствами СУБД (в Oracle для этого есть dbms_scheduler) и там же сохранить результат (например в табличку в поле с типом CLOB). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2013, 20:58:53 |
|
||
|
|

start [/forum/topic.php?all=1&fid=59&tid=2129660]: |
0ms |
get settings: |
16ms |
get forum list: |
30ms |
check forum access: |
8ms |
check topic access: |
8ms |
track hit: |
73ms |
get topic data: |
23ms |
get forum data: |
6ms |
get page messages: |
116ms |
get tp. blocked users: |
3ms |
| others: | 321ms |
| total: | 604ms |

| 0 / 0 |
