Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Можно ли через MessageDrivenBean выполнять какие-то длительные операции? / 25 сообщений из 48, страница 1 из 2
29.10.2012, 12:35:39
    #38016805
Niky4000
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли через MessageDrivenBean выполнять какие-то длительные операции?
Хотелось бы как-то прояснить этот момент.
Допустим, у нас есть некая потребность сформировать какой-то отчёт в Exel. У нас есть какая-то очень длительная выборка из СУБД и мы что-то в отчёт вставляем. Формируем его JasperReport'ом.
Инициатором начала формирования отчёта является Stand Alone Java Client с GUI Swing интерфейсом.
Если использовать просто Remote SessionBean, то если отчёт формировался бы достаточно долго, то клиент просто отвалился бы по TimeOut'у.
Это всё равно кабы я пришёл за колбасой в магазин и сказал продавщице: "Хочу колбасы!"
А она: "Несу!"
И остался бы ждать.
Прошло 30 мин (например), я по TimeOut развернулся у ушёл и никогда бы больше не пришёл.
Пришла бы продавщица через 2 часа и вызвала бы исключение.
А вот в случае с MessageDrivenBean:
Пришёл бы я в магазин за колбасой и крикнул бы: "Хочу колбасы!"
И ушёл бы не дожидаясь бы ответа от продавщицы.
А вот вопрос: Может ли продавщица меня как-то уведомить, например, послать мне Клиенту сообщение о том, что колбаса готова, а я бы увидев сообщение пошёл бы в магазин за колбасой.
Или я должен буду как демон бегать в магазин каждые 5 минут и спрашивать у какого-нибудь Sigleton'а (так к примеру): "Готова ли колбаса?" До тех пор пока он не скажет: "Готова!"
И самое главное никто ли не отвалится в этой схеме?
...
Рейтинг: 0 / 0
29.10.2012, 13:52:06
    #38016961
Лагман
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли через MessageDrivenBean выполнять какие-то длительные операции?
Вам нужен третий персонаж, находящийся у прилавка. Вы проиходите и говорите ему "мне колбасу". Он говорит продавщице - "мне колбасу". Вы уходите, продавщица приносит колбасу и говорит третьему человеку "вам колбаса". Третий человек связывается с вами и говорит вам "вам колбаса".
В вашем случае третьим человеком может быть JMS-очередь, в которую будет писаться сообщение после приготовления отчета. Или просто отправляйте отчет по еmail.
...
Рейтинг: 0 / 0
29.10.2012, 14:09:15
    #38016994
Niky4000
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли через MessageDrivenBean выполнять какие-то длительные операции?
авторТретий человек связывается с вами и говорит вам "вам колбаса".
Вот в этом-то и вопрос как он связываться должен.
Я тут немного почитал:
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.
@MessageDriven(mappedName = "jms/DebugMessage", activationConfig = {
    @ActivationConfigProperty(propertyName = "acknowledgeMode", propertyValue = "Auto-acknowledge"),
    @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue")
})
public class DebugMessageBean implements MessageListener {
    
    public DebugMessageBean() {
    }
    
    @Override
    public void onMessage(Message message) {
        String gg="";
        File debugFile=new File("D:\\MessageDrivenBean.txt");
        try{
            debugFile.createNewFile();
        }
        catch(Exception e){
            
        }
        int i=0;
        while(true){
            i++;
            if(i>=100000){
                i=0;
            }
        }
        
    }
}


Вроде, пока работает уже часа полтора и ничего не отваливается.
...
Рейтинг: 0 / 0
29.10.2012, 14:19:03
    #38017010
Лагман
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли через MessageDrivenBean выполнять какие-то длительные операции?
Внутри mdb лучше не делать длительных операций, в конце-концов, у контейнера есть таймауты.
Лучше писать задачи об отчете в таблицу, а потом в отдельном потоке дергать её и формировать отчеты.
JMS тут наверное не очень подходит, JMS хорошо когда много сообщений.
...
Рейтинг: 0 / 0
29.10.2012, 14:49:02
    #38017068
Niky4000
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли через MessageDrivenBean выполнять какие-то длительные операции?
Внутри mdb лучше не делать длительных операций, в конце-концов, у контейнера есть таймауты.
JMS тут наверное не очень подходит, JMS хорошо когда много сообщений.
Уже часа 2 работает.
Может быть этот TimeOut просто большой и я его не дождался пока.
Ну, а как тогда быть с длительными операциями, если они есть или могут быть?
Есть ли какая-то общая тактика?
Лучше писать задачи об отчете в таблицу, а потом в отдельном потоке дергать её и формировать отчеты.
А это как это?
Код: sql
1.
2.
    @Schedule(hour="*/1", minute="*/2", second="10")
    public void userSchedule(){[тут как-то формируем отчёт]}


