powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Можно ли через MessageDrivenBean выполнять какие-то длительные операции?
48 сообщений из 48, показаны все 2 страниц
Можно ли через MessageDrivenBean выполнять какие-то длительные операции?
    #38016805
Niky4000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Хотелось бы как-то прояснить этот момент.
Допустим, у нас есть некая потребность сформировать какой-то отчёт в Exel. У нас есть какая-то очень длительная выборка из СУБД и мы что-то в отчёт вставляем. Формируем его JasperReport'ом.
Инициатором начала формирования отчёта является Stand Alone Java Client с GUI Swing интерфейсом.
Если использовать просто Remote SessionBean, то если отчёт формировался бы достаточно долго, то клиент просто отвалился бы по TimeOut'у.
Это всё равно кабы я пришёл за колбасой в магазин и сказал продавщице: "Хочу колбасы!"
А она: "Несу!"
И остался бы ждать.
Прошло 30 мин (например), я по TimeOut развернулся у ушёл и никогда бы больше не пришёл.
Пришла бы продавщица через 2 часа и вызвала бы исключение.
А вот в случае с MessageDrivenBean:
Пришёл бы я в магазин за колбасой и крикнул бы: "Хочу колбасы!"
И ушёл бы не дожидаясь бы ответа от продавщицы.
А вот вопрос: Может ли продавщица меня как-то уведомить, например, послать мне Клиенту сообщение о том, что колбаса готова, а я бы увидев сообщение пошёл бы в магазин за колбасой.
Или я должен буду как демон бегать в магазин каждые 5 минут и спрашивать у какого-нибудь Sigleton'а (так к примеру): "Готова ли колбаса?" До тех пор пока он не скажет: "Готова!"
И самое главное никто ли не отвалится в этой схеме?
...
Рейтинг: 0 / 0
Можно ли через MessageDrivenBean выполнять какие-то длительные операции?
    #38016961
Лагман
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вам нужен третий персонаж, находящийся у прилавка. Вы проиходите и говорите ему "мне колбасу". Он говорит продавщице - "мне колбасу". Вы уходите, продавщица приносит колбасу и говорит третьему человеку "вам колбаса". Третий человек связывается с вами и говорит вам "вам колбаса".
В вашем случае третьим человеком может быть JMS-очередь, в которую будет писаться сообщение после приготовления отчета. Или просто отправляйте отчет по еmail.
...
Рейтинг: 0 / 0
Можно ли через MessageDrivenBean выполнять какие-то длительные операции?
    #38016994
Niky4000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторТретий человек связывается с вами и говорит вам "вам колбаса".
Вот в этом-то и вопрос как он связываться должен.
Я тут немного почитал:
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
Можно ли через MessageDrivenBean выполнять какие-то длительные операции?
    #38017010
Лагман
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Внутри mdb лучше не делать длительных операций, в конце-концов, у контейнера есть таймауты.
Лучше писать задачи об отчете в таблицу, а потом в отдельном потоке дергать её и формировать отчеты.
JMS тут наверное не очень подходит, JMS хорошо когда много сообщений.
...
Рейтинг: 0 / 0
Можно ли через MessageDrivenBean выполнять какие-то длительные операции?
    #38017068
Niky4000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Внутри mdb лучше не делать длительных операций, в конце-концов, у контейнера есть таймауты.
JMS тут наверное не очень подходит, JMS хорошо когда много сообщений.
Уже часа 2 работает.
Может быть этот TimeOut просто большой и я его не дождался пока.
Ну, а как тогда быть с длительными операциями, если они есть или могут быть?
Есть ли какая-то общая тактика?
Лучше писать задачи об отчете в таблицу, а потом в отдельном потоке дергать её и формировать отчеты.
А это как это?
Код: sql
1.
2.
    @Schedule(hour="*/1", minute="*/2", second="10")
    public void userSchedule(){[тут как-то формируем отчёт]}


Так что ли?
Или нет?
...
Рейтинг: 0 / 0
Можно ли через MessageDrivenBean выполнять какие-то длительные операции?
    #38017095
Лагман
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Niky4000Так что ли?
Или нет?
Ну да, примерно так.
...
Рейтинг: 0 / 0
Можно ли через MessageDrivenBean выполнять какие-то длительные операции?
    #38017111
