Я просматриваю учебное пособие на веб-сайте Sun, попробуйте использовать RMI.java rmi: исключение контроля доступа, доступ запрещен
Но когда я пытаюсь запустить сервер я получаю эту ошибку:
ComputeEngine exception:
java.security.AccessControlException: access denied ("java.net.SocketPermission" "127.0.0.1:1099" "connect,resolve")
at java.security.AccessControlContext.checkPermission(AccessControlContext.java:372)
at java.security.AccessController.checkPermission(AccessController.java:559)
at java.lang.SecurityManager.checkPermission(SecurityManager.java:549)
at java.lang.SecurityManager.checkConnect(SecurityManager.java:1051)
at java.net.Socket.connect(Socket.java:574)
at java.net.Socket.connect(Socket.java:528)
at java.net.Socket.<init>(Socket.java:425)
at java.net.Socket.<init>(Socket.java:208)
at sun.rmi.transport.proxy.RMIDirectSocketFactory.createSocket(RMIDirectSocketFactory.java:40)
at sun.rmi.transport.proxy.RMIMasterSocketFactory.createSocket(RMIMasterSocketFactory.java:146)
at sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:613)
at sun.rmi.transport.tcp.TCPChannel.createConnection(TCPChannel.java:216)
at sun.rmi.transport.tcp.TCPChannel.newConnection(TCPChannel.java:202)
at sun.rmi.server.UnicastRef.newCall(UnicastRef.java:340)
at sun.rmi.registry.RegistryImpl_Stub.rebind(Unknown Source)
at engine.ComputeEngine.main(ComputeEngine.java:31)
Может кто-то советы о том, как исправить это? Как я могу избавиться от этого исключения, как его исправить?
Это где я получаю исключение (где я обратил стрелку справа от строки):
package engine;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
import java.rmi.server.UnicastRemoteObject;
import compute.Compute;
import compute.Task;
public class ComputeEngine implements Compute {
public ComputeEngine() {
super();
}
public <T> T executeTask(Task<T> t) {
return t.execute();
}
public static void main(String[] args) {
if (System.getSecurityManager() == null) {
System.setSecurityManager(new SecurityManager());
}
try {
String name = "Compute";
Compute engine = new ComputeEngine();
Compute stub =
(Compute) UnicastRemoteObject.exportObject(engine, 0);
Registry registry = LocateRegistry.getRegistry();
registry.rebind(name, stub); <<<<<------
System.out.println("ComputeEngine bound");
} catch (Exception e) {
System.err.println("ComputeEngine exception:");
e.printStackTrace();
}
}
}
и, наконец, это, как я начинаю свою программу:
Я оставлю следующую соответствующую информацию, которая может быть использована ниже:
Это файл ~/.server_policy:
grant codeBase "file:/home/jenia/Documents/eclipse/workspace/asti01/bin" {
permission java.security.AllPermission;
};
Это дерево директории проекта:
/home/jenia/Documents/eclipse/workspace/asti01$ tree
.
├── bin
│ ├── client
│ │ ├── ComputePi.class
│ │ └── Pi.class
│ ├── compute
│ │ ├── Compute.class
│ │ └── Task.class
│ └── engine
│ └── ComputeEngine.class
└── src
├── client
│ ├── ComputePi.java
│ └── Pi.java
├── compute
│ ├── Compute.java
│ └── Task.java
├── compute.jar
└── engine
└── ComputeEngine.java
это дерево папки ~/public_html
/home/jenia/public_html/
└── classes
├── client
│ └── Pi.class
└── compute.jar
EOFException в RMI обычно возникает из-за проблемы SecurityManager на другом конце. Можете ли вы попробовать его без кодовой базы и менеджеров безопасности? – EJP
Я не понимаю, что вы имеете в виду. –
Если вы не понимаете «без кодовой базы и менеджеров безопасности», я не могу помочь вам в решении вашего старого вопроса. Ваш новый вопрос совершенно другой: см. Ниже. – EJP