Проблема с пакетом UTL_HTTP в Oracle APEX - PullRequest
1 голос
/ 09 января 2011

У меня проблема с APEX. У нас есть два сервера. Один (с запущенным Oracle APEX) - это университетский сервер, доступ к которому у нас есть только в рабочей области. Другой - мой Linux-компьютер дома, который действует как сервер (работает Tomcat с контейнером Jasperreports). Я хочу отправить запрос UTL_HTTP с машины APEX на машину Jasperreports. Есть кнопка, которая запускает процесс со следующим кодом:

 begin
  xlib_jasperreports.set_report_url('http://X.X.X.X:8080/JasperReportsIntegration/report');
  xlib_jasperreports.show_report (p_rep_name => :p5_rep_name,
                                  p_rep_format => :p5_rep_format,
                                  p_data_source => :p5_data_source,
                                  p_out_filename => :p5_out_filename,
                                  p_rep_locale => :p5_rep_locale,
                                  p_rep_encoding => :p5_rep_encoding,
                                  p_additional_params => :p5_additional_params);

  -- stop rendering of the current APEX page
  apex_application.g_unrecoverable_error := true;
end;

Через 20-30 секунд после нажатия кнопки запуска я получаю следующее сообщение об ошибке:

ORA-29273: сбой HTTP-запроса ORA-06512: в «SYS.UTL_HTTP», строка 1029 ORA-12535: TNS: тайм-аут операции

Я проверил функцию set_report_url, установив общий URL. И это сработало. У кого-нибудь есть подсказка?

Спасибо заранее, Haniball

1 Ответ

1 голос
/ 10 января 2011

Последняя версия Oracle имеет безопасность сетевого ACL, поэтому может случиться так, что у владельца схемы нет прав доступа к этому конкретному URL. Однако я ожидаю нарушения безопасности для этого.

Другая альтернатива заключается в том, что он блокируется межсетевым экраном между сервером базы данных и вашей домашней машиной. Возможно (вероятно), что компьютер сервера баз данных был настроен так, чтобы разрешить доступ только к небольшому списку сайтов (или вообще ни к одному). На домашней машине также может быть установлен брандмауэр, который запрещает доступ с компьютеров, не включенных в список IP-адресов / диапазонов.

Попробуйте выполнить некоторые базовые действия UTL_HTTP в отношении различных сайтов (например, домашней страницы google.com) и посмотрите, какой ответ вы получите.


Пропущено очевидное UTL_HTTP.set_transfer_timeout. Может случиться так, что работа на домашнем сервере занимает слишком много времени.

...