Niky4000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
в конце-концов, у контейнера есть таймауты.
То есть у MessageDrivenBean TimeOut'ы есть, а у @Schedule нет что ли TimeOut'ов?
Просто у SessionBean они точно есть. Пока я ходил на обед - они случались. Там TimeOut довольно большой, но и не слишком большой одновременно.
...
Рейтинг: 0 / 0
Можно ли через MessageDrivenBean выполнять какие-то длительные операции?
    #38017319
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я не пойму каким боком тут вообще таймауты?
Вам же предельно ясно обьяснили - надо разбить задачу на несколько компонентов. Компонент 1 - добавляет заявку на длительную операцию в посредник. Компонент 2(посредник) - передает заявку в систему где она обрабатывается(компонент 3) и запускает таймер в зависимости от задачи, в котором опрашивается система на наличие обработанной заявки. Когда заявка обработана - таймер удаляется, компонент 1 оповещается и забирает результат. Какие тут таймауты?
Как это конкретно реализовать - ну можно и через очереди, вариантов миллион
...
Рейтинг: 0 / 0
Можно ли через MessageDrivenBean выполнять какие-то длительные операции?
    #38017363
Niky4000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я не пойму каким боком тут вообще таймауты?
Вам же предельно ясно обьяснили - надо разбить задачу на несколько компонентов. Компонент 1 - добавляет заявку на длительную операцию в посредник. Компонент 2(посредник) - передает заявку в систему где она обрабатывается(компонент 3) и запускает таймер в зависимости от задачи, в котором опрашивается система на наличие обработанной заявки. Когда заявка обработана - таймер удаляется, компонент 1 оповещается и забирает результат. Какие тут таймауты?
Как это конкретно реализовать - ну можно и через очереди, вариантов миллион
забыл ник просто у меня начинают возникать сомнения на счёт того, что Лагман прав на счёт того, что у Message Driven Bean'а есть TimeOut. Я запустил сервер на debug. Ставлю в цикл break point и вижу, что поток на сервере работает до сих пор. И пока нет никаких TimeOut'ов.
...и запускает таймер...
Ну, вот я и думаю, а если нет у Message Driven Bean'а никаких TimeOut'ов, то есть если его запустить, то он может работать вечно, то может быть его и использовать для длительных операций, а не таймер.
Просто таймер мне кажется менее привлекательной штукой по сравнению с Message Driven Bean'ом.
...
Рейтинг: 0 / 0
Можно ли через MessageDrivenBean выполнять какие-то длительные операции?
    #38017372
Niky4000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я попробую это всё до завтра оставить. Если ничего не отвалится, то, наверное, можно считать, что Лагман вероятно ошибился и Message Driven Bean может работать вечно и хорошо подходит для длительных операций, инициализированных клиентом.
А может и я ошибаюсь... кто знает...
...
Рейтинг: 0 / 0
Можно ли через MessageDrivenBean выполнять какие-то длительные операции?
    #38017427
zalexaka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Niky4000,
Очередь заэкспайрит мессадж если бин долго будет молотить. И количество истанциированных контейнером MDB увеличиться(при большом таймауте очереди).
...
Рейтинг: 0 / 0
Можно ли через MessageDrivenBean выполнять какие-то длительные операции?
    #38017442
Niky4000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Очередь заэкспайрит мессадж если бин долго будет молотить. И количество истанциированных контейнером MDB увеличиться(при большом таймауте очереди).
У сервера есть ограничение на количество MDB.
...
Рейтинг: 0 / 0
Можно ли через MessageDrivenBean выполнять какие-то длительные операции?
    #38017446
zalexaka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Последнее зависит от реализации.
...
Рейтинг: 0 / 0
Можно ли через MessageDrivenBean выполнять какие-то длительные операции?
    #38017883
Фотография grasoff.net
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ejb 3.1 asynchronous session beans
...
Рейтинг: 0 / 0
Можно ли через MessageDrivenBean выполнять какие-то длительные операции?
    #38017985
Niky4000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я ради интереса на ночь всё это оставил. Пришёл сейчас утром - ничего не отвалилось break ставится и перехватывает выполнение.
ejb 3.1 asynchronous session beans
Есть даже такие штуки...
Но по сути Message Driven Bean то же самое. И он ведёт себя так как мне нужно. Единственное, что надо учесть - это то что по своей природе он Stateless и их может существовать не более чем указано в настройках сервера, а иначе, вероятно, произойдёт глобальное исключение.
Ну, значит, делаем вывод, что Лагман был не прав и у Message Driven Bean нет никаких TimeOut и их вполне можно использовать для длительных операций.
...
Рейтинг: 0 / 0
Можно ли через MessageDrivenBean выполнять какие-то длительные операции?
    #38018016
Фотография grasoff.net
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Niky4000Message Driven Bean нет никаких TimeOut
есть
...
Рейтинг: 0 / 0
Можно ли через MessageDrivenBean выполнять какие-то длительные операции?
    #38018170
Niky4000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
есть
Ну, а сколько. Он у меня почти сутки отработал в вечном цикле и ничего никаких TimeOut'ов не было.
Каков же этот TimeOut? Неделя, месяц или год?
...
Рейтинг: 0 / 0
Можно ли через MessageDrivenBean выполнять какие-то длительные операции?
    #38018269
