Running a sample RMI application

删除回忆录丶 提交于 2019-12-12 04:37:07

问题


I am trying to run the example of the RMI application given in the Oracle website http://docs.oracle.com/javase/tutorial/rmi/running.html. However, trying both Eclipse and in the command line, I can't run the server nor the client. In fact, when running in Eclipse I get this error:

ComputeEngine exception:
java.security.AccessControlException: access denied ("java.net.SocketPermission" "127.0.0.1:1099" "connect,resolve")

I also have changed the VM Argument like this:

  • For the ComputeEngine (server):

    -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

  • For the ComputePi (client):

    -Djava.security.policy=/Users/name/Documents/workspace/PiComputationRM/client.policy

The content of my client and server policy is:

grant {
permission java.security.AllPermission;
};

Also when I try to run the server in terminal with:

java -Djava.security.policy="server.policy" src/engine/ComputeEngine.java

I got this error:

Error: Could not find or load main class src.engine.ComputeEngine.java

Please any help, I have spent many hours on the Internet in vain ??


回答1:


ComputeEngine exception:
java.security.AccessControlException: access denied ("java.net.SocketPermission" "127.0.0.1:1099" "connect,resolve")

You are using a security manager and you haven't granted that permission in your .policy file.

I also have changed the VM Argument like this:

For the ComputeEngine (server):

-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

Several problems there:

  • a file: codebase isn't going to work unless it specifies a shared location that is visible by that name to the client and the Registry. This doesn't look like one of those.

  • you need to check whether that is the correct name for the policy file

  • you don't even need a security manager or policy in the server, unless the client is setting its own codebase and is going to provide classes to you. That doesn't happen in this example.

For the ComputePi (client):

-Djava.security.policy=/Users/name/Documents/workspace/PiComputationRM/client.policy

Double-check this name.

Also when I try to run the server in terminal with:

java -Djava.security.policy="server.policy" src/engine/ComputeEngine.java

I got this error:

Error: Could not find or load main class src.engine.ComputeEngine.java

Of course you did. You gave a compiler command to the JVM. Use the command provided in the tutorial. You don't name .java files to the JVM.

I have spent many hours on the Internet in vain

You should have been double-checking your work against the tutorial instead. You've misread the tutorial in at least two places.

I would also question whether you really need the codebase feature at all. I would start by removing it, and the security managers, altogether, and just get it working without them. It's too much of a complication for a first RMI project.



来源:https://stackoverflow.com/questions/26090326/running-a-sample-rmi-application

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!