Java 运行示例RMI应用程序

Java 运行示例RMI应用程序,java,eclipse,oracle,rmi,Java,Eclipse,Oracle,Rmi,我正在尝试运行Oracle网站中给出的RMI应用程序示例。 但是,在Eclipse和命令行中尝试时,我无法运行服务器和客户机。 事实上,在Eclipse中运行时,我会遇到以下错误: ComputeEngine exception: java.security.AccessControlException: access denied ("java.net.SocketPermission" "127.0.0.1:1099" "connect,resolve") Error: Could not

我正在尝试运行Oracle网站中给出的RMI应用程序示例。 但是,在Eclipse和命令行中尝试时,我无法运行服务器和客户机。 事实上,在Eclipse中运行时,我会遇到以下错误:

ComputeEngine exception:
java.security.AccessControlException: access denied ("java.net.SocketPermission" "127.0.0.1:1099" "connect,resolve")
Error: Could not find or load main class src.engine.ComputeEngine.java
我还更改了VM参数,如下所示:

  • 对于计算引擎(服务器):

    -Djava.security.manager-Djava.rmi.server.codebase=文件:/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/picomputionRM/client.policy

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

grant {
permission java.security.AllPermission;
};
此外,当我尝试在终端中运行服务器时:

java -Djava.security.policy="server.policy" src/engine/ComputeEngine.java
我得到了这个错误:

ComputeEngine exception:
java.security.AccessControlException: access denied ("java.net.SocketPermission" "127.0.0.1:1099" "connect,resolve")
Error: Could not find or load main class src.engine.ComputeEngine.java
请大家帮忙,我在网上花了很多时间都白费了

ComputeEngine exception:
java.security.AccessControlException: access denied ("java.net.SocketPermission" "127.0.0.1:1099" "connect,resolve")
您正在使用安全管理器,但尚未在.policy文件中授予该权限

我还更改了VM参数,如下所示:

对于计算引擎(服务器):

有几个问题:

  • 一个file:codebase将不起作用,除非它指定了一个共享位置,该位置对客户端和注册表可见。这看起来不像那种

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

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

对于ComputePi(客户端):

仔细检查这个名字

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

java -Djava.security.policy="server.policy" src/engine/ComputeEngine.java
我得到了这个错误:

ComputeEngine exception:
java.security.AccessControlException: access denied ("java.net.SocketPermission" "127.0.0.1:1099" "connect,resolve")
Error: Could not find or load main class src.engine.ComputeEngine.java
你当然知道。您向JVM发出了编译器命令。使用教程中提供的命令。您不需要为JVM命名.java文件

我花了很多时间在网上,但都白费了

你应该根据教程仔细检查你的工作。您至少在两个地方误读了本教程


我还想问您是否真的需要代码库特性。我会先把它和安全管理人员一起移除,然后在没有他们的情况下让它正常工作。对于第一个RMI项目来说,这太复杂了。

请参见下面已经提出的问题:我不明白你说我没有授予安全管理器权限。我这样做是为了授予{permission java.security.AllPermission;};。足够地不是吗?只有当文件真的加载了才足够。这就是为什么我说要仔细检查文件名,这就是关于java.security.debug=access的建议,其他地方看到的失败都是关于这个的。它会告诉您出现问题时所处的安全域,以及该域拥有的权限,从而告诉您是否正确加载了文件。显然,在您的例子中,它不是.NB,您说您已经用java.security.debug尝试过它,所以您应该已经有了这个输出来检查。你应该把它的相关部分编辑到你的问题中。谢谢。事实上,路径中有一个错误的目录名,所以有改进。然而,正如我之前所说,我有java.rmi.ServerException:RemoteException发生在服务器线程中;嵌套的异常是:java.rmi.UnmarshalException:error unmarshalling参数;嵌套异常为:java.lang.ClassNotFoundException:compute.Computed您知道此异常的来源吗?我想这是因为注册表。重新绑定(名称,存根);主代码中的行