Фотография grasoff.net
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Niky4000есть
Ну, а сколько. Он у меня почти сутки отработал в вечном цикле и ничего никаких TimeOut'ов не было.
Каков же этот TimeOut? Неделя, месяц или год?в websphere 6.1, например, по умолчанию 120 секунд
...
Рейтинг: 0 / 0
Можно ли через MessageDrivenBean выполнять какие-то длительные операции?
    #38018288
Фотография grasoff.net
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
например, jboss:
@ActivationConfigProperty(propertyName="transactionTimeout", propertyValue="xxx")
...
Рейтинг: 0 / 0
Можно ли через MessageDrivenBean выполнять какие-то длительные операции?
    #38020092
Niky4000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
в websphere 6.1, например, по умолчанию 120 секунд
А в Glassfish около суток как минимум. Как практика показала.
...
Рейтинг: 0 / 0
Можно ли через MessageDrivenBean выполнять какие-то длительные операции?
    #38020826
Фотография grasoff.net
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Niky4000в websphere 6.1, например, по умолчанию 120 секунд
А в Glassfish около суток как минимум. Как практика показала.я посмотрю завтра
...
Рейтинг: 0 / 0
Можно ли через MessageDrivenBean выполнять какие-то длительные операции?
    #38028031
Niky4000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
я посмотрю завтра
Ну, и как результаты тестов?
...
Рейтинг: 0 / 0
Можно ли через MessageDrivenBean выполнять какие-то длительные операции?
    #38028035
Фотография grasoff.net
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Niky4000я посмотрю завтра
Ну, и как результаты тестов?охблеать ) прости )
отпишусь, да
спосип за напоминалку )
...
Рейтинг: 0 / 0
Можно ли через MessageDrivenBean выполнять какие-то длительные операции?
    #38028088
wessen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В JBoss 4.2.2 таймаут по умолчанию 3 минуты, по истечению этого времени сообщение автоматически посылается повторно. Я как-то два дня просидел с отладчиком, выясняя, что за м*дак посылает повторные сообщения. В итоге отключил у MDB поддержку транзакций, т.к. они там были не нужны.
...
Рейтинг: 0 / 0
Можно ли через MessageDrivenBean выполнять какие-то длительные операции?
    #38028596
Фотография grasoff.net
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Можно ли через MessageDrivenBean выполнять какие-то длительные операции?
    #38028683
Niky4000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
120 секунд
Странно...
А у меня висел сутки и не отваливался. Может быть у меня какой-то Glassfish необычный?
У меня 3.1.2.
Попробую тогда сделать создание и удаление фалов в качестве эксперимента, а до этого был вечный цикл под отладчиком.
...
Рейтинг: 0 / 0
Можно ли через MessageDrivenBean выполнять какие-то длительные операции?
    #38028777
Фотография grasoff.net
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Niky4000У меня 3.1.2мне кажется, что с 3.0 будет такой же результат )
...
Рейтинг: 0 / 0
Можно ли через MessageDrivenBean выполнять какие-то длительные операции?
    #38033607
OOsalivan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Niky4000120 секунд
Странно...
А у меня висел сутки и не отваливался. Может быть у меня какой-то Glassfish необычный?
У меня 3.1.2.
Попробую тогда сделать создание и удаление фалов в качестве эксперимента, а до этого был вечный цикл под отладчиком.

О каком еще таймаутие идет речь?

Код: java
1.
2.
3.
4.
5.
6.
7.
int i=0;
        while(true){
            i++;
            if(i>=100000){
                i=0;
            }
        }


Это что за жесть?

В MDB не нужно никаких бесконечных циклов и.т.д Метод onMessage сам отработает когда вернется новое сообщение. Я бы вам советовал сформулировать требования не на колбасе, а техническими терминами
...
Рейтинг: 0 / 0
Можно ли через MessageDrivenBean выполнять какие-то длительные операции?
    #38033929
Фотография grasoff.net
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OOsalivanNiky4000пропущено...

Странно...
А у меня висел сутки и не отваливался. Может быть у меня какой-то Glassfish необычный?
У меня 3.1.2.
Попробую тогда сделать создание и удаление фалов в качестве эксперимента, а до этого был вечный цикл под отладчиком.

О каком еще таймаутие идет речь?

Код: java
1.
2.
3.
4.
5.
6.
7.
int i=0;
        while(true){
            i++;
            if(i>=100000){
                i=0;
            }
        }



Это что за жесть?

В MDB не нужно никаких бесконечных циклов и.т.д Метод onMessage сам отработает когда вернется новое сообщение. Я бы вам советовал сформулировать требования не на колбасе, а техническими терминамиты вот хуйню сейчас сказал
и спросил
...
Рейтинг: 0 / 0
Можно ли через MessageDrivenBean выполнять какие-то длительные операции?
    #38033931
Фотография grasoff.net
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
grasoff.netOOsalivanпропущено...


