|
Зависание java URLConnection под Oracle
|
|||
---|---|---|---|
#18+
Может кто сможет помочь... Есть java класс, который хранится в Oracle database... вот код функции.. ------------------------- import java.awt.*; import java.applet.*; import java.lang.*; import java.net.*; import java.util.*; import java.io.*; import oracle.jdbc.*; import java.sql.*; public class Synchronization { public static String retstr = "done"; private final static boolean debug = true; public static byte[] senddata(String p1, String p2) throws Exception{ try { URLConnection conn; URL servlet; conn = null; servlet = null; logText("Start senddata"); try { servlet = new URL(p1); } catch (Exception e){ retstr = "Can't create URL. Error message - " + e.getMessage(); logText(retstr); servlet = null; conn = null; return retstr.getBytes(); } logText("Create URL: " + p1); try { conn = servlet.openConnection(); } catch (Exception e){ retstr = "Can't create Connection. Error message - " + e.getMessage(); logText(retstr); servlet = null; conn = null; return retstr.getBytes(); } logText("Create Connection"); conn.setDoInput(true); conn.setDoOutput(true); conn.setUseCaches(false); conn.setDefaultAllowUserInteraction(true); // Send data to server PrintStream out = new PrintStream(conn.getOutputStream()); out.print(p2); out.flush(); out.close(); // ESSENTIAL for this to work! logText("Send to server: " + p2); int len = conn.getContentLength(); logText("Received Content-Length: " + len); if (len > 0) { InputStream result=conn.getInputStream(); BufferedInputStream in = new BufferedInputStream(result); byte ret_val[] = new byte[4000]; int num = 0; num = in.read(ret_val,0,4000); byte to_oracle[] = new byte[num]; for (int i = 0; i < num; i++) to_oracle[ i ]=ret_val[ i ]; in.close(); result.close(); logText("End senddata"); servlet = null; conn = null; return to_oracle; } else { retstr = "Error!!! 0 length content"; servlet = null; conn = null; return retstr.getBytes(); } } // try catch(Exception exc){ retstr = "Error!!!"; return retstr.getBytes(); } // catch } public static void logText(String text) throws Exception{ if(debug){ System.out.println(text); } } } ------------------------ в двух словах функция должна обратиться к сервлету на другом серваке и POST'ом передать туда строчку, потом получить ответ сервлета и отдать его вызывающей программе.... вызываю функцию из пакета вот так... ------------------------ function f_senddata(p1 in varchar2, p2 in varchar2) return varchar2 as language java name 'Synchronization.senddata(java.lang.String, java.lang.String) return java.lang.String'; procedure p_test is v_str_to_send varchar2(32767) := 'ping'; v_ret_str varchar2(32767); begin v_ret_str := f_senddata(pak_const.c_connection_string, v_str_to_send); if (v_ret_str <> 'OK') then pak_history.p_error('Error Synchronization (ping). String: ' || v_str_to_send || '. Received answer: ' || v_ret_str); end if; EXCEPTION WHEN others THEN pak_history.p_error('Error Synchronization (ping). String: ' || v_str_to_send || '. Received answer: ' || v_ret_str); end; ------------------------ В том, что сервлет, к которому обращается фенкция работает корректно, у меня сомнений нету... Теперь собственно сам вопрос... все работает очень нестабильно... а именно можно 10 раз вызвать процедуру p_test и все будет нормально, но на определенном шаге это дело отправляется в астрал... а именно явавская функция вызывается и все..... в функции выполнение доходит только до посылки данных на сервлет, причем логи сервлета говорят, что к нему никто не обращался... а моя функция при этом спокойно висит и якобы ждет ответа..... может висеть так несколько дней... помогает ее убить только перезагрузка компа... Может кто сможет сказать, где у меня ошибка (кроме как в ДНК:)) Заранее спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.04.2004, 12:23 |
|
|
start [/forum/topic.php?fid=59&fpage=849&tid=2154157]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
62ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
29ms |
get tp. blocked users: |
1ms |
others: | 15ms |
total: | 148ms |
0 / 0 |