发表于: 2017-11-13 23:01:08

1 941


今天完成的事
1.听了晚上老师讲的排序算法,主要是冒泡排序。感觉这东西了解一下就算了,找工作之前刷一下就好。
2.写出了RMI远程调用的helloworld
接口
public interface IHello extends Remote {
public String helloWorld() throws RemoteException;
public String sayHelloToSomeBody(String someBodyName) throws RemoteException;
}
实现
public class RMITest {
public static void main(String args[]){
try {
//在RMI服务注册表中查找名称为RHello的对象,并调用其上的方法
IHello rhello =(IHello) Naming.lookup("rmi://localhost:8888/RHello");
System.out.println(rhello.helloWorld());
System.out.println(rhello.sayHelloToSomeBody("熔岩"));
} catch (NotBoundException e) {
e.printStackTrace();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (RemoteException e) {
e.printStackTrace();
}
}
}
客户端
public class HelloServer {
public static void main(String args[]) {
try {
//创建一个远程对象
IHello rhello = new HelloImpl();
//本地主机上的远程对象注册表Registry的实例,并指定端口为8888,这一步必不可少(Java默认端口是1099),必不可缺的一步,缺少注册表创建,则无法绑定对象到远程注册表上
LocateRegistry.createRegistry(8888);
//把远程对象注册到RMI注册服务器上,并命名为RHello
//绑定的URL标准格式为:rmi://host:port/name(其中协议名可以省略,下面两种写法都是正确的)
Naming.bind("rmi://localhost:8888/RHello", rhello);
// Naming.bind("//localhost:8888/RHello",rhello);
System.out.println(">>>>>INFO:远程IHello对象绑定成功!");
} catch (RemoteException e) {
System.out.println("创建远程对象发生异常!");
e.printStackTrace();
} catch (AlreadyBoundException e) {
System.out.println("发生重复绑定对象异常!");
e.printStackTrace();
} catch (MalformedURLException e) {
System.out.println("发生URL畸形异常!");
e.printStackTrace();
}
}
}
跑通了RMI的一个小Demo。
在考虑模拟两个服务器的情况。来让客户端随机访问服务器,调用对应服务器的方法。
具体的想法是这样的:
配置两个服务xml,配置两个客户xml
让客户端随机访问服务器,调用方法。
明天计划的事
学习使用spring rmi
碰到的问题
no security manager: RMI class loader disabled  
客户端的代码中的 main class 的开始就要 添加System.setSecurityManager(new RMISecurityManager()); 
以启用 RMI Class Loader; 否则会出现该错误:
(no security manager: RMI class loader disabled)。
ps:服务器和客户端的接口、接口包名、接口名称、接口内容都必须一样。甚至两者之间传输的实体的包名也必须一致。
收获
补了一些以前的基础知识
了解了一些关于rmi的事



返回列表 返回列表
评论

    分享到