web-dev-qa-db-fra.com

Débogage à distance: pas de connexion à Wildfly 14 sur OpenJDK 11 au port 8787

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.

14
Sebastian S

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.

16
Sebastian S

Pour jdk 11, vous devez utiliser

-agentlib:jdwp=transport=dt_socket,address=*:8787,server=y,suspend=n

au lieu.

18
white.black

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

0
brunobastosg