問題タブ [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.

0 投票する
4 に答える
12772 参照

java - RMI サーバー: rmiregistry または LocateRegistry.createRegistry

サーバー側の RMI の場合、rmiregistryプログラムを開始する必要がありますか、それとも単に呼び出す必要がありますLocateRegistry.createRegistryか? 両方が可能である場合、長所と短所は何ですか?

0 投票する
1 に答える
3725 参照

java - JUnit および RMI アプリ、RMI レジストリのベスト プラクティス

RMI クライアント アプリケーション用の一連のシステム統合テストを作成しようとしています。JUnit 3.8.2 で RMI サーバーを起動し、それらのテストを実行したいと考えています。誰かがこれをしましたか?

メインのpojoで次のようなものを使用しています:

これをjunitテストに変換して、レジストリが1回だけ起動され、レジストリが実際に起動した場合にのみテストが実行されるようにする最良の方法は何ですか? メインからのすべてのテスト コードを含む 1 つのテスト メソッドを含むテスト クラスを作成することは避けたいと考えています。

また、テストを書くときは何に注意すればよいですか? RMI テストの落とし穴はありますか?

0 投票する
9 に答える
61020 参照

java - rmi サーバーを実行中、classnotfound

こんにちは、クラスをネーミング サーバーにバインドする Java アプリケーションを実行しようとしていますが、常に ClassNotFoundException が発生します。

まず、レジストリを開始します。

rmiレジストリ

次に、Eclipseからサーバーを実行しようとしましたが、このエラーが発生しました

java.rmi.ServerException: サーバースレッドで RemoteException が発生しました。ネストされた例外は次のとおりです: java.rmi.UnmarshalException: 引数の非整列化エラー。ネストされた例外は次のとおりです。 sun.rmi.transport.Transport$1.run(Transport.java:159) で java.security.AccessController.doPrivileged(Native Method) で sun.rmi.transport.Transport.serviceCall(Transport.java:155) で sun.rmi .transport.tcp.TCPTransport.handleMessages(TCPTransport.java:535)、sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:790)、sun.rmi.transport.tcp.TCPTransport$ConnectionHandler で。run(TCPTransport.java:649) at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) at java.lang .Thread.run(Thread.java:619)、sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(StreamRemoteCall.java:255)、sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:233)、sun.rmi. server.UnicastRef.invoke(UnicastRef.java:359) で sun.rmi.registry.RegistryImpl_Stub.rebind(不明なソース) で progInternet2008.Pozzobon.tesi.Slave.main(Slave.java:54) 原因: java.rmi. UnmarshalException: 引数の非整列化エラー。ネストされた例外: java.lang.ClassNotFoundException: progInternet2008.commons.NominabileFactory at sun.rmi.registry.RegistryImpl_Skel.

RMI Java チュートリアルを読みましたが、まだ機能しませんでした...

VM引数として、私はこれを設定しました:

-Djava.rmi.server.codebase=file:${workspace_loc}/progInternet2008

私を助けてください

(私は Java 6 を使用しています)

0 投票する
2 に答える
539 参照

java - java rmi 例外

私はrmiアプリケーションを書いています。すべてのクラスを 1 つのディレクトリに配置すると、すべてが正常に機能します。ただし、サーバー部分とクライアント部分を分割しようとすると、 java.lang.ClassNotFoundException.myclasses が発生します。レジストリが CLASSPATH でそのクラスを見つけることができないようです。この問題を解決するにはどうすればよいですか?

0 投票する
1 に答える
4442 参照

java - クラス java.rmi.registry.Registry と java.rmi.Naming の違い

Registryクラスとクラスの違いは何ですかNaming

私のアプリケーションでは、Registryクラスを使用しています。Namingしかし、クラスとその用途について知りたいですか?

0 投票する
2 に答える
3380 参照

java - RMI バインディングの問題 (Windows RMI サーバーから Ubuntu RMI レジストリへ)

localhost で実行しているときに RMI レジストリに正しくバインドする RMI サーバーがあります (正しくセットアップされていることを示すため)。これを行うコードは次のとおりです。

私のローカルホストは、次のバージョンの Java で Windows を実行しています。

ここで、私の問題は、別のマシン (OpenJDK IcedTea6 1.8.1、Java バージョン 1.6.0_18 を使用して Ubuntu 10.04 を実行) で実行されている RMIRegistry にバインドしたいということです。

この Ubuntu マシンでは、CLASSPATH に何もなく (echo $CLASSPATH)、OpenJDK RMIRegistry を実行しています (Ubuntu にバンドルされているものとは対照的に):

上記のコードで、変数 rmiServerHostname が "localhost" で、RMIRegistry が Windows localhost で実行されている場合、コードは正しく機能します (RMI サーバー コードは RMI レジストリにバインドされます)。ただし、rmiServerHostname がリモート Ubuntu マシン (「deity」) の場合、「rebind」呼び出しで次の例外がスローされます。

RMIRegistry を強制終了すると、別のエラー メッセージが表示されます (当然のことですが)。

これらの RMIRegistry の実装 (Windows Java6 と Ubuntu OpenJDK 6) の間に非互換性はないと思いますが、この問題を解決する方法がわかりません。特に、コードが正しく機能することを知っているためです (最初の Windows/localhost の例)。


これまでの進捗

役立つ回答をありがとうございます。rmiServerHostname (ローカルホストで実行) と rmiRegistryHostname ('deity' で実行) の間で混乱していたことは理解しています。次のようにコードを修正しましたが、まだ同じ問題が発生しています (「Registry registry = LocateRegistry.getRegistry( rmiRegistryHostname )」という行の変更に注意してください)。

printステートメントの出力は次のとおりです(注、私のローカルホストは「RTPC-16」です)

このファイルは存在します:

したがって、もう一度要約すると、次のようになります。

  • このコードは、RMIRegistry と RMIServer が同じ物理ホスト (例: localhost) にある場合に機能します。
  • この問題は、別のホストで RMIRegistry プロセスのみを実行しようとしたときに発生します (つまり、RMIServer がローカルホストの「RTPC-16」で実行されているときに、RMIRegistry が「deity」で実行されている場合)。
  • クライアントとサーバーの両方に RMI インターフェイス コードベース ("ReutersTickHistoryInterface.jar") をバンドルしていたので、RMI がクラス定義を転送する必要があるとは予想していませんでした。RMI はクライアント上でスタブ クラスを作成し、実際の RMI 呼び出しを処理するだけです。
0 投票する
3 に答える
5197 参照

java - RMIServer とは異なるホストで RMIRegistry を実行する

これは可能ですか?(Java 6 を想定)

私の要点を説明するために考案された/単純化された例は次のとおりです。

  • 明確に定義された、決して変更されない RMI インターフェイス (単一の JAR ファイル、テンプレート パラメーターなし) があります。
  • ホスト X で実行されている RMIRegistry。
  • ホスト Y から (ホスト X 上の RMIRegistry) に registry.rebind() する RMI サービス。と
  • ホスト Z から RMI 呼び出しを実行する RMI クライアント

可能であれば、RMI サービス (ホスト Y のプロセス) でプロパティ "java.rmi.server.codebase" を指定するにはどうすればよいですか?

ホスト A と B が同じマシンである場合、この構成は「java.rmi.server.codebase」が「file:///C:/rmiCodebase/myCommonInterface.jar」のときに機能します。

ホスト A と B が別々のマシンにある場合、再バインド時に次の例外が発生します (ホスト Y に同じ「java.rmi.server.codebase」が設定されています)。

ホスト A と B が別々のマシンにあり、インターフェース JAR を Web サーバー経由で使用できるようにする場合 (「java.rmi.server.codebase」は「http://Y/rmiCodebase/myCommonInterface.jar」または「 http://Z/rmiCodebase/myCommonInterface.jar")、再バインド時にこのわずかに異なるエラーが発生します。

私は少し混乱しています - すべての RMI サービスが RMIRegistry と同じ物理ホスト上で実行されなければならない場合、非常に制約があるようです (私が成功したのはこれだけです)

結局のところ、私はマシン Z がマシン Y で実行されているサービスに対して RMI 呼び出しを行えるようにしたいだけです。マシン Y と Z の両方で実行されているプロセスに myCommonInterface.jar を提供しています。マシン X が共通の (リモート) インターフェースを使って何かをしなければならないようにしたい!

次のリンクは役に立ちますが、この質問への回答には役立ちません: http://download.oracle.com/javase/1.4.2/docs/guide/rmi/codebase.html

0 投票する
2 に答える
6576 参照

java - RMI 接続が拒否されました

rmi接続を確立しようとしています。私は多くのセキュリティ問題に遭遇しましたが、これらすべてを乗り越える方法を見つけることができませんでした. jar ファイルを次のように実行します。

これを作成するために使用したコードは次のとおりです。

私が受け取っているエラートレースは次のとおりです。

これを回避するためにさまざまな方法を試しましたが、ここで問題を確認できる人はいますか?

ありがとう

0 投票する
1 に答える
4170 参照

java - RMI 接続エラー クライアント側

RMI サービスに接続しようとすると、次のエラーが発生します。

以下を使用してクライアント コードを実行しています。

私が使用しているコードは次のとおりです。

私が受け取っているエラーは次のとおりです。

ここで何が問題なのか誰か知っていますか?