2009-11-16 8 views
1

Commons Net FTPClient 클래스를 사용하여 주기적으로 FTP 사이트를 폴링하고 파일을 다운로드하려고합니다. 때로는 스레드가 사이트에서 읽으려고 할 때 무기한으로 블로킹하고 다른 누군가가이 문제를 겪고 어떤 해결 방법을 제공 할 수 있는지 궁금해했습니다.Commons Net FTPClient가 읽기 차단시 감지하지 못하도록 차단합니다.

나는 의 retrieveFileStream(String) 메서드를 사용하여 InputStream에 대한 핸들을 얻었습니다.이 핸들을 읽으려고 시도합니다. 아래는 차단 된 스레드의 부분 스택 추적입니다.

"FTP File Poll Thread" prio=10 tid=0x083b0800 nid=0x6324 runnable [0x65b5b000..0x65b5beb0] 
    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.read(BufferedInputStream.java:237) 
     - locked <0x5c851928> (a java.io.BufferedInputStream) 
     at java.io.FilterInputStream.read(FilterInputStream.java:66) 
     at java.io.PushbackInputStream.read(PushbackInputStream.java:122) 
     at org.apache.commons.net.io.FromNetASCIIInputStream.__read(FromNetASCIIInputStream.java:75) 
     at org.apache.commons.net.io.FromNetASCIIInputStream.read(FromNetASCIIInputStream.java:170) 
     at java.io.FilterInputStream.read(FilterInputStream.java:116) 
+0

이것은 Java에서 I/O를 차단하는 일반적인 문제이며이를 피하거나 스레드를 죽일 수있는 방법이 없다는 사실입니다. – skaffman

+0

그게 내가 생각한거야 :-(나는 어딘가에 비 차단 FTP 클라이언트가 있기를 바랬다. – Adamski

답변

0

내가 여기 사용하여 끝난 kludge은 FTP 작업이 X 초보다 더 오래 걸렸다 경우 경고를 발생하는 작업을 예약하는 것이 었습니다. 나는 실제로 Sourceforge에서 javanioftp을 찾았지만 제 상황에서는 클라이언트를 스위칭하는 데 드는 개발 오버 헤드를 보장하지 않습니다.

0

java.io가 차단되면 java.nio 패키지를 사용해야합니다. httpn과 ftp를 절대로 사용하지는 않았지만, http가 java.nio와 함께 작동 할 수 있기 때문에 작동해야한다고 가정합니다.

안부