web-dev-qa-db-fra.com

Comment définir Java.net.preferIPv4Stack = true à l'exécution?

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.

31

Vous pouvez utiliser System.setProperty("Java.net.preferIPv4Stack" , "true");

Ceci équivaut à le passer en ligne de commande via -Djava.net.preferIPv4Stack=true

47
Kal

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".

9
Jamie Love

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.

8
dtc

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

3
Hussein mahyoub

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

0
mkysoft

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.

0
Soundararajan