О каком еще таймаутие идет речь?

Код: java
1.
2.
3.
4.
5.
6.
7.
int i=0;
        while(true){
            i++;
            if(i>=100000){
                i=0;
            }
        }




Это что за жесть?

В MDB не нужно никаких бесконечных циклов и.т.д Метод onMessage сам отработает когда вернется новое сообщение. Я бы вам советовал сформулировать требования не на колбасе, а техническими терминамиты вот хуйню сейчас сказал
и спросилпотому что у человека вопрос - более академического характера
ниче нет плохого в том, что он пытается выяснить как работает mdb
и ниче нет плохого в этом цикле
почему тебя не возмутило, что я во временный файлы пишу 100 тысяч раз слово сранаябулка?
а потом удаляю эти временные файлы
ведь с точки зрения нормального человека - это бред и дебилизм
а уж с точки зрения психолога - ой-ой-ай
...
Рейтинг: 0 / 0
Можно ли через MessageDrivenBean выполнять какие-то длительные операции?
    #38039159
Niky4000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Что-то никак руки не доходили до эксперимента.

Вот!

Код: 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.
@MessageDriven(mappedName = "jms/ReportMessage", activationConfig = {
    @ActivationConfigProperty(propertyName = "acknowledgeMode", propertyValue = "Auto-acknowledge"),
    @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue")
})
public class ReportMessageDrivenBean implements MessageListener {

