Обнаружение или предотвращение блокировки Commons Net FTPClient при чтении - PullRequest
1 голос
/ 16 ноября 2009

Я использую класс Commons Net FTPClient, чтобы периодически опрашивать FTP-сайт и пытаться загрузить файл. Иногда поток блокируется на неопределенный срок при попытке чтения с сайта, и я спрашиваю себя, не сталкивался ли кто-нибудь еще с этой проблемой и не мог бы предложить какие-либо обходные пути?

Я использую 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)

Ответы [ 2 ]

0 голосов
/ 17 ноября 2009

Клудж, который я здесь использовал, заключался в том, чтобы запланировать задачу для выдачи предупреждения, если операция FTP заняла больше X секунд. На самом деле я нашел javanioftp в Sourceforge, но в моей ситуации это не оправдывает затраты на переключение клиентов.

0 голосов
/ 16 ноября 2009

java.io блокирует, вам нужно использовать пакет java.nio. Никогда не использовал ftp с java.nio, но предположим, что он должен работать, потому что http может работать с java.nio.

Привет

...