Détecter ou prévenir Commons Net ClientFTP de bloquer lors de la lecture
-
20-09-2019 - |
Question
J'utilise la classe Commons Net FTPClient
au sondage périodiquement un site ftp et tenter de télécharger un fichier. De temps en temps le fil bloque indéfiniment en essayant de lire à partir du site et je me demandais si quelqu'un d'autre avait rencontré ce problème et pourrait offrir aucune solution de contournement?
J'utilise la méthode de FTPClient
de retrieveFileStream(String)
pour obtenir une poignée à un InputStream, que je tente alors de lire. Ci-dessous une trace de la pile partielle du fil bloqué.
"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)
La solution 2
Le bidouille je me suis retrouvé à l'aide ici était de planifier une tâche à déclencher une alerte si l'opération FTP a pris plus de temps que X secondes. Je ne trouve en fait javanioftp sur Sourceforge, mais dans ma situation, il ne justifie pas les frais généraux de développement dans la commutation clients.
Autres conseils
java.io bloque, vous devez utiliser le package java.nio. Jamais utilisé ftp avec java.nio, mais supposons qu'il faut travailler parce que http peut travailler avec java.nio.
Cordialement