    @Override
    public void onMessage(Message message) {

        for(int i=0;i<10;i++){ // Создаём 10 файлов!
            try{

                // Эмулируем какую-то длительную операцию!
                for(int l=0;l<10;l++){
                    for(int k=0;k<1000;k++){
                        for(int j=0;j<100000;j++){
                            String gg=new String();
                            if(j%10==0){
                                String kb="";
                            }
                        }
                    }
                }
                // Эмулируем какую-то длительную операцию!

                String file_name="D:\\TempFile"+i+".txt"; // На виндовозе...
                new File(file_name).createNewFile();
                System.out.println(file_name+" Now: "+new Date().toString());
            }
            catch(Exception e){}
        }




Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
INFO: Server was successfully deployed in 20,329 milliseconds.
INFO: D:\TempFile0.txt Now: Thu Nov 15 08:49:37 GST 2012
INFO: D:\TempFile1.txt Now: Thu Nov 15 08:50:23 GST 2012
INFO: D:\TempFile2.txt Now: Thu Nov 15 08:51:08 GST 2012
INFO: D:\TempFile3.txt Now: Thu Nov 15 08:51:54 GST 2012
INFO: D:\TempFile4.txt Now: Thu Nov 15 08:52:39 GST 2012
INFO: D:\TempFile5.txt Now: Thu Nov 15 08:53:23 GST 2012
INFO: D:\TempFile6.txt Now: Thu Nov 15 08:54:07 GST 2012
INFO: D:\TempFile7.txt Now: Thu Nov 15 08:54:50 GST 2012
INFO: D:\TempFile8.txt Now: Thu Nov 15 08:55:36 GST 2012
INFO: D:\TempFile9.txt Now: Thu Nov 15 08:56:20 GST 2012



Ну никак (Thu Nov 15 08:56:20 GST 2012 - Thu Nov 15 08:49:37 GST 2012) != 120 секунд
...
Рейтинг: 0 / 0
Можно ли через MessageDrivenBean выполнять какие-то длительные операции?
    #38039226
Niky4000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Попробовал повторить тоже самое на Linux:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
        for(int i=0;i<10;i++){
            try{
                for(int l=0;l<150;l++){ // Цикл чуть больше, так как на Linux это всё работает быстрее!
                    for(int k=0;k<1000;k++){
                        for(int j=0;j<100000;j++){
                            String gg=new String();
                            if(j%10==0){
                                String kb="";
                            }
                        }
                    }
                }
                String file_name="/home/me/TempFile"+i+".txt";
                new File(file_name).createNewFile();
                System.out.println(file_name+" Now: "+new Date().toString());
            }
            catch(Exception e){}
        }
        



Вот что в Log'ах Сервера:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
[#|2012-11-15T10:45:47.502+0400|INFO|glassfish3.1.2|javax.enterprise.system.tools.admin.org.glassfish.deployment.admin|_ThreadID=139;_ThreadName=Thread-2;|Server was successfully deployed in 10,377 milliseconds.|#]

[#|2012-11-15T10:47:30.545+0400|INFO|glassfish3.1.2|javax.enterprise.system.std.com.sun.enterprise.server.logging|_ThreadID=51;_ThreadName=Thread-2;|/home/me/TempFile0.txt Now: Thu Nov 15 10:47:30 SAMT 2012|#]

[#|2012-11-15T10:48:14.066+0400|INFO|glassfish3.1.2|javax.enterprise.system.std.com.sun.enterprise.server.logging|_ThreadID=51;_ThreadName=Thread-2;|/home/me/TempFile1.txt Now: Thu Nov 15 10:48:14 SAMT 2012|#]

[#|2012-11-15T10:48:57.531+0400|INFO|glassfish3.1.2|javax.enterprise.system.std.com.sun.enterprise.server.logging|_ThreadID=51;_ThreadName=Thread-2;|/home/me/TempFile2.txt Now: Thu Nov 15 10:48:57 SAMT 2012|#]

[#|2012-11-15T10:49:40.980+0400|INFO|glassfish3.1.2|javax.enterprise.system.std.com.sun.enterprise.server.logging|_ThreadID=51;_ThreadName=Thread-2;|/home/me/TempFile3.txt Now: Thu Nov 15 10:49:40 SAMT 2012|#]

[#|2012-11-15T10:50:24.807+0400|INFO|glassfish3.1.2|javax.enterprise.system.std.com.sun.enterprise.server.logging|_ThreadID=51;_ThreadName=Thread-2;|/home/me/TempFile4.txt Now: Thu Nov 15 10:50:24 SAMT 2012|#]

[#|2012-11-15T10:51:08.460+0400|INFO|glassfish3.1.2|javax.enterprise.system.std.com.sun.enterprise.server.logging|_ThreadID=51;_ThreadName=Thread-2;|/home/me/TempFile5.txt Now: Thu Nov 15 10:51:08 SAMT 2012|#]

[#|2012-11-15T10:51:51.896+0400|INFO|glassfish3.1.2|javax.enterprise.system.std.com.sun.enterprise.server.logging|_ThreadID=51;_ThreadName=Thread-2;|/home/me/TempFile6.txt Now: Thu Nov 15 10:51:51 SAMT 2012|#]

[#|2012-11-15T10:52:35.456+0400|INFO|glassfish3.1.2|javax.enterprise.system.std.com.sun.enterprise.server.logging|_ThreadID=51;_ThreadName=Thread-2;|/home/me/TempFile7.txt Now: Thu Nov 15 10:52:35 SAMT 2012|#]

[#|2012-11-15T10:53:19.155+0400|INFO|glassfish3.1.2|javax.enterprise.system.std.com.sun.enterprise.server.logging|_ThreadID=51;_ThreadName=Thread-2;|/home/me/TempFile8.txt Now: Thu Nov 15 10:53:19 SAMT 2012|#]

[#|2012-11-15T10:54:02.616+0400|INFO|glassfish3.1.2|javax.enterprise.system.std.com.sun.enterprise.server.logging|_ThreadID=51;_ThreadName=Thread-2;|/home/me/TempFile9.txt Now: Thu Nov 15 10:54:02 SAMT 2012|#]



По логам видно, что по крайней мере всё работает больше 120 секунд и ничего не отваливается, никаких исключений и никаких TimeOut'ов нет.
...
Рейтинг: 0 / 0
Можно ли через MessageDrivenBean выполнять какие-то длительные операции?
    #38039314
IgorKonovalov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Niky4000,

Да и не будет у Вас таймаута с Auto-acknowledge. Порочная эта практика в mdm что-то долгоиграющее запихивать.
...
Рейтинг: 0 / 0
Можно ли через MessageDrivenBean выполнять какие-то длительные операции?
    #38039354
Niky4000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да и не будет у Вас таймаута с Auto-acknowledge. Порочная эта практика в mdm что-то долгоиграющее запихивать.
А куда что-то "долгоиграющее" запихивать?
Идея что-то "долгоиграющее" вот в это запихивать:
Код: sql
1.
@Schedule(hour="*/1", minute="*/2", second="10")


Мне не нравится.
А во что ещё можно запихнуть что-то "долгоиграющее", если это "долгоиграющее" принципиально существует?
...
Рейтинг: 0 / 0
Можно ли через MessageDrivenBean выполнять какие-то длительные операции?
    #38039421
IgorKonovalov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Можно создавать свои потоки причем вполне по феншую с WorkManager-ами, Work-ами и пулами. Ипусть булькают в низком приоритете.
...
Рейтинг: 0 / 0
Можно ли через MessageDrivenBean выполнять какие-то длительные операции?
    #38039479
Niky4000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Можно создавать свои потоки причем вполне по феншую с WorkManager-ами, Work-ами и пулами. Ипусть булькают в низком приоритете.
А по подробнее...
Просто Message Driven Bean выполняется, по всей видимости, в высоком приоритете и сервер не тормознёшь, пока они не завершат своё выполнение.
...
Рейтинг: 0 / 0
Можно ли через MessageDrivenBean выполнять какие-то длительные операции?
    #38039526
OOsalivan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Niky4000Можно создавать свои потоки причем вполне по феншую с WorkManager-ами, Work-ами и пулами. Ипусть булькают в низком приоритете.
А по подробнее...
Просто Message Driven Bean выполняется, по всей видимости, в высоком приоритете и сервер не тормознёшь, пока они не завершат своё выполнение.

Какой смысл в EJB собственные потоки городить? это противоречит идеологии.

Уже говорили что подобные ситуации решаются асинхронными бинами .
...
Рейтинг: 0 / 0
Можно ли через MessageDrivenBean выполнять какие-то длительные операции?
    #38039873
IgorKonovalov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
OOsalivan,

Полностью согласен, но это если 3.1 есть.
...
Рейтинг: 0 / 0
Можно ли через MessageDrivenBean выполнять какие-то длительные операции?
    #38042668
Niky4000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Какой смысл в EJB собственные потоки городить? это противоречит идеологии.
Какой ещё идеологии?
Порочная эта практика в mdm что-то долгоиграющее запихивать.
А какова тогда их сфера применения? Ведь небольшие недолгие операции можно при помощи Stateless легко решить.

Мне нужно запустить процесс, который может выполняться довольно-таки долго, например, час или день.
Message Driven Bean для меня самое то, единственное неудобство в том, что пока он не отработает сервер тормознуть невозможно штатным образом, например, это может понадобиться в процессе отладки или разработки.
Попробую посмотреть что такое эти асинхронные бины и что с ними делать можно...
...
Рейтинг: 0 / 0
Можно ли через MessageDrivenBean выполнять какие-то длительные операции?
    #38042693
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Niky4000Мне нужно запустить процесс, который может выполняться довольно-таки долго, например, час или день.
найди такой процесс.
Если это СУБД, то боюсь это противоречит её идеологии)))). Тут уже СУБД отвалится по таймауту.
Т.е. найди жизненный пример.
...
Рейтинг: 0 / 0
Можно ли через MessageDrivenBean выполнять какие-то длительные операции?
    #38042717
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.
INFO: Hello!
INFO: Sat Nov 17 20:11:03 SAMT 2012 Hello World! 0
INFO: Hello!
INFO: Sat Nov 17 20:11:14 SAMT 2012 Hello World! 1
INFO: Sat Nov 17 20:11:20 SAMT 2012 Hello World! 0
INFO: Sat Nov 17 20:11:26 SAMT 2012 Hello World! 2
INFO: Sat Nov 17 20:11:32 SAMT 2012 Hello World! 1
INFO: Sat Nov 17 20:11:38 SAMT 2012 Hello World! 3
INFO: Sat Nov 17 20:11:42 SAMT 2012 Hello World! 2
INFO: Sat Nov 17 20:11:50 SAMT 2012 Hello World! 3
INFO: Hello!
INFO: Hello!
INFO: Server shutdown initiated
SEVERE: service exception
java.lang.RuntimeException: ClientAbortException:  java.nio.channels.ClosedChannelException
	at com.sun.enterprise.v3.admin.AdminAdapter.service(AdminAdapter.java:246)
	at com.sun.grizzly.tcp.http11.GrizzlyAdapter.service(GrizzlyAdapter.java:179)
	at com.sun.enterprise.v3.server.HK2Dispatcher.dispath(HK2Dispatcher.java:117)
	at com.sun.enterprise.v3.services.impl.ContainerMapper$Hk2DispatcherCallable.call(ContainerMapper.java:354)
	at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:195)
	at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:849)
	at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:746)
	at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1045)
	at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:228)
	at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137)
	at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104)
	at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90)
	at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:79)
	at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:54)
	at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:59)
	at com.sun.grizzly.ContextTask.run(ContextTask.java:71)
	at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532)
	at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513)
	at java.lang.Thread.run(Thread.java:722)
