問題タブ [rmiregistry]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - クラスを探す場所をrmiregistryに伝える方法は?
オラクルはそれregistry
が
リモート オブジェクトを名前にバインドするために同じホスト上の RMI サーバーによって使用されるブートストラップ ネーム サービス
今、rmiregistry
提供に使用するサーバーがありますJNDI
。
そして Person クラス:
としてrmiregistry
開始されrmiregistry &
ます。bind
それでも、コードを実行すると、クラスPerson
が見つからないため、実行時に引数を非整列化できないと不平を言います。
クラスファイルが見つからないことは理解しrmiregistry
ていますが、その理由はわかりません。これは、バインドするクラスを見つけることができる場所を伝える正しい方法ですか?
java - RMI ConnectException: ホストへの接続が拒否されました: 127.0.0.1
java.rmi.ConnectException: Connection refused to host: 127.0.0.1; nested exception is: [java] java.net.ConnectException: Connection refused (Connection refused)
これまでにフォーラムで見つけたすべてのヒントを実行しましたが、Ant build.xml の実行中にこのエラーが発生します。
build.xml ファイル
client.policy
サーバーポリシー
RMI レジストリの作成と実行
私の /etc/hosts ファイル
どんな助けでも大歓迎です。
java - java.lang.ClassCastException: com.sun.proxy.$Proxy1 をキャストできません
サーバ:
クライアント:
問題は、キャスト時に例外が発生することです。この場合、次の場所で発生します。ProductFacade product_1 = (ProductFacade) registry.lookup(product_id);
例外:
java - Java RMI で特定のループバック アドレスにのみレジストリを作成することは可能ですか?
Java RMI を使用しています。クライアントとサーバーはまだ同じマシン上にあります。サーバーでレジストリを開始するために、現在使用しています
したがって、レジストリはマシンの IP と指定されたポートで開始されます。クライアントはこのコードでレジストリを取得します
127.0.0.2、127.0.0.3 .. 127.255.255.254 のような他のループバック アドレスのいずれかを使用する場合も同様です。レジストリを作成するときに、1 つのループバック アドレス (たとえば、127.0.0.1 のみ) の IP を指定できる可能性はありますか? 次のような方法はありません。
java - インターネット経由の Java RMI 接続
別のネットワークでホストされているサーバーからリモート オブジェクトを取得しようとしています。同じマシンと同じネットワークに接続できますが、別のネットワークから取得しようとすると、次のようになります。
ホストへの接続が拒否されました: 192.168.1.131; ネストされた例外: java.net.ConnectException: 接続タイムアウト: 接続
ルックアップ機能が間違ったネットワークを検索しているようです。System.setProperty を使用しようとしましたが、機能しません。ここにコード:
サーバ
クライアント
java.rmi.server.hostname
クライアントjarにも設定する必要がありますか?
java - java rmi シンプル プロジェクト classNotFoundException バインディング レジストリ
わかりました、これはかなり簡単だと確信していますが、私はJavaにかなり慣れていません(私は.NETの少年です:P)、ここで見つけたすべての推奨事項に従って成功しなかった後、一歩下がって尋ねる。
クライアント、サーバー、および共通のインターフェースが定義されている共通のプロジェクトで単純な rmi プロジェクトを開始しようとしています。サーバー コードを実装したばかりで、それを実行してすべてが正常かどうかを確認しようとすると、java.lang.ClassNotFoundException が発生します。
同様の問題についていくつかの回答をたどった後、私の問題は、プロジェクトとは異なる場所で実行されている rmiregistry に起因していると確信しています。
次のコードを使用して、レジストリ コードベースを設定します。
}
次に、このメイン クラスを使用してサーバー コードを開始しようとします。
}
しかし、実行すると、常に IRegulador インターフェイスで java.lang.ClassNotFoundException が発生します。
楽しい部分:
- java.rmi.server.codebase の値をコンソールに出力しました。IRegulador インターフェイスが定義されているプロジェクトの bin フォルダーを指しています。(ファイル:/F:/Practicas%20y%20dem%c3%a1s/Sistemas%20Distribuidos/common/bin/)
- 明らかに、そのプロジェクトはサーバープロジェクト(Regulador)のクラスパスにも設定されています
- ワークスペースと rmiregistry が異なるディスク上にある
- それにもかかわらず、Utils クラスは IRegulador インターフェイスと同じプロジェクトにあり、例外がスローされる前に実行されるため (java.rmi.server.codebase が正しく設定されているため)、グローバル クラスパスの問題ではないようです。
呼び出す前にrmiregistryのクラスパスを設定しようとしましたが(一部の回答では直接推奨されていませんが)、何も変わりませんでした。また、Regulador プロジェクトの bin フォルダーから rmiregistry.exe を起動しようとしましたが、何も変更されていないようです。
.NET のバックグラウンドを持つ私は、これらのクラスパスの問題が紛らわしいといつも思っていました。この問題は、予想以上に多くの時間を消費し始めています。どうしても助けが必要です。
更新: IRegulador.class からコードベースに渡される URL に問題があると考え始めています。それをWindowsエクスプローラーに貼り付けると、SOはそれを見つけることができないため、レジストリがルートに到達するのを妨げる構造上の問題で構築されていると思います:
file:/F:/Practicas%20y%20dem%c3%a1s/Sistemas%20Distribuidos/common/bin/
更新 2: パス ルートが複雑すぎる可能性があると考えたので、単純化して直線以外の文字を削除することにしました。現在、コードベースの値は
file:/F:/Practicas/SD/common/bin/
ただし、問題は解決しません。rmiregistry がそのフォルダーに到達できない理由がわかりません。
次に、プロジェクト全体を rmiregistry が実行される同じディスクに移動し、何かが変更されるかどうかを確認することにしました。しかし、何も変わらず、同じ問題です。