2016-10-27 1 views
0

Si vous souhaitez démarrer jstatd sur un port spécifique pour son registre RMI, vous pouvez passer le paramètre -p pour cela. Mais le problème est qu'il ouvre un second port aléatoire (appelé "port anonyme" en java) qui pose problème pour l'écriture de règles de pare-feu ou pour utiliser JVisualVM pour se connecter à un jstatd distant fonctionnant dans un conteneur Docker. Si vous regardez jstatd source, vous verrez qu'il appelle UnicastRemoteObject.exportObject(remoteHost, 0) qui ouvrira un nouveau "port anonyme" qui semble être aléatoire.Comment forcer ou prédire le deuxième port ouvert de jstatd?

Existe-t-il un moyen de forcer ce dernier port à un port fixe, ou un moyen de prédire lequel sera choisi?

+0

Copie possible de [Comment m'assurer que RMI n'utilise qu'un ensemble spécifique de ports?] (Http://stackoverflow.com/questions/56687/how-do-i-ensure-that-rmi-uses-only -a-specific-set-of-ports) – jchampemont

+0

En fait, l'objet nouvellement exporté réutilisera un port précédemment utilisé, tel que le port de registre, à moins qu'il y ait des conflits d'usine de socket. Avez-vous des preuves? ou est-ce que cette question est basée sur cette mauvaise lecture? – EJP

+0

@EJP: Je ne comprends pas vraiment votre commentaire ... Ma question est basée sur le fait qu'au lancement de 'jstatd' un autre port est ouvert (ainsi que le port de registre RMI) et si vous ne transférez pas aussi ce port dans une règle de pare-feu, alors JVisualVM (par exemple) ne pourra pas accéder à ce serveur distant ... –

Répondre

0

Je n'ai pas trouvé de moyen facile de prédire quel port concret sera ouvert en utilisant un port anonyme.

Mais j'ai trouvé une ré-écriture de jstatd appelé « jakestatd » qui forcera les 3 ports (car enfin, j'ai découvert que jstatd ouvre en fait 3 ports et non 2 comme je l'ai d'abord pensé) que jstatd utilisations.

Comme cela ne suffisait pas pour moi parce que je devais contrôler ces ports, j'ai écrit ejstatd que répondre à cette question précise (ainsi que d'autres), maintenant je peux contrôler les ports Thos à l'aide (à l'intérieur du dossier de ejstatd):

mvn exec:java -Dexec.args="-pr 2222 -ph 2223 -pv 2224" 

Voici les 3 ports qui seront ouverts seront 2222, 2223 et 2224, et le registre RMI seront disponibles au port de 2222.