Caused by: ClientAbortException:  java.nio.channels.ClosedChannelException
	at com.sun.grizzly.tcp.http11.GrizzlyOutputBuffer.doFlush(GrizzlyOutputBuffer.java:439)
	at com.sun.grizzly.tcp.http11.GrizzlyOutputBuffer.flush(GrizzlyOutputBuffer.java:405)
	at com.sun.grizzly.tcp.http11.GrizzlyOutputStream.flush(GrizzlyOutputStream.java:140)
	at com.sun.enterprise.v3.admin.AdminAdapter.service(AdminAdapter.java:243)
	... 18 more
Caused by: java.nio.channels.ClosedChannelException
	at java.nio.channels.spi.AbstractSelectableChannel.register(AbstractSelectableChannel.java:194)
	at java.nio.channels.SelectableChannel.register(SelectableChannel.java:277)
	at com.sun.grizzly.util.OutputWriter.flushChannel(OutputWriter.java:141)
	at com.sun.grizzly.util.OutputWriter.flushChannel(OutputWriter.java:76)
	at com.sun.grizzly.http.SocketChannelOutputBuffer.flushChannel(SocketChannelOutputBuffer.java:417)
	at com.sun.grizzly.http.SocketChannelOutputBuffer.flushBuffer(SocketChannelOutputBuffer.java:489)
	at com.sun.grizzly.http.SocketChannelOutputBuffer.flush(SocketChannelOutputBuffer.java:467)
	at com.sun.grizzly.http.ProcessorTask.action(ProcessorTask.java:1276)
	at com.sun.grizzly.tcp.Response.action(Response.java:268)
	at com.sun.grizzly.tcp.http11.GrizzlyOutputBuffer.doFlush(GrizzlyOutputBuffer.java:434)
	... 21 more

