ComputeEngine exception:
java.security.AccessControlException: access denied ("java.net.SocketPermission" "127.0.0.1:1099" "connect,resolve")
Korzystasz z menedżera bezpieczeństwa i nie przyznałeś tego uprawnienia w swoim pliku .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
Kilka problemów:
-
file:codebase nie będzie działać, chyba że określi udostępnioną lokalizację, która jest widoczna pod tą nazwą dla klienta i Rejestru. To nie wygląda na jeden z tych.
-
musisz sprawdzić, czy to jest prawidłowa nazwa pliku strategii
-
nie potrzebujesz nawet menedżera bezpieczeństwa ani polityki na serwerze, chyba że klient ustawia własną bazę kodu i ma zamiar udostępnić ci klasy. W tym przykładzie tak się nie dzieje.
-Djava.security.policy=/Users/name/Documents/workspace/PiComputationRM/client.policy
Sprawdź dokładnie tę nazwę.
java -Djava.security.policy="server.policy" src/engine/ComputeEngine.java
Error: Could not find or load main class src.engine.ComputeEngine.java
Oczywiście że to zrobiłeś. Wydałeś komendę kompilatora do JVM. Użyj polecenia podanego w samouczku. Nie nazywasz plików .java do JVM.
Zamiast tego powinieneś dwukrotnie sprawdzić swoją pracę z samouczkiem. Błędnie przeczytałeś samouczek w co najmniej dwóch miejscach.
Chciałbym również zapytać, czy naprawdę potrzebujesz funkcji codebase. Zacząłbym od usunięcia go, a także menedżerów bezpieczeństwa, i po prostu zacząłby działać bez nich. To zbyt duża komplikacja dla pierwszego projektu RMI.