powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Можно ли через MessageDrivenBean выполнять какие-то длительные операции?
23 сообщений из 48, страница 2 из 2
Можно ли через 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
23 сообщений из 48, страница 2 из 2
Форумы / Java [игнор отключен] [закрыт для гостей] / Можно ли через MessageDrivenBean выполнять какие-то длительные операции?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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