Mam wątek uruchomiony pod tomcat, który tworzy HttpUrlConnection i odczytuje go przez BufferedInputStream.HttpURLConnection się blokuje
Po pobraniu danych dla niektórych adresów URL przestaje działać. Mam jstack procesu, który mówi, że HttpUrlConnection jest zablokowany i BufferedInputStream jest również zablokowany.
"http-8080-1" daemon prio=10 tid=0x08683400 nid=0x79c9 runnable [0x8f618000]
java.lang.Thread.State: RUNNABLE
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.read(SocketInputStream.java:129)
at java.io.BufferedInputStream.fill(BufferedInputStream.java:218)
at java.io.BufferedInputStream.read1(BufferedInputStream.java:258)
at java.io.BufferedInputStream.read(BufferedInputStream.java:317)
- locked <0x956ef8c0> (a java.io.BufferedInputStream)
at sun.net.www.http.HttpClient.parseHTTPHeader(HttpClient.java:687)
at sun.net.www.http.HttpClient.parseHTTP(HttpClient.java:632)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1072)
- locked <0x956ef910> (a sun.net.www.protocol.http.HttpURLConnection)
Czy ktoś może pomóc tutaj. Dzięki
Z logu wynika, że czyta z jakiegoś adresu URL Xyz. Próbowałem z wget i mogłem szybko uzyskać odpowiedź. Nie jestem pewien, z jakiego powodu byłby bloku read(). Jeszcze jedno, zaimportowałem 'java.net.HttpURLConnection', ale ślad stosu pokazuje inny pakiet. Jakaś wskazówka? – Nayn
Proponuję wypróbowanie klienta HTTP Apache'a: http://hc.apache.org/httpclient-3.x/ zamiast Sun's. Nie mam doświadczenia z żadną z nich, ale niektóre szybkie poszukiwania sugerują, że Apache jest znacznie lepszy. – nojo
@Nayn: "Innym pakietem" w stosie śledzenia jest wewnętrzna implementacja Sun. – talonx