INFO: JMX002: JMXStartupService: Stopped JMXConnectorServer: null




Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
@Stateless
public class NewSessionBean implements NewSessionBeanLocal {

    @Override
    @Asynchronous
    public void some() {
        System.out.println("Hello!");
        for(int j=0;j<4;j++){
            for(int k=0;k<400;k++){
                for(int i=0;i<10000000;i++){
                    String gg="";
                }
            }
        System.out.println((new Date()).toString()+" Hello World! "+j);
        }
    }
}



Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        try {
            newSessionBean.some();
...
....
...
...
        } finally {            
            out.close();
        }
    }




Есть сервлет, который вызывает асинхронный newSessionBean.some(). Если убрать @Asynchronous, то вызов станет синхронным и браузер висит до тех пор, пока newSessionBean.some() не отпустит сервлет.
Что интересно, браузер сразу же отображает страничку, а в логах сервер идут "Hello World".
Я зашёл на страничку с сервлетом 2 раза и запустил 2 асинхронных потока, что видно в логах, которые независимо друг от друга выполняются, потом я запустил ещё 2 потока и тормознул сервер, как видно, мне это, в отличие от Message Driven Bean, ничто сделать не помешало!
Надо бы ещё поэкспериментировать с TimeOut'ами. Есть ли какие-то TimeOut'ы у этих асинхронных бинов.

Ну, вообще выглядит это всё проще. Вызов проще, работает как демон и не надо прописывать никаких ресурсов на сервере, в отличие от Message Driven Bean.
...
Рейтинг: 0 / 0
Можно ли через MessageDrivenBean выполнять какие-то длительные операции?
    #38042768
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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.
INFO: Hello!
INFO: Sat Nov 17 20:11:03 SAMT 2012 Hello World! 0
INFO: Hello!
INFO: Sat Nov 17 20:11:14 SAMT 2012 Hello World! 1
INFO: Sat Nov 17 20:11:20 SAMT 2012 Hello World! 0
INFO: Sat Nov 17 20:11:26 SAMT 2012 Hello World! 2
INFO: Sat Nov 17 20:11:32 SAMT 2012 Hello World! 1
INFO: Sat Nov 17 20:11:38 SAMT 2012 Hello World! 3
INFO: Sat Nov 17 20:11:42 SAMT 2012 Hello World! 2
INFO: Sat Nov 17 20:11:50 SAMT 2012 Hello World! 3
INFO: Hello!
INFO: Hello!
INFO: Server shutdown initiated
SEVERE: service exception
java.lang.RuntimeException: ClientAbortException:  java.nio.channels.ClosedChannelException
	at com.sun.enterprise.v3.admin.AdminAdapter.service(AdminAdapter.java:246)
	at com.sun.grizzly.tcp.http11.GrizzlyAdapter.service(GrizzlyAdapter.java:179)
	at com.sun.enterprise.v3.server.HK2Dispatcher.dispath(HK2Dispatcher.java:117)
	at com.sun.enterprise.v3.services.impl.ContainerMapper$Hk2DispatcherCallable.call(ContainerMapper.java:354)
	at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:195)
	at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:849)
	at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:746)
	at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1045)
	at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:228)
	at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137)
	at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104)
	at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90)
	at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:79)
	at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:54)
	at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:59)
	at com.sun.grizzly.ContextTask.run(ContextTask.java:71)
	at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532)
	at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513)
	at java.lang.Thread.run(Thread.java:722)
Caused by: ClientAbortException:  java.nio.channels.ClosedChannelException
	at com.sun.grizzly.tcp.http11.GrizzlyOutputBuffer.doFlush(GrizzlyOutputBuffer.java:439)
	at com.sun.grizzly.tcp.http11.GrizzlyOutputBuffer.flush(GrizzlyOutputBuffer.java:405)
	at com.sun.grizzly.tcp.http11.GrizzlyOutputStream.flush(GrizzlyOutputStream.java:140)
	at com.sun.enterprise.v3.admin.AdminAdapter.service(AdminAdapter.java:243)
	... 18 more
