运行示例RMI应用程序

时间:2014-09-28 22:32:53

标签: java eclipse oracle rmi

我正在尝试运行Oracle网站http://docs.oracle.com/javase/tutorial/rmi/running.html中给出的RMI应用程序示例。  但是,尝试Eclipse和命令行,我无法运行服务器或客户端。  事实上,在Eclipse中运行时我遇到了这个错误:

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

我也改变了这样的VM Argument:

  • 对于ComputeEngine(服务器):

    -Djava.security.manager -Djava.rmi.server.codebase = file:/Users/name/Documents/workspace/PiComputationRM/src/compute/compute.jar -Djava.security.policy = / Users / name /文档/工作区/ PiComputationRM /的server.policy

  • 对于ComputePi(客户端):

    -Djava.security.policy = /用户/名称/文件/工作区/ PiComputationRM / client.policy

我的客户端和服务器策略的内容是:

grant {
permission java.security.AllPermission;
};

当我尝试在终端中运行服务器时:

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

我收到了这个错误:

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

请帮忙,我在互联网上花了很多时间徒劳?

1 个答案:

答案 0 :(得分:0)

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

您正在使用安全管理器,而您尚未在.policy文件中授予该权限。

  

我也改变了这样的VM Argument:

     

对于ComputeEngine(服务器):

-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

那里有几个问题:

  • 文件:代码库不会起作用,除非它指定一个共享位置,该名称可以通过该名称显示给客户端和注册表。这看起来不像其中之一。

  • 您需要检查这是否是策略文件的正确名称

  • 您甚至不需要服务器中的安全管理器或策略,除非客户端正在设置自己的代码库并且将为您提供类。在这个例子中不会发生这种情况。

  

对于ComputePi(客户端):

-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。

  

我在互联网上花了很多时间徒劳无功

您应该反复对教程进行双重检查。你至少在两个地方误读了这个教程。

我还会质疑你是否真的需要代码库功能。我首先要将它和安全管理器一起删除,然后让它在没有它们的情况下工作。对于第一个RMI项目来说,这太复杂了。