Java远程方法调用(Java Remote Method Invocation,简称RMI)是实现RPC的一种机制。Java RMI实现过程可分为以下几个步骤:
1. 创建远程接口及声明远程方法;
2.
创建远程对象及实现远程方法;
3.
服务器端启动RMI注册服务,注册远程对象;
4.
客户端查找远程对象并调用远程方法。
远程接口具有如下特点:
1. 远程接口必须为public属性。如果不这样,除非客户端与远程接口在同一个包内,否则 当试图装入实现该远程接口的远程对象时,调用会得到错误结果。
2. 远程接口必须扩展接口java.rmi.Remote。
3. 除与应用程序本身特定的例外之外,远程接口中的每个方法都必须在自己的throws从句中 声明java.rmi.RemoteException。(或 RemoteException 的父类)。
4. 作为参数或返回值传递的一个远程对象(不管是直接,还是本地对象中嵌入)必须声明为远 程接口,而不应声明为实施类。
5. 参数或返回值若为对象,该对象必须实行序列号接口 Serializable
其代码如下:
1)
创建远程接口及声明远程方法
package com.server;
import java.rmi.Remote;
import java.rmi.RemoteException;
public interface RmiSample extends Remote{
public int sum(int a, int b) throws RemoteException;
public void save(Student s) throws RemoteException;
public Student get() throws RemoteException;
}
2) 创建远程对象及实现远程接口方法
package com.server;
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
public class RmiSampleImpl extends UnicastRemoteObject implements RmiSample{
/**
*
*/
private static final long serialVersionUID = -7851182277085789517L;
protected RmiSampleImpl() throws RemoteException {
super();
}
@Override
public int sum(int a, int b) throws RemoteException {
return a + b;
}
@Override
public void save(Student s) throws RemoteException {
System.out.println("student id is :"+s.getId());
System.out.println("student name is :"+s.getName());
}
@Override
public Student get() throws RemoteException {
Student s = new Student();
s.setId(2);
s.setName("学生2");
return s;
}
}
3) 服务器端启动RMI注册服务,将远程对象进行注册
package com.server;
import java.net.MalformedURLException;
import java.rmi.Naming;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
public class RmiSampleServer {
public static void main(String[] args) {
try{
LocateRegistry.createRegistry(8808);
//LocateRegistry.createRegistry(1099);
RmiSampleImpl server= new RmiSampleImpl();
Naming.rebind("//localhost:8808/SAMPLE-SERVER" , server);
//Naming.rebind("server" , server);
}catch (MalformedURLException me){
System.out.println("Malformed URL: " + me.toString());
}catch(RemoteException re){
System.out.println("Remote Exception: "+re.toString());
}
}
}
4) 客户端查找远程对象并调用远程方法
package com.client;
import java.rmi.RemoteException;
import java.rmi.Naming;
import com.server.RmiSample;
import com.server.Student;
public class RmiSampleClient {
public static void main(String[] args) {
try {
String url = "//localhost:8808/SAMPLE-SERVER";
//RmiSample RmiObject = (RmiSample) Naming.lookup("server");
RmiSample RmiObject = (RmiSample) Naming.lookup(url);
System.out.println(" 3 + 2 = " + RmiObject.sum(3, 2));
Student s = new Student();
s.setId(1);
s.setName("学生1");
RmiObject.save(s);
Student student = RmiObject.get();
System.out.println("student id is :"+student.getId());
System.out.println("student name is :"+student.getName());
} catch (RemoteException rex) {
System.out.println("Error in lookup: " + rex.toString());
} catch (java.net.MalformedURLException me) {
System.out.println("Malformed URL: " + me.toString());
} catch (java.rmi.NotBoundException ne) {
System.out.println("NotBound: " + ne.toString());
}
}
}
分享到:
相关推荐
本文档主要讲述的是Java 远程方法调用RMI参数详解;根据RMI参数意义,可以归结为以下几点,我们可以根据这几点通过优化GC, 网络等待,流传输协议(http/rmi special socket)等方面来优化RMI。
三种方式实现java远程调用(rmi) 方式一:原始方式 方式二:spring 方式三:jndi 解压,放到myeclipse上可用
rmi 远程方法调用 客户端
java远程方法调用,可以实现远程调用,仅作参考
rmi java 远程方法调用
JAVA RMI远程调用方法代码 RMI 远程 java
Java RMI远程方法调用详解-例子代码,例子详解在:http://blog.csdn.net/guyuealian/article/details/51992182
JAVA远程调用RMI与应用
java实现远程调用的完整实例,可在linux环境下启动远程服务,window下执行操作。代码有详细说明。
讲述利用java rmi进行分布式应用开发的相关知识
Java RMI 远程方法调用的一个小例子
java rmi 实现远程调用服务的简单的例子。
Java RMI远程方法调用的小Demo。详细:http://blog.csdn.net/u014375869/article/details/39344963
Java远程方法调用是一种分布式系统技术。它允许一个java虚拟机调用运行在网络中另一个地方的JVM上的对象方法. 这种技术对开发大型系统尤为重要,因为它使得在多台机器上分布资源和处理负载的想法成为可能。
java rmi 远程方法调用 服务端
最近在学习代理模式,用到了java rmi远程调用,包含服务端和客户端,之前一直没有接触过,学习了java rmi远程调用,一方面可以了解代理模式,一方面熟悉java低层的远程
Java RMI远程方法调用,简单明了,欢迎大家下载
java jdk1.8; eclipse 开发环境;实现A机器的程序,可以管理(增加、删除、改等)B机器上的某个文件夹或者目录;掌握远程过程调用原理,基于...客户端利用RMI实现远程调用服务。同时,在在两台机器之间验证结果正确。
NULL 博文链接:https://xiongjiajia.iteye.com/blog/1292142