質問

私は、レジストリを経由せずに、リモートRMIオブジェクトに接続する必要があると思うが、私は方法がわからない。

私の状況はこれです:私は1社の販売代理店と複数の労働者で構成され、単純なジョブ配信サービスを実施しています。ディストリビューターは、クライアントがジョブを送信するために接続し、労働者が雇用を受け入れるように接続先の登録RMIオブジェクトを持っています。

残念ながら、販売代理店や従業員のホストがファイアウォールの背後にあります。私はファイアウォールの外側から、レジストリとの販売代理店に得ることができるので、販売店のホストに到達するために、私は、SSH経由で2つのポート(レジストリに1つ、ディストリビューターオブジェクトに1つ)をトンネリングしています。クライアントはローカル、トンネリングされたポートに接続するようにブロックされている実際の販売代理店のホスト上で代わりのポートを、販売代理店JVM上で「-Djava.rmi.server.hostname = localhost」をセットに私が持っている作業を行います。

彼らは直接販売店に接続する必要があるため、

これは、しかし、労働者のための問題を作成しますが、理由は「localhost」をリダイレクトの彼らは、クライアントのように動作していない自分自身のホスト上のポートに接続しよう私は労働者にトンネリングいないよので利用できる、(それは非現実的である)。

私が直接ホスト名とポートを与えることによって、リモートオブジェクトに接続することができれば、今、私が代理店のレジストリの両方を離れて行うと、「localhost」をハックし、労働者が適切に接続して作ることができます。

私はそれをどのように行うのですか?あるいは、この問題に対する別の解決策はありますか?

役に立ちましたか?

解決

私は今、代わりに販売代理店のホストの「localhost」をに接続している私自身のRMISocketFactoryを実装することで問題を解決してきました。 RMISocketFactory.setSocketFactory Iを経由してクライアント上でこのソケットファクトリを使用することにより、今どんなハックすることなく、代理店や労働者を実行することができます。クライアントでは、私はまだ、もちろん、SSHトンネルを必要とします。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top