Java 运行示例RMI应用程序
我正在尝试运行Oracle网站中给出的RMI应用程序示例。 但是,在Eclipse和命令行中尝试时,我无法运行服务器和客户机。 事实上,在Eclipse中运行时,我会遇到以下错误: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
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将不起作用,除非它指定了一个共享位置,该位置对客户端和注册表可见。这看起来不像那种
- 您需要检查这是否是策略文件的正确名称
- 您甚至不需要在服务器中使用安全管理器或策略,除非客户机正在设置自己的代码库并将为您提供类。在本例中,这种情况不会发生
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您知道此异常的来源吗?我想这是因为注册表。重新绑定(名称,存根);主代码中的行