java ipv6 broadcast ipv4

¿Cómo establecer java.net.preferIPv4Stack=true en tiempo de ejecución?



ipv6 broadcast (6)

Necesito inhabilitar IPv6. Para eso, la documentación de java indica establecer la propiedad jvm java.net.preferIPv4Stack=true .

Pero no entiendo cómo hacerlo desde el código mismo.

Muchos foros demostraron hacerlo desde el símbolo del sistema, pero tengo que hacerlo en tiempo de ejecución.


Me encontré con este problema al tratar de enviar correo con javax.mail desde una aplicación web en un servidor web que ejecutaba Java 7. Los destinos del servidor de correo interno fallaban con "red inalcanzable", a pesar de que telnet y ping funcionaban desde el mismo host, y mientras los servidores de correo funcionaron Lo intenté

System.setProperty("java.net.preferIPv4Stack" , "true");

en el código, pero eso falló. Entonces, el sistema probablemente guardó en caché el valor del parámetro. Estableciendo el argumento VM

-Djava.net.preferIPv4Stack=true

en el script de inicio del servidor web funcionó.

Un poco más de evidencia: en un programa de prueba dirigido muy pequeño, la configuración de la propiedad del sistema en el código funcionó. Entonces, el parámetro probablemente se almacena en caché cuando se usa el primer Socket, probablemente no solo cuando se inicia JVM.


Otro enfoque, si estás desesperado y no tienes acceso a (a) el código o (b) la línea de comando, entonces puedes usar variables de entorno:

http://docs.oracle.com/javase/7/docs/webnotes/tsg/TSG-Desktop/html/plugin.html .

Específicamente para java web start establece la variable de entorno:

JAVAWS_VM_ARGS

y para los applets:

_JPI_VM_OPTIONS

p.ej

_JPI_VM_OPTIONS = -Djava.net.preferIPv4Stack = true

Además, en las opciones globales de Windows (para aplicaciones Java generales) se puede establecer en la página del plan de control de Java en la pestaña "Java".


Puede usar System.setProperty("java.net.preferIPv4Stack" , "true");

Esto es equivalente a pasarlo en la línea de comando a través de -Djava.net.preferIPv4Stack=true


System.setProperty no funciona para los applets. Porque JVM ya se está ejecutando antes del inicio del applet. En este caso usamos parámetros de applet como este:

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 );

Puede encontrar deployJava.js en https://www.java.com/js/deployJava.js


bien,

System.setProperty("java.net.preferIPv4Stack" , "true"); y funciona desde JAVA, pero no funciona en JBOSS AS7.

Aquí está mi solución de trabajo alrededor,

Agregue la siguiente línea al final del archivo $ {JBOSS_HOME} /bin/standalone.conf.bat (justo después de :JAVA_OPTS_SET )

set "JAVA_OPTS=%JAVA_OPTS% -Djava.net.preferIPv4Stack=true"

Nota: reinicie el servidor JBoss


puede establecer la variable de entorno JAVA_TOOL_OPTS como sigue, que JVM elegirá para cualquier aplicación.

establecer JAVA_TOOL_OPTS = -Djava.net.preferIPv4Stack = true

Puede configurar esto desde el símbolo del sistema o establecerlo en las variables de entorno del sistema, en función de su necesidad. Tenga en cuenta que esto se reflejará en todas las aplicaciones Java que se ejecutan en su máquina, incluso si es un intérprete de Java que tiene en una configuración privada.