Так что ли?
Или нет?
...
Рейтинг: 0 / 0
29.10.2012, 14:58:14
    #38017095
Лагман
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли через MessageDrivenBean выполнять какие-то длительные операции?
Niky4000Так что ли?
Или нет?
Ну да, примерно так.
...
Рейтинг: 0 / 0
29.10.2012, 15:02:51
    #38017111
Niky4000
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли через MessageDrivenBean выполнять какие-то длительные операции?
в конце-концов, у контейнера есть таймауты.
То есть у MessageDrivenBean TimeOut'ы есть, а у @Schedule нет что ли TimeOut'ов?
Просто у SessionBean они точно есть. Пока я ходил на обед - они случались. Там TimeOut довольно большой, но и не слишком большой одновременно.
...
Рейтинг: 0 / 0
29.10.2012, 16:18:53
    #38017319
забыл ник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли через MessageDrivenBean выполнять какие-то длительные операции?
Я не пойму каким боком тут вообще таймауты?
Вам же предельно ясно обьяснили - надо разбить задачу на несколько компонентов. Компонент 1 - добавляет заявку на длительную операцию в посредник. Компонент 2(посредник) - передает заявку в систему где она обрабатывается(компонент 3) и запускает таймер в зависимости от задачи, в котором опрашивается система на наличие обработанной заявки. Когда заявка обработана - таймер удаляется, компонент 1 оповещается и забирает результат. Какие тут таймауты?
Как это конкретно реализовать - ну можно и через очереди, вариантов миллион
...
Рейтинг: 0 / 0
29.10.2012, 16:38:18
    #38017363
Niky4000
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли через MessageDrivenBean выполнять какие-то длительные операции?
Я не пойму каким боком тут вообще таймауты?
Вам же предельно ясно обьяснили - надо разбить задачу на несколько компонентов. Компонент 1 - добавляет заявку на длительную операцию в посредник. Компонент 2(посредник) - передает заявку в систему где она обрабатывается(компонент 3) и запускает таймер в зависимости от задачи, в котором опрашивается система на наличие обработанной заявки. Когда заявка обработана - таймер удаляется, компонент 1 оповещается и забирает результат. Какие тут таймауты?
Как это конкретно реализовать - ну можно и через очереди, вариантов миллион
забыл ник просто у меня начинают возникать сомнения на счёт того, что Лагман прав на счёт того, что у Message Driven Bean'а есть TimeOut. Я запустил сервер на debug. Ставлю в цикл break point и вижу, что поток на сервере работает до сих пор. И пока нет никаких TimeOut'ов.
...и запускает таймер...
Ну, вот я и думаю, а если нет у Message Driven Bean'а никаких TimeOut'ов, то есть если его запустить, то он может работать вечно, то может быть его и использовать для длительных операций, а не таймер.
Просто таймер мне кажется менее привлекательной штукой по сравнению с Message Driven Bean'ом.
...
Рейтинг: 0 / 0
29.10.2012, 16:41:34
    #38017372
Niky4000
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли через MessageDrivenBean выполнять какие-то длительные операции?
Я попробую это всё до завтра оставить. Если ничего не отвалится, то, наверное, можно считать, что Лагман вероятно ошибился и Message Driven Bean может работать вечно и хорошо подходит для длительных операций, инициализированных клиентом.
А может и я ошибаюсь... кто знает...
...
Рейтинг: 0 / 0
29.10.2012, 17:00:04
    #38017427
zalexaka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли через MessageDrivenBean выполнять какие-то длительные операции?
Niky4000,
Очередь заэкспайрит мессадж если бин долго будет молотить. И количество истанциированных контейнером MDB увеличиться(при большом таймауте очереди).
...
Рейтинг: 0 / 0
29.10.2012, 17:04:16
    #38017442
Niky4000
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли через MessageDrivenBean выполнять какие-то длительные операции?
Очередь заэкспайрит мессадж если бин долго будет молотить. И количество истанциированных контейнером MDB увеличиться(при большом таймауте очереди).
У сервера есть ограничение на количество MDB.
...
Рейтинг: 0 / 0
29.10.2012, 17:06:23
    #38017446
zalexaka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли через MessageDrivenBean выполнять какие-то длительные операции?
Последнее зависит от реализации.
...
Рейтинг: 0 / 0
30.10.2012, 01:13:04
    #38017883
grasoff.net
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли через MessageDrivenBean выполнять какие-то длительные операции?
ejb 3.1 asynchronous session beans
...
Рейтинг: 0 / 0
30.10.2012, 08:15:17
    #38017985
Niky4000
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли через MessageDrivenBean выполнять какие-то длительные операции?
Я ради интереса на ночь всё это оставил. Пришёл сейчас утром - ничего не отвалилось break ставится и перехватывает выполнение.
ejb 3.1 asynchronous session beans
Есть даже такие штуки...
Но по сути Message Driven Bean то же самое. И он ведёт себя так как мне нужно. Единственное, что надо учесть - это то что по своей природе он Stateless и их может существовать не более чем указано в настройках сервера, а иначе, вероятно, произойдёт глобальное исключение.
Ну, значит, делаем вывод, что Лагман был не прав и у Message Driven Bean нет никаких TimeOut и их вполне можно использовать для длительных операций.
...
Рейтинг: 0 / 0
30.10.2012, 08:50:33
    #38018016
grasoff.net
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли через MessageDrivenBean выполнять какие-то длительные операции?
Niky4000Message Driven Bean нет никаких TimeOut
есть
...
Рейтинг: 0 / 0
30.10.2012, 10:34:24
    #38018170
Niky4000
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли через MessageDrivenBean выполнять какие-то длительные операции?
есть
Ну, а сколько. Он у меня почти сутки отработал в вечном цикле и ничего никаких TimeOut'ов не было.
Каков же этот TimeOut? Неделя, месяц или год?
...
Рейтинг: 0 / 0
30.10.2012, 11:14:12
    #38018269
grasoff.net
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли через MessageDrivenBean выполнять какие-то длительные операции?
Niky4000есть
Ну, а сколько. Он у меня почти сутки отработал в вечном цикле и ничего никаких TimeOut'ов не было.
Каков же этот TimeOut? Неделя, месяц или год?в websphere 6.1, например, по умолчанию 120 секунд
...
Рейтинг: 0 / 0
30.10.2012, 11:20:54
    #38018288
grasoff.net
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли через MessageDrivenBean выполнять какие-то длительные операции?
например, jboss:
@ActivationConfigProperty(propertyName="transactionTimeout", propertyValue="xxx")
...
Рейтинг: 0 / 0
31.10.2012, 14:03:07
    #38020092
Niky4000
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли через MessageDrivenBean выполнять какие-то длительные операции?
в websphere 6.1, например, по умолчанию 120 секунд
А в Glassfish около суток как минимум. Как практика показала.
...
Рейтинг: 0 / 0
31.10.2012, 22:29:12
    #38020826
grasoff.net
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли через MessageDrivenBean выполнять какие-то длительные операции?
Niky4000в websphere 6.1, например, по умолчанию 120 секунд
А в Glassfish около суток как минимум. Как практика показала.я посмотрю завтра
...
Рейтинг: 0 / 0
07.11.2012, 10:54:17
    #38028031
Niky4000
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли через MessageDrivenBean выполнять какие-то длительные операции?
я посмотрю завтра
Ну, и как результаты тестов?
...
Рейтинг: 0 / 0
07.11.2012, 10:55:48
    #38028035
grasoff.net
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли через MessageDrivenBean выполнять какие-то длительные операции?
Niky4000я посмотрю завтра
Ну, и как результаты тестов?охблеать ) прости )
отпишусь, да
спосип за напоминалку )
...
Рейтинг: 0 / 0
07.11.2012, 11:15:02
    #38028088
wessen
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли через MessageDrivenBean выполнять какие-то длительные операции?
В JBoss 4.2.2 таймаут по умолчанию 3 минуты, по истечению этого времени сообщение автоматически посылается повторно. Я как-то два дня просидел с отладчиком, выясняя, что за м*дак посылает повторные сообщения. В итоге отключил у MDB поддержку транзакций, т.к. они там были не нужны.
...
Рейтинг: 0 / 0
07.11.2012, 13:58:31
    #38028596
grasoff.net
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли через MessageDrivenBean выполнять какие-то длительные операции?
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" идут беспорядочные создания/удаления файлов и запись в них текста
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Можно ли через MessageDrivenBean выполнять какие-то длительные операции? / 25 сообщений из 48, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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