package client;
/**
* Created by rozerin on 08.03.2016.
*/
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
import java.math.BigDecimal;
import compute.Compute;
public class ComputePi {
public static void main(String args[]) {
if (System.getSecurityManager() == null) {
System.setSecurityManager(new SecurityManager());
}
try {
String name = "Compute";
Registry registry = LocateRegistry.getRegistry(args[0]);
Compute comp = (Compute) registry.lookup(name);
Pi task = new Pi(Integer.parseInt(args[1]));
BigDecimal pi = comp.executeTask(task);
System.out.println(pi);
} catch (Exception e) {
System.err.println("ComputePi exception:");
e.printStackTrace();
}
}
}
package engine;
/**
* Created by rozerin on 08.03.2016.
*/
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();
}
}
}
授予codeBase“file:/home/rozerin/ideaprojects/computetest/src/main/java/”{permission java.security.allpermission;};
堆栈跟踪是;
ComputeEngine异常:java.security.AccessControllException:在java.security.AccessController.CheckPermission(AccessController.java:474)在java.security.AccessController.CheckPermission(AccessController.java:685)在java.lang.SecurityManager.CheckPermission(SecurityManager.java:549)在java.lang.SecurityManager.CheckConnect(socket.java:425)在java.net.socket.(socket.java:208)在sun.rmi.transport.proxy.rmiDirectsocketfactory.createsocket(rmiDirectsocketfactory.java:40)在sun.rmi.transport.proxy.rmimastersocketfactory.java:147)在sun.rmi.transport.tcp.tcpendpoint.newsocket(tcpendpoint.java:613)在TCPChannel.NewConnection(TCPChannel.java:202)在sun.rmi.server.unicastref.newcall(unicastref.java:341)在sun.rmi.registry.registryimpl_stub.rebind(来源未知)在engine.computeengine.main(computeengine.java:33)
“at engine.computeengine.main(computeengine.java:33)”是它使用服务器类的rebind方法的地方。
界面在我分享的网站里,我不想让这个地方太拥挤。任何帮助都将不胜感激。谢了!
对于服务器端和客户端,都应该使用以下内容:
System.setProperty("java.security.policy", "path_to_your_Security_policy_file_located_in_file_system");
System.setSecurityManager(new RMISecurityManager());
安全策略文件应包含
grant {
permission java.security.AllPermission;
};
我想这也许能帮到你。
我在客户端wnat纯java RMI,因为我需要能够重新启动服务器端。
问题内容: 我正在尝试运行将类绑定到命名服务器的Java应用程序,但是我不断收到ClassNotFoundException 首先,我启动注册表: 然后从Eclipse我尝试执行服务器,但出现此错误 我已经阅读了RMI Java教程,但仍然无法正常工作… 作为虚拟机参数,我已经设置了: -Djava.rmi.server.codebase = file:$ {workspace_loc} / pr
我们目前有一个服务器,它为他获得的每个请求创建一个新线程,因此基本上服务器获得他以后需要保存的数据。 现在,我们得到了实现RMI的请求,在这里我们可以观察当前保存的数据类型。 我怎样才能以最好的方式处理这个问题?我应该为每个线程创建一个RMI服务器吗?我可以在同一地址上拥有同一服务的多个实例,并让我的观察者注册到所有实例吗? 我正在使用RMI访问的谷歌示例:https://sites.google
问题内容: 我正在学习Java RMI,并且创建了一个非常简单的服务器来计算斐波那契数。服务器(FibonacciServer)创建一个负责计算序列的对象(Fibonacci),并且该对象实现接口(IFibonacci): FibonacciServer.java: 斐波那契 IFibonacci: 如您所见,这是一个非常基本的示例。我正在使用命令在Linux上启动RMI注册表,它启动没有问题。
我正在构建一个RMI应用程序,我有以下服务器类。然而,当我在eclipse中运行它时,我得到了以下异常。出了什么问题,我该如何解决?我花了两天时间在网上阅读类似的问题,但我找不到解决方法。我怀疑这与策略文件有关,但我不知道如何使用。另外,如果问题出在我的运行方式上,你能告诉我在eclipse中如何操作吗。 --
[dispatcherServlet]:路径为[]的上下文中servlet[dispatcherServlet]的servlet.service()引发异常[请求处理失败;] 对此有什么意见吗?