`
ywChen
  • 浏览: 117692 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

RMI入门

    博客分类:
  • J2EE
阅读更多

    RMI全称是Remote Method Invocation-远程方法调用,Java RMI在JDK1.1中实现的,其威力就体现在它强大的开发分布式网络应用的能力上,是纯Java的网络分布式应用系统的核心解决方案之一。其实它可以被看作是RPC的Java版本。但是传统RPC并不能很好地应用于分布式对象系统。而Java RMI 则支持存储于不同地址空间的程序级对象之间彼此进行通信,实现远程对象之间的无缝远程调用。


    通俗来说即远程方法调用是一种计算机之间对象互相调用对方函数,启动对方进程的一种机制,使用这种机制,某一台计算机上的对象在调用另外一台计算机上的方法时,使用的程序语法规则和在本地机上对象间的方法调用的语法规则一样。

 

 

RMI(远程方法调用)原理示意图 


 

 方法调用从客户对象经占位程序(Stub)、远程引用层(Remote Reference Layer)和传输层(Transport Layer)向下,传递给主机,然后再次经传 输层,向上穿过远程调用层和骨干网(Skeleton),到达服务器对象。 占位程序扮演着远程服务器对象的代理的角色,使该对象可被客户激活。 远程引用层处理语义、管理单一或多重对象的通信,决定调用是应发往一个服务器还是多个。传输层管理实际的连接,并且追踪可以接受方法调用的远程对象。服务器端的骨干网完成对服务器对象实际的方法调用,并获取返回值。返回值向下经远程引用层、服务器端的传输层传递回客户端,再向上经传输层和远程调用层返回。最后,占位程序获得返回值。 

要完成以上步骤需要有以下几个步骤: 

    1、 生成一个远程接口 

    2、 实现远程对象(服务器端程序)

    3、 生成占位程序和骨干网(服务器端程序)

    4、 编写服务器程序 

    5、 编写客户程序 

    6、 注册远程对象 

    7、 启动远程对象 

 

    【例】简单rmi入门例子

 

package rmi;
import java.rmi.Remote;
import java.rmi.RemoteException;
/** 
 * 第1步:必须定义接口,要求如下:每个方法必须抛出异常 
 */  
public interface HelloInterface extends Remote  
{  
    public String sayHello() throws RemoteException;  
}  

 

 

 

package rmi;
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;

/** 
 * 第2步:接口实现类,也就是真正的服务端 
 * 要求:继承UnicaseRemoteObject是最简单的方法 
 *  
 *  
 */  
public class HelloImpl extends UnicastRemoteObject implements HelloInterface {  
	 // 这个实现必须有一个显式的构造函数,并且要抛出一个RemoteException异常   
    public HelloImpl() throws RemoteException  
    {  
        super();  
    }  
  
    public String sayHello() throws RemoteException  
    {  
        return "hllo";  
    }  
}  

 

 

package rmi;
import java.net.MalformedURLException;
import java.rmi.Naming;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
/** 
 * 第三步:注册服务 
 *  
 *  
 */  
public class RMIServer {
	public static void main(String[] args) throws RemoteException,
			MalformedURLException {
		// 不必再执行rmiregistry了
		LocateRegistry.createRegistry(1099);
		HelloInterface hello = new HelloImpl();

		// 注册服务
		Naming.rebind("//localhost/hello", hello);
	}
}

 


 

package rmi;
import java.net.MalformedURLException;
import java.rmi.Naming;
import java.rmi.NotBoundException;
import java.rmi.RemoteException;

/** 
 * 第四步:远程调用 
 *  
 *  
 */ 
public class RMIClient {
	public static void main(String[] args) throws MalformedURLException,
			RemoteException, NotBoundException {
		HelloInterface hello = (HelloInterface) Naming
				.lookup("//localhost/hello");

		System.out.println(hello.sayHello());
	}
}
 

 

 

 

 

 

  • 大小: 35.7 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics