Je dois désactiver IPv6. Pour cela, la documentation Java indique la définition de la propriété jvm Java.net.preferIPv4Stack=true
.
Mais je ne comprends pas comment le faire à partir du code lui-même.
De nombreux forums l'ont démontré à partir de l'invite de commande, mais je dois le faire au moment de l'exécution.
Vous pouvez utiliser System.setProperty("Java.net.preferIPv4Stack" , "true");
Ceci équivaut à le passer en ligne de commande via -Djava.net.preferIPv4Stack=true
Une autre approche, si vous êtes désespéré et n’avez pas accès à (a) le code ou (b) à la ligne de commande, vous pouvez utiliser des variables d’environnement:
http://docs.Oracle.com/javase/7/docs/webnotes/tsg/TSG-Desktop/html/plugin.html .
Spécifiquement pour Java Web start, définissez la variable d’environnement:
JAVAWS_VM_ARGS
et pour les applets:
_JPI_VM_OPTIONS
par exemple.
_JPI_VM_OPTIONS = -Djava.net.preferIPv4Stack = true
De plus, sous Windows, les options globales (pour les applications Java générales) peuvent être définies dans la page Plan de contrôle Java sous l'onglet "Java".
J'ai rencontré ce problème même en essayant d'envoyer du courrier avec javax.mail à partir d'une application Web sur un serveur Web exécutant Java 7. Les destinations des serveurs de messagerie internes ont échoué avec "réseau inaccessible", malgré le fonctionnement de telnet et de ping à partir du même hôte les serveurs de messagerie ont fonctionné. j'ai essayé
System.setProperty("Java.net.preferIPv4Stack" , "true");
dans le code, mais cela a échoué. La valeur du paramètre a donc probablement été mise en cache auparavant par le système. Définition de l'argument VM
-Djava.net.preferIPv4Stack=true
dans le script de démarrage du serveur Web a travaillé.
Un autre élément de preuve: dans un très petit programme de test ciblé, définir la propriété système dans le code a fait a fonctionné. Ainsi, le paramètre est probablement mis en cache lorsque le premier Socket est utilisé, probablement pas au démarrage de la machine virtuelle Java.
bien,
J'ai utilisé System.setProperty("Java.net.preferIPv4Stack" , "true");
et cela fonctionne à partir de Java, mais cela ne fonctionne pas sur JBOSS AS7.
Voici ma solution de contournement,
Ajoutez la ligne ci-dessous à la fin du fichier $ {JBOSS_HOME} /bin/standalone.conf.bat (juste après :Java_OPTS_SET
)
set "Java_OPTS=%Java_OPTS% -Djava.net.preferIPv4Stack=true"
Remarque: redémarrez le serveur JBoss
System.setProperty ne fonctionne pas pour les applets. Parce que JVM en cours d'exécution avant le démarrage de l'applet. Dans ce cas, nous utilisons des paramètres d'applet comme ceci:
deployJava.runApplet({
id: 'MyApplet',
code: 'com.mkysoft.myapplet.SomeClass',
archive: 'com.mkysoft.myapplet.jar'
}, {
Java_version: "1.6*", // Target version
cache_option: "no",
cache_archive: "",
codebase_lookup: true,
Java_arguments: "-Djava.net.preferIPv4Stack=true"
},
"1.6" // Minimum version
);
Vous pouvez trouver deployJava.js à l’adresse https://www.Java.com/js/deployJava.js
vous pouvez définir la variable d’environnement Java_TOOL_OPTS comme suit, qui sera sélectionnée par JVM pour n’importe quelle application.
set Java_TOOL_OPTS = -Djava.net.preferIPv4Stack = true
Vous pouvez définir cela à l'aide de la commande Invite ou définir des variables d'environnement système, en fonction de vos besoins. Notez que cela reflétera toutes les applications Java qui s'exécutent sur votre ordinateur, même s'il s'agit d'un interpréteur Java que vous avez dans une configuration privée.