Caused by: java.nio.channels.ClosedChannelException
	at java.nio.channels.spi.AbstractSelectableChannel.register(AbstractSelectableChannel.java:194)
	at java.nio.channels.SelectableChannel.register(SelectableChannel.java:277)
	at com.sun.grizzly.util.OutputWriter.flushChannel(OutputWriter.java:141)
	at com.sun.grizzly.util.OutputWriter.flushChannel(OutputWriter.java:76)
	at com.sun.grizzly.http.SocketChannelOutputBuffer.flushChannel(SocketChannelOutputBuffer.java:417)
	at com.sun.grizzly.http.SocketChannelOutputBuffer.flushBuffer(SocketChannelOutputBuffer.java:489)
	at com.sun.grizzly.http.SocketChannelOutputBuffer.flush(SocketChannelOutputBuffer.java:467)
	at com.sun.grizzly.http.ProcessorTask.action(ProcessorTask.java:1276)
	at com.sun.grizzly.tcp.Response.action(Response.java:268)
	at com.sun.grizzly.tcp.http11.GrizzlyOutputBuffer.doFlush(GrizzlyOutputBuffer.java:434)
	... 21 more

INFO: JMX002: JMXStartupService: Stopped JMXConnectorServer: null




Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
@Stateless
public class NewSessionBean implements NewSessionBeanLocal {

    @Override
    @Asynchronous
    public void some() {
        System.out.println("Hello!");
        for(int j=0;j<4;j++){
            for(int k=0;k<400;k++){
                for(int i=0;i<10000000;i++){
                    String gg="";
                }
            }
        System.out.println((new Date()).toString()+" Hello World! "+j);
        }
    }
}



Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        try {
            newSessionBean.some();
...
....
...
...
        } finally {            
            out.close();
        }
    }




Есть сервлет, который вызывает асинхронный 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 часа,завели специальную очередь для него.
...
Рейтинг: 0 / 0
Можно ли через MessageDrivenBean выполнять какие-то длительные операции?
    #38042796
Niky4000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Речь не может идти о продакшен сервере - так как на продакшен недопустиммо пускать непротестированный код, а если речь идет о локальном сервере или тестовом - команда 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.
INFO: Enterprise was successfully deployed in 1,315 milliseconds.
INFO: Hello!
INFO: Sat Nov 17 20:33:18 SAMT 2012 Hello World! 1
......
......
INFO: Sat Nov 17 21:41:00 SAMT 2012 Hello World! 1000
INFO: Server shutdown initiated
INFO: JMX002: JMXStartupService: Stopped JMXConnectorServer: null
INFO: JMX001: JMXStartupService and JMXConnectors have been shut down.
INFO: Shutdown procedure finished


Час отработал.
Ну, да в принципе, этот способ даже лучше, чем mdb, так как у mdb есть ещё какая-то заморочка с передачей объектов - там как-то это всё замороченней, чем с асинхронным session bean.
...
Рейтинг: 0 / 0
Можно ли через MessageDrivenBean выполнять какие-то длительные операции?
    #38042804
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Niky4000А почему это СУБД отвалится. Я, например, как-то писал хранимую процедуру, которая может неделю работать. Ничего не отваливалось.
я о чем и говорю.
Делают хранимку "Закрытеи оперДня" - запускают её АСИНХРОННО с клиента. После запуска в СУБД висит процесс. СУБД работает. А коннект с клиентом не нужен. И твой процесс на трое суток НЕ НУЖЕН.
...
Рейтинг: 0 / 0
Можно ли через MessageDrivenBean выполнять какие-то длительные операции?
    #38042814
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл никТак вот ночью, когда самая маленькая загрузка у нас шедулится процесс -RecommendationProcess - именно как MDB
+1
этот вариант, если БЛ не в ХП в СУБД, а на АппСервере. Длинный процесс из 4 часов состоит из бизнес-транзакций на одного юзверя. Поэтому всё логично.
Чем аффтатру не подходит - я не понял.
...
Рейтинг: 0 / 0
Можно ли через MessageDrivenBean выполнять какие-то длительные операции?
    #38042821
IgorKonovalov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
какой ужас... процедур работающие неделями... mdb запускаете на сутки. Может вам java только мешает своими "идеалогиями"?
...
Рейтинг: 0 / 0
Можно ли через MessageDrivenBean выполнять какие-то длительные операции?
    #38205023
arkk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ИМХО

"Длинные операции" лучше выполнять средствами СУБД (в Oracle для этого есть dbms_scheduler) и там же сохранить результат (например в табличку в поле с типом CLOB).
...
Рейтинг: 0 / 0
Можно ли через MessageDrivenBean выполнять какие-то длительные операции?
    #38205063
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
arkk"Длинные операции" лучше выполнять средствами СУБД
С чего бы это?
...
Рейтинг: 0 / 0
48 сообщений из 48, показаны все 2 страниц
Форумы / Java [игнор отключен] [закрыт для гостей] / Можно ли через MessageDrivenBean выполнять какие-то длительные операции?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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