Question

I'm using the Commons Net FTPClient class to periodically poll an ftp site and attempt to download a file. Occasionally the thread is blocking indefinitely when trying to read from the site and I wondered if anyone else had encountered this problem and could offer any workarounds?

I'm using FTPClient's retrieveFileStream(String) method to get a handle to an InputStream, which I then attempt to read from. Below is a partial stack trace of the blocked thread.

"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)
Was it helpful?

Solution 2

The kludge I ended up using here was to schedule a task to raise an alert if the FTP operation took longer than X seconds. I did actually find javanioftp on Sourceforge but in my situation it doesn't warrant the development overhead in switching clients.

OTHER TIPS

java.io is blocking, you need to use the java.nio package. Never used ftp with java.nio, but assume it must work because http can work with java.nio.

Regards

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top