powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Oracle APEX [игнор отключен] [закрыт для гостей] / APEX не дожидается ответа от сервера
7 сообщений из 7, страница 1 из 1
APEX не дожидается ответа от сервера
    #37406131
_dmt_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте.
Проблема такая: Есть процедура, которая с помощью Apache POI обрабатывает данные xls таблицы. Через Oracle SQL Developer запускаю эту процедуру, обрабатывая файл размером 10МБ - работает нормально. Запускаю ту же процедуру, но размер файла уже составляет 100МБ - работает нормально.
А теперь то же самое, но процедуру пихаю в процесс, а процесс вешаю на Submit кнопку в APEX-е. 10МБ обрабатываются абсолютно так же и после выполнения процедуры я получаю ответ о том, что строки обработаны. А вот при обработке файла размером 100МБ ответ не приходит (процесс загрузки просто виснет). Параллельно с выполнением процесса, сделал select * from data_input (таблица, в которой хранятся обработаные данные) и оказалось, что все строчки уже успешно обработались, но загрузка так и не прекратилась.
Пробовал запускать ту же процедуру в APEX-е с помощью AJAX, думал, это поможет. Но эффект тот же - строки обрабатываются, но клиент ответа от сервера не дожидается. Просьба помочь разобраться.

Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bi
Версия APEX 3.2.1.00.12
...
Рейтинг: 0 / 0
APEX не дожидается ответа от сервера
    #37406146
_dmt_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
P.S. файл размером 100МБ через oracle sql developer обрабатывается около 30 минут.
Apex тоже обработал примерно за 30 минут (ну если только чуть-чуть дольше), но сказать об этом он мне и через 2 часа не удосужился.
...
Рейтинг: 0 / 0
APEX не дожидается ответа от сервера
    #37406242
haXbat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_dmt_,

А через APEX_PLSQL_JOB пробовали?
...
Рейтинг: 0 / 0
APEX не дожидается ответа от сервера
    #37406262
_dmt_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
haXbat,

А в чем смысл? Мне не нужно продолжать работу с приложением во время выполнения процесса, как раз наоборот. Мне нужно чтобы пользователь 1 раз нажал на кнопку, ушел курить и через N-ое количество времени получил 1 ответ "я выполнился". Не понимаю смысла использования APEX_PLSQL_JOB. Если я не прав, просветите. Сразу скажу, что лишние кнопки типа "проверить статус загрузки" не могут быть использованы.
...
Рейтинг: 0 / 0
APEX не дожидается ответа от сервера
    #37406637
SvUser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Простое решение: выполняйте JOB и делайте logout ил подкрутите схему авторизации
Более сложное решение: выполняйте JOB и поищите какой-ибудь скрипт, например на jQuery (в инете дофига должно быть), который блокирует страницу, + через dynamic action можно пускать ajax запросы с проверкой статуса этого Jobа, и если выполнен запускайте скрипт разблокировки.

Впрочем, насчет подкрутить timeout, тоже можно попробовать поискать, но не сталкивался.
...
Рейтинг: 0 / 0
APEX не дожидается ответа от сервера
    #37407977
haXbat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_dmt_,

С APEX_PLSQL_JOB отпадают проблемы закрытия браузера/перезагрузки компьютера пользователем: всегда можно проверить статус джоба. Для таких долгих процессов я бы еще добавил оповещение через email об успешном/не успешном завершении.
...
Рейтинг: 0 / 0
APEX не дожидается ответа от сервера
    #37410229
_dmt_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем спасибо, проблема решена с помощью APEX_PLSQL_JOB.
Вот код header-а, если кому-то понадобится:

Код: plaintext
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.
<script type="text/javascript" src="#APP_IMAGES#jquery-1.6.2.min.js"></script>
<script type="text/javascript" src="#APP_IMAGES#jquery-ui-1.8.16.custom.min.js"></script>
<script language="JavaScript" type="text/javascript">
$( function() {
  $('#msgRegion').dialog(
    {
     modal : true ,
     autoOpen : false ,
     height:  300 ,
     width:  400 
    });
});

v_a =  10 ;

function check()
{ 
  var aReq =  new  apex.ajax.ondemand('check_job_status', 
                                   function(){
                                      if  (p.readyState ==  4 ) { 
                                        if  (p.responseText=="0"){
 vReq._get();
 window.location = "f?p=&APP_ID.:2:&SESSION.::NO"
                                        $('#msgRegion').html("<b>Загрузка произведена успешно.</b>"); 
                                        $('#msgRegion').dialog("option","buttons", {
                                             "Закрыть": function() {
                                            $('#msgRegion').dialog('close');  
                                                       } 
                                              }            
                                         );
                                       }     
                                        else {
                                         $("#msgRegion").html("<p><b>Статус: "+p.responseText+" ("+v_a+" Секунд прошло). Пожалуйста, дождитесь завершения процесса загрузки."+"</b></p><p align=center><img src='#APP_IMAGES#loading_animation.gif'></p>");  
$( "#progressbar" ).progressbar( "value" ,v_a)
v_a = v_a + 10 ;     
                                       }
                                       
                                      }
                                       });
  aReq._get();
}

function sync(){
$('#msgRegion').dialog('open');
$('#msgRegion').html("<p>Производится загрузка файла на сервер. Данная процедура может занять длительный промежуток времени. Пожалуйста, дождитесь окончания процесса загрузки.</p><p align=center><img src='#APP_IMAGES#loading_animation.gif'></p>");
setInterval(check, 10000 );
}

</script>

А вот код процесса check_job_status:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
DECLARE
v_stat VARCHAR2( 200 );
BEGIN
SELECT SYSTEM_STATUS into v_stat from APEX_PLSQL_JOBS WHERE STATUS = :P2_FILE_ID;
IF(v_stat = 'COMPLETE') THEN
htp.prn('0');
ELSE
htp.prn(v_stat);
END IF;
EXCEPTION WHEN OTHERS THEN
htp.prn(sqlerrm);
END;

P.S. при создании джобы, я кладу ID файла в колонку STATUS, хотя по-хорошему надо просто передавать параметром номер джобы, но в моем случае мне удобнее работать через ID файла.
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Oracle APEX [игнор отключен] [закрыт для гостей] / APEX не дожидается ответа от сервера
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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