J'essaie de connecter mon débogueur à Wildlfy fonctionnant sur Open JDK 11.
Malgré Wildfly dit:
Listening for transport dt_socket at address: 8787
Mon IDE (IntelliJ IDEA CE 2018.1) prétend qu'il n'obtient aucune connexion:
Unable to open debugger port (localhost:8787): Java.io.IOException "handshake failed - connection prematurally closed"
.
Je démarre Wildfly via standalone.sh --debug
, Ce qui donne Java_OPTS
:
-server
-Xms64m
-Xmx512m
-XX:MetaspaceSize=96M
-XX:MaxMetaspaceSize=256m
-Djava.net.preferIPv4Stack=true
-Djboss.modules.system.pkgs=org.jboss.byteman
-Djava.awt.headless=true
-agentlib:jdwp=transport=dt_socket,address=8787,server=y,suspend=n
--add-exports=Java.base/Sun.nio.ch=ALL-UNNAMED
--add-exports=jdk.unsupported/Sun.misc=ALL-UNNAMED
--add-exports=jdk.unsupported/Sun.reflect=ALL-UNNAMED
--add-modules=Java.se
Quelque chose a-t-il changé dans Java 9/10/11? Le débogage à distance avec la même configuration fonctionne correctement lors de l'utilisation d'Oracle JDK 8.
En utilisant telnet, je peux confirmer que le port 8787
N'est en effet pas accessible.
Mise à jour après avoir lu le commentaire de @ ehsavoie: netstat -ln
Sur le serveur exécutant Wildfly affiche:
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 127.0.0.1:8787 0.0.0.0:* LISTEN
Donc, apparemment avec OpenJDK 11, le port de débogage est désormais lié à localhost par défaut.
La cause réside dans le comportement par défaut qui a changé avec Java 9 selon cette réponse : commençant par Java 9, la JVM uniquement) accepte les connexions locales, sauf indication contraire.
La solution est donc assez simple:
Alors qu'avec Java 8 il suffit de démarrer Wildfly avec --debug
, avec Java 9 Je devais changer cela en --debug *:8787
.
Pour jdk 11, vous devez utiliser
-agentlib:jdwp=transport=dt_socket,address=*:8787,server=y,suspend=n
au lieu.
Dans mon cas, j'utilisais Java 8 sur ma machine, mais l'instance Wildfly distante fonctionnait sur Java 11.
Quand j'ai changé ma Java en 11, cela a fonctionné.