単一のRMIレジストリを使用する
-
03-07-2019 - |
質問
現在取り組んでいるプロジェクトにRMIを使用しており、複数のホストから単一のRMIレジストリにバインドしたい。
ただし、そうしようとすると、エラーが表示されます
java.rmi.AccessException:Registry.Registry.bindは許可されていません。 origin / 192.168.0.9は非ローカルホスト
グーグルで行ったところ、デフォルトでRMIがリモートホストのバインドを停止しているようですが、これをオーバーライドまたはバイパスする方法はありますか?
この問題を乗り越える方法についての提案があれば、高く評価されるでしょう。別のポリシーファイルを使用してセキュリティマネージャーをオーバーライドしようとしましたが、どれも機能しないようです。
解決 5
最後に私が思いついた解決策は、 Cajo Framework これにより、非常に柔軟な配布システムが提供され、レジストリを適切に処理できるようになりました。また、NAT、ファイアウォール、HTTPプロキシの背後でも機能するため、非常に便利です。
rndm.buoyによって提案されたプロキシの方法は、場合によっては機能すると思いますが、システムによっては面倒かもしれません。 RMIには、間違ったネットワークインターフェイスへの関連付けに関する問題がいくつかあるようです。特に、DebianベースのLinuxディストリビューションで実行しているときにこの問題が発生しました。
他のヒント
制限を回避する方法はありますが、それはその通りです:回避策。とにかく、試してみてください。うまくいきます。
中央のRMIレジストリを実行しているホストで、1つのリモートメソッドproxyRebindでリモートオブジェクトをバインドする小さなサービスを実行します。このメソッドの実装は、中央レジストリで提供されるオブジェクトをバインドするだけです(レジストリはこのサービスと同じマシン上にあるため、これは失敗しません)。
他のすべてのホストは、単にこのリモートオブジェクトを検索し、独自のリモートオブジェクトでproxyRebindを呼び出します。
これは、リモートでホストされるレジストリの検索が許可されているため機能します。リモートでホストされているレジストリへのバインドが許可されていないため、元の試行は失敗しました。
これについてさらに明確にする必要があるかどうか教えてください。
/ RS
2回避する方法があります 制限が、それはそれが何であるかです: 回避策。とにかく、お試しください それを。うまくいきます。
を実行しているホスト上 中央のRMIレジストリは小さな リモートをバインドするサービス リモートメソッドが1つだけのオブジェクト: proxyRebind。の実装 このメソッドは単にオブジェクトをバインドします 中央でそれに供給されます レジストリ(これは失敗しないでしょう レジストリは次と同じマシン上にあります このサービス)。
他のすべてのホストは単純に検索します このリモートオブジェクトと呼び出し proxyRebindと独自のリモート オブジェクト。
これは、リモートで検索するため機能します ホストされているレジストリが許可されます。きみの 元の試みは失敗したため リモートでホストされるレジストリのバインド 許可されていません。
さらに必要な場合は教えてください これを明確に。
これは完全に機能します。注意する唯一のことは、常に正しく設定する必要があることです。 -Djava.rmi.server.hostname ="ローカルホストIP"
あなたの質問を誤解している可能性があります。その場合はお知らせください。
Java RMIの経験は限られているため、デザインパターンクラスでプロキシパターンとともに使用しました。 (テキスト:Headfirst Design Patterns)
大学のネットワークの外部からプロジェクトを機能させることはできませんでしたが、ネットワークに直接接続していれば完全に機能しました。教授によると、インターネットまたはWANを介した実装でRMIを使用することはできませんでした。彼女が提案した解決策は、VPNが必要になることでした。ウラジミールは、ローカルネームサービスであることと関係があるという点で正しいと思います。
間違っているかもしれませんが、rmiregistryアプリケーションは基本的にローカルネームサービスのラッパーのようです。つまり、リモートオブジェクトを指すようにする方法はありません。
必要なのはネーミング実装であり、これでクラスター化されます。 J2EE ASクラスタリングソリューションへの移行を検討してください。 JNDIツリーはクラスター内で共有されます。