2011-01-09 19 views
1

Ich habe ein Problem mit APEX. Wir haben zwei Server. Ein (mit laufendem Oracle APEX) ist der Hochschulserver, auf den wir nur Zugriff auf den Arbeitsbereich haben. Der andere ist mein Linux-Computer zu Hause, der als Server fungiert (Tomcat mit Jasperreports-Container läuft). Ich möchte eine UTL_HTTP-Anfrage von der APEX-Maschine an die Jasperreports-Maschine senden. Es gibt eine Taste, die einen Prozess mit folgendem Code löst:Problem mit UTL_HTTP-Paket in Oracle APEX

 
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; 

Nach 20 bis 30 Sekunden, nachdem ich den Auslöseknopf gedrückt ich folgende Fehlernachricht erhalten:

ORA-29273: HTTP request failed ORA-06512 : bei "SYS.UTL_HTTP", Zeile 1029 ORA-12535: TNS: Zeitüberschreitung der Operation

Ich habe die Funktion set_report_url überprüft, indem ich eine gemeinsame URL gesetzt habe. Und es hat funktioniert. Hat jemand eine Ahnung?

Vielen Dank im Voraus, Haniball

Antwort

1

Letztere Version von Oracle haben Netzwerk-ACL-Sicherheit, es könnte so sein, dass der Schemabesitzer nicht Rechte verfügt, dass bestimmte URL zuzugreifen. Allerdings würde ich eine Sicherheitsverletzung dafür erwarten.

Eine weitere Alternative besteht darin, dass sie durch eine Firewall zwischen dem Datenbankserver und Ihrem Heimcomputer blockiert wird. Es ist möglich (wahrscheinlich), dass der Datenbankserver so eingerichtet wurde, dass nur eine kleine Liste von Sites (oder gar keiner) darauf zugegriffen werden kann. Möglicherweise verfügen Sie auch über eine Firewall auf Ihrem Heimcomputer, die den Zugriff von Computern verhindert, die sich nicht in einer Liste von IP-Adressen/Bereichen befinden.

Probieren Sie einige grundlegende UTL_HTTP-Aktionen für eine Vielzahl von Websites aus (z. B. die google.com-Homepage) und sehen Sie, welche Antwort Sie erhalten.


Verpasste die offensichtliche UTL_HTTP.set_transfer_timeout. Es kann sein, dass der Job am Heimatserver etwas zu lange dauert.

+1

Kann nicht ACL sein, weil es eine entsprechende Fehlermeldung gibt. –

Verwandte Themen