2010-06-09 9 views
1

Je pense que je dois me connecter à un objet RMI distant sans passer par le registre, mais je ne sais pas comment.Connexion à un objet RMI sans registre

Ma situation est la suivante: je suis en train de mettre en œuvre un service de distribution d'emplois simple qui se compose d'un distributeur et de plusieurs travailleurs. Le distributeur possède un objet RMI enregistré auquel les clients se connectent pour envoyer des travaux et les travailleurs se connectent pour accepter des travaux.

Malheureusement, les hôtes du distributeur et du worker se trouvent derrière un pare-feu. Pour accéder à l'hôte du distributeur, je tunnelise deux ports (un pour le registre, un pour l'objet distributeur) via SSH, afin que je puisse accéder au registre et au distributeur depuis l'extérieur du pare-feu. Pour que cela fonctionne, je dois définir "-Djava.rmi.server.hostname = localhost" sur le distributeur JVM afin que les clients se connectent à leur port local, tunnellisé, au lieu du port sur l'hôte réel du distributeur, qui est bloqué. Cela crée un problème pour les travailleurs, car ils doivent se connecter directement au distributeur, mais à cause de la redirection "localhost" ils se comportent comme des clients et essayent de se connecter à un port sur leur propre hôte, qui est pas disponible, parce que je ne tunnelise pas les travailleurs (ce n'est pas pratique). Maintenant, si je pouvais me connecter à un objet distant directement en donnant le nom d'hôte et le port, je pourrais supprimer à la fois le registre sur le distributeur et le hack "localhost", et permettre aux travailleurs de se connecter correctement.

Comment faire cela? Ou existe-t-il une solution différente à ce problème?

Répondre

1

J'ai maintenant résolu le problème en implémentant ma propre RMISocketFactory qui se connecte à "localhost" au lieu de l'hôte du distributeur. En utilisant cette usine de socket sur les clients via RMISocketFactory.setSocketFactory, je peux maintenant exécuter les distributeurs et les travailleurs sans aucun hacks. Sur les clients, j'ai toujours besoin du tunnel SSH, bien sûr.

+0

qui a sauvé ma journée, merci beaucoup! – ChristophK

Questions connexes