RMI は初めてです
この例を試しました。これは期待どおりに機能します。
Calculator.class
CalculatorImpl.class + CalculatorImpl_Stub.class
CalculatorServer.class
+
CalculatorClient.class
実際、2 台の異なる PC でテストする予定です。しかし、その代わりに、同じ PC の2 つの異なるフォルダーで試してみました。
1 つのフォルダーにサーバーが含まれます:
Calculator.class :interface
CalculatorImpl.class + CalculatorImpl_Stub.class
CalculatorServer.class
もう 1 つのフォルダには、Client:
Calculator.class が含まれています。これは、CalculatorClient.class の上の Server の
Calculatorインターフェースの単なるコピーです。
実行しようとすると サーバーは正常に動作しています
クライアントを実行すると、このエラーが出力されました:
java.rmi.UnmarshalException: error unmarshalling return; nested exception is:
java.lang.ClassNotFoundException: CalculatorImpl_Stub (no security manag
er: RMI class loader disabled)
at sun.rmi.registry.RegistryImpl_Stub.lookup(Unknown Source)
at java.rmi.Naming.lookup(Unknown Source)
at CalculatorClient.main(CalculatorClient.java:12)
Caused by: java.lang.ClassNotFoundException: CalculatorImpl_Stub (no security ma
nager: RMI class loader disabled)
at sun.rmi.server.LoaderHandler.loadClass(Unknown Source)
at sun.rmi.server.LoaderHandler.loadClass(Unknown Source)
at java.rmi.server.RMIClassLoader$2.loadClass(Unknown Source)
at java.rmi.server.RMIClassLoader.loadClass(Unknown Source)
at sun.rmi.server.MarshalInputStream.resolveClass(Unknown Source)
at java.io.ObjectInputStream.readNonProxyDesc(Unknown Source)
at java.io.ObjectInputStream.readClassDesc(Unknown Source)
at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
at java.io.ObjectInputStream.readObject0(Unknown Source)
at java.io.ObjectInputStream.readObject(Unknown Source)
... 3 more
- それらは同じフォルダーでうまく機能します。
- 2 つの異なるフォルダーにある場合のエラー。
なんで?
このエラーを回避するにはどうすればよいですか?