2016-10-07 5 views
1

Nous avons un client qui utilise notre jnlp pour ouvrir une application. Dans ce fichier .jnlp, il y a 30 ressources à télécharger (par exemple <jar href="https://url/to/resource.jar" download="lazy"/>). Nous pouvons noter (via netstat -ano) que de nombreuses connexions sont ouvertes lorsque jnlp est exécuté.

Dans notre application, nous avons du code qui télécharge des fichiers et au milieu de son exécution, l'exception BindException: Address already in use est levée lorsque nous essayons d'appeler HttpURLConnection#getInputStream(). Et si nous essayons d'ouvrir à nouveau jnlp, notre application n'est même pas exécutée car la même exception est levée (cette fois sur Java Console). Si nous attendons quelques minutes et vérifions les ports, nous pouvons voir qu'ils ont disparu de netstat -ano et là encore nous essayons d'ouvrir avec jnlp et l'erreur se produit à nouveau dans notre application.JNLP ouvrant trop de connexions et causant BindException: Adresse déjà utilisée

Il est important de dire que lorsque l'application est appelée avec java -jar, le problème ne se produit pas (parce que les ressources ne doivent pas nécessairement être téléchargé et aucune connexion sont ouverts).

Ce problème se produit dans SEULEMENT un client, donc il doit être quelque chose lié à leur configuration. Nous avons essayé d'ajouter MaxUserPort avec la valeur 65534 et TcpTimedWaitDelay sans succès. Ce client n'utilise pas de pare-feu, ni d'antivirus, mais ils ont dit que le problème a commencé à se produire dès qu'ils ont migré vers Windows Terminal Server. Leur version Java est 8u101.

Des idées sur ce qui pourrait affecter notre application et un moyen de la résoudre? Toute aide est appréciée.

Snippet de code:

public InputStream connect(String urlToConnect) { 
    URL url = null; 
    InputStream is = null; 

    try { 
     url = new URL(urlToConnect);    
     HttpsURLConnection httpsConnection = (HttpsURLConnection) url.openConnection(); 
     is = httpsConnection.getInputStream(); 
    } catch (IOException e) { 
     URLConnector.logger.error("Could not open connection on URL: "+urlToConnect+" -> "+e); 
    } finally { 
     if(is != null) { 
      try { is.close(); } catch(IOException e){} 
     } 
    } 

    return is; 
} 
+0

demander au client: quelle adresse IP est ce processus tente de se lier lors de l'utilisation serveur Windows Terminal Server? –

Répondre

0

a résolu la modification du Registre qui ouvre les fichiers JNLP: HKCR> JNLPFile> Shell> Ouvrir> Commande. Au lieu de ""C:\Program Files\Java\jre${VERSION}\bin\javaws.exe" "%1"", je ""C:\Program Files\Java\jre${VERSION}\bin\javaws.exe" -J-Dhttp.keepAlive=false "%1""

En savoir plus sur les connexions persistantes en Java peuvent être trouvés here