ComputeEngine exception:
java.security.AccessControlException: access denied ("java.net.SocketPermission" "127.0.0.1:1099" "connect,resolve")
セキュリティマネージャを使用していて、.policyファイルでその権限を付与していません。
-Djava.security.manager -Djava.rmi.server.codebase=file:/Users/name/Documents/workspace/PiComputationRM/src/compute/compute.jar -Djava.security.policy=/Users/name/Documents/workspace/PiComputationRM/server.policy
そこにいくつかの問題があります:
-
ファイル:コードベースは、その名前でクライアントとレジストリに表示される共有の場所を指定しない限り、機能しません。これはそれらの1つのようには見えません。
-
それがポリシーファイルの正しい名前であるかどうかを確認する必要があります
-
クライアントが独自のコードベースを設定し、クラスを提供する場合を除いて、サーバーにセキュリティマネージャーやポリシーは必要ありません。この例ではそれは起こりません。
-Djava.security.policy=/Users/name/Documents/workspace/PiComputationRM/client.policy
この名前を再確認してください。
java -Djava.security.policy="server.policy" src/engine/ComputeEngine.java
Error: Could not find or load main class src.engine.ComputeEngine.java
もちろんそうしました。 JVMにコンパイラコマンドを与えました。チュートリアルで提供されているコマンドを使用します。 .javaファイルにJVMという名前を付けません。
代わりに、チュートリアルに対して作業を再確認する必要がありました。少なくとも2か所でチュートリアルを読み間違えました。
また、コードベース機能が本当に必要かどうかも疑問です。私はそれとセキュリティマネージャを完全に削除することから始め、それらなしでそれを動作させるだけです。最初のRMIプロジェクトにとっては複雑すぎます。