Réglage du délai de connexion pour FtpClient
Lors de l'utilisation de ftpClient.connect
avec un host qui n'a pas de service ftp actif, le délai d'attente se produit seulement après 5 minutes, ce qui est beaucoup trop long.
J'ai essayé le réglage de divers délais d'attente (setDefaultTimeout, setDataTimeout) qui n'a pas changer quoi que ce soit.
FtpClient
hérite de SocketClient
qui a un setConnectTiemout méthode, mais quand je l'utilise, je reçois un java.lang.NoSuchMethodError: org/apache/commons/net/ftp/FTPClient.setConnectTimeout
lors de l'exécution. Ce qui semble être à cause de certains J2SW 1.2 compatibilité, comme décrit à la chambre des Communes-net FAQ:
Q: Comment puis-je définir un délai d'expiration de connexion? http://wiki.apache.org/commons/Net/FrequentlyAskedQuestions
Ils suggèrent de mettre en œuvre un SocketFactory
la création d'objets à partir d'une étendue classe Socket à l'aide d'un délai spécifique. Toutefois, lorsque vous essayez d'utiliser ftpClient.setSocketFactory
j'ai aussi une java.lang.NoSuchMethodError
.
Toute aide comment je peux réduire le délai de connexion?
Since Commons Net 1.2.x has a J2SE 1.2 compatibility requirement, the ability to specify a connect timeout is not included.
sens que les Communes Net 1.2.x les bibliothèques n'ont pas les fonctionnalités souhaitées. Avez-vous besoin spécifiquement que l'ancienne version de bibliothèque? Sinon, essayez plus récente ou la plus récente version de celui-ci par exemple Commons Net 3.1 - là FTPClient
classe a setConnectTimeout
méthode en train de faire exactement ce dont vous avez besoin comme mentionné dans la réponse(s) ci-dessous.J'utilise FTPClient 3.1, mon Eclipse montre pas d'erreurs, mais après le déploiement sur le serveur d'application, il donne l'mentionnées erreurs. Mavne construire pom.xml a l'identique de la dépendance de la version, et le fichier ear comprend le bon pot.
C'est vraiment étrange, car cela devrait fonctionner... Avez-vous essayé la connexion à partir de simples
public static void main(String[] args)
méthode de sous Eclipse? Peut-être que le problème est dans le serveur d'application: il peut fournir une version plus ancienne de Communes Net de la bibliothèque et de l'application déployée peut utiliser FTPClient à partir de là ...Oui, cela fonctionne. Ceci est en cours d'exécution dans weblogic 10.3.5. Peut-être qu'il est un ancien communes-net dans le classpath en quelque sorte inclus par weblogic lui-même qui a la priorité?
Répondu en réponse
OriginalL'auteur stracktracer | 2012-06-11
Vous devez vous connecter pour publier un commentaire.
Bien qu'il y est de solution possible pour que les anciennes version de Communes Net de la bibliothèque, je suggère de comprendre pourquoi une mauvaise version de Communes Net est utilisée. Pour ce faire, vous pouvez inclure le code suivant à l'endroit où
FTPClient
est utilisé dans votre webapp:Dans le cas où si
FTPClient
est chargé, parjava.net.URLClassLoader
alors il peut obtenir plus compliqué à vérifier le chemin de la classe, mais il ne devrait pas être un problème.Espère que cela aide...
Hum, c'est étrange. N'a jamais travaillé avec weblogic, mais il semble que suite à la question/réponse est proche de ce que vous avez besoin de: stackoverflow.com/questions/3376046/...
En effet, certains travaux spécifiques est due à définir la priorité d'un conflit de classes pour le chargeur de classe donc groupés sont chargés en premier.
OriginalL'auteur Yuriy Nakonechnyy
Il doit être dans la façon dont votre appel de la setConnectTimeout, parce qu'il n'existe pas. setConnectTimeout n'est pas un appel statique, vous devez appeler une fois que vous allouer le FTPClient de l'objet et de faire le jeu avant de le connecter.
Doit être votre installation. Je suis à l'aide de la commons-net-3.0.1.jar. Je l'ai essayé dans eclipse. Vous voudrez peut-être vérifier et assurez-vous que vous n'avez pas un vieux fichier jar être chargé en premier.
OriginalL'auteur Mike
De Apache docs:
OriginalL'auteur Ilya Gazman