`
liuInsect
  • 浏览: 133362 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

JAVA 自带的RMI远程调用功能的实现和原理

阅读更多

本文介绍的是使用JDK自带的RMI包,实现简单的远程方法调用功能,虽有众多局限,在生产环境上未必能用上,但对于理解原理是非常有好处的,请深刻理解。

 

说明:

1. 本文使用的是JDK1.6+的版本

2. 文中会使用到rmic功能,这个工具是在本地生成Stub和Skeleton的工具,在JAVA_HOME\bin文件中有自带,

    若想使用,请在path环境变量中添加%JAVA_HOME%\bin  目的是将JAVA_HOME\bin下的命令添加到path变量中,

    使得rmic命令在dos的任何目录下使用。

 

 

先上代码,服务端类:

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

/**
 * UnicastRemoteObject 通过exportObject方法 将本实例export出去
 * @author liuinsect
 *
 */

public class SayHello extends UnicastRemoteObject    implements SayHelloInterface {

	//
	protected SayHello() throws RemoteException {
		super();
	}

	/**
	 * 序列化的标示
	 */
	private static final long serialVersionUID = 999999L;
	
	/**
	 * 在服务端的具体方法
	 */
	@Override
	public void sayHello() {
		
		System.out.println(" hello ");

	}
	
	/**
	 * 在服务端的具体方法
	 */
	@Override
	public void sayHelloT0(String name) {
		System.out.println(" hello " + name);
		
	}

}
 
import java.rmi.Remote;
import java.rmi.RemoteException;

/**
 * 作为标示,说明该接口支持远程调用
 * @author liuinsect
 *
 */

public interface SayHelloInterface extends Remote {
	
	public void sayHello( ) throws RemoteException;
	
	public void sayHelloT0( String name) throws RemoteException;
}

 

import java.rmi.*;


/**
 * 服务端,完成的是发布服务的功能
 * @author liuinsect
 *
 */

public class Server
{
    public static void main(String[] args)
    {
        try
        {
        	
        	SayHelloInterface hello = new SayHello();                //实例化要发布的类
            Naming.rebind("RMI_Hello", hello);      //绑定RMI名称 进行发布,其实是将rmic生成的stub文件绑定待rmi registry中
            System.out.println("=== Hello server Ready === ");
        }
        catch(Exception exception)
        {
            exception.printStackTrace();
        }
    }
}

 

客户端类:

import java.rmi.*;


/**
 * 客户端类,调用远程服务
 * @author liuinsect
 *
 */
public class Client {
    public static void main(String[] args) {
        try
        {	
        	//在RIM registry中需找名为RMI_Hello的服务
        	SayHelloInterface say = (SayHelloInterface) Naming.lookup("rmi://127.0.0.1/RMI_Hello");  //通过RMI名称查找远程对象
             say.sayHello();                        //调用远程对象的方法 ,这个时候的对象是在本地用classloader load进stub后,反序列化SayHelloInterface对象生成的
             say.sayHelloT0("jack ");				//
        } catch (Exception e)
        {
          e.printStackTrace();
        }
    }

}
 

 

  编写好后,继续:

  1. 在工程的bin文件下为SayHello.class生成stub类,即进入dos后cd到SayHello.class所在目录,

      执行 rimc SayHello   (注意,别加后缀)

 

  2. 成功后,执行命令: rmiregistry   启动rmiregistry服务

 

   3. 先运行server,再运行client  就可以了。。。

 

分享到:
评论

相关推荐

    RMI原理及实现

    总结来说,RMI是Java中实现分布式计算的关键技术,通过理解其工作原理和实现步骤,开发者可以构建跨越多个JVM的高效应用程序。同时,合理地使用RMI工具和优化策略,能够进一步提升应用的性能和安全性。

    Java远程控制简单实现

    至于“工具”,可能是指使用Java自带的RMI工具或者其他的辅助工具,如JConsole,用于管理和监控远程Java应用程序。 由于没有具体的博客内容,我们无法深入讨论细节。不过,你可以通过提供的博文链接访问原文,了解...

    Java RMI-IIOP示例

    它结合了Java RMI(远程方法调用)和CORBA(Common Object Request Broker Architecture)的IIOP协议,使得Java对象可以跨网络进行交互,如同在本地一样操作。在Java RMI-IIOP中,ORBS(Object Request Brokers)...

    RMI

    **远程方法调用(Remote Method Invocation,RMI)** RMI是Java平台中用于实现分布式计算的一种机制。它允许一个Java对象在某台计算机上执行方法,而...了解其工作原理和最佳实践对于任何Java开发者来说都是有价值的。

    RMI协议的应用与研究

    通过阅读和理解这两部分代码,可以深入理解RMI的工作原理和使用方法。 工具的使用: 在开发RMI应用时,常用的工具有JDK自带的RMI注册表(rmiregistry)、`rmic`编译器(用于生成stub和skeleton文件),以及IDE如...

    RMI.rar_remote

    在实现RMI时,开发者需要注意网络通信的性能优化,如减少远程调用的次数,缓存远程对象的引用,以及正确处理并发和线程安全问题。此外,调试RMI应用程序可能会比较复杂,因为错误通常涉及到网络和多线程,所以理解...

    RMI demo

    【RMI(远程方法调用)基础介绍】 RMI(Remote Method Invocation,远程方法调用)是Java平台中用于分布式计算的一种技术。...通过阅读和理解这些源码,可以更深入地学习RMI的工作原理和实现细节。

    RMI入门小结

    以下是对RMI基础概念和实现步骤的详细讲解。 1. **RMI的基本概念** - **远程接口(Remote Interface)**:这是定义远程方法的接口,必须继承`java.rmi.Remote`接口,声明抛出`java.rmi.RemoteException`异常的远程...

    Java中简单的分布式调用RMI

    Java中的RMI(Remote Method Invocation)是一种用于实现跨JVM的远程调用技术,它是Java标准库自带的功能,无需额外引入第三方库。RMI使得在不同的虚拟机之间,对象能够像调用本地方法一样调用远程对象的方法,实现...

    rmi入门

    综上所述,学习RMI入门需要理解其核心概念,掌握创建远程接口和实现类的方法,了解RMI的工作流程,熟悉序列化过程,以及能够编写简单的RMI服务端和客户端程序。同时,通过阅读相关的源码和使用相关的工具,可以...

    spring rmi 小例子

    1. **接口定义**:在RMI中,我们需要定义一个公共接口,该接口声明了可被远程调用的方法。这个接口应该标记为`@Remote`,例如: ```java public interface MyRemoteService extends Remote { String doSomething...

    动态代理原理实例Demo

    - 动态代理还可用于模拟远程调用,比如RMI(远程方法调用)中的代理对象,以及单元测试中模拟依赖对象。 综上所述,Java动态代理提供了一种灵活的方式,可以在不修改原对象代码的情况下,扩展或修改其行为。通过...

    Java 2 SE 6 Documentation(帮助文档)

    9. **部署和网络**:讲解了如何打包和发布Java应用程序,以及如何处理网络通信、RMI(远程方法调用)和套接字编程。 10. **附录**:包含各种参考信息,如字符集、错误和异常代码、JNI(Java Native Interface)等。...

    基于数据压缩技术的分布式数据库系统的构造与实现

    Java自带的`java.util.zip`包提供了文件和数据流的压缩功能,这对于实现数据压缩至关重要。 - **RMI (Remote Method Invocation)**:RMI是Java提供的远程方法调用技术,使得开发者能够在网络上透明地调用远程对象的...

    技术选型分享:JAVA中几种常用的RPC框架介绍.docx

    RMI是Java自带的远程方法调用框架,它允许Java对象在不同JVM之间进行交互。RMI的核心包括接口定义、接口实现和客户端调用。服务端通过继承`UnicastRemoteObject`并实现接口来提供服务,客户端通过`Registry`查找...

    JMX-how-to-use.rar_jmx_服务器_远程监控 文件

    JConsole和VisualVM是Java自带的JMX客户端工具,可以方便地连接到运行中的JMX服务器进行监控。此外,还可以使用开源工具如JManage、JMXTERM或自定义的JMX客户端来访问和操作MBeans。 5. **安全配置** 远程JMX访问...

    jabsorb应用案例

    "jabsorb learning.rtf"文件很可能是这个案例的详细步骤和代码示例,包括如何设置项目、编写接口和实现、启动服务器、创建客户端并进行调用等。通过阅读和实践这个案例,你可以更好地理解JabSorb的工作原理,并将其...

    1000道 互联网大厂Java工程师面试题.pdf

    15. DubboMonitor实现原理:监控和统计服务调用情况。 16. Dubbo用到的设计模式:工厂模式、代理模式、策略模式等。 17. Dubbo配置文件如何加载到Spring中:通过XML配置或注解方式将Dubbo配置整合到Spring应用中。 ...

    分析JAVA中几种常用的RPC框架

    RMI 是 Java 自带的远程方法调用工具,允许在不同的 JVM 中进行通信。RMI 的序列化和反序列化是 Java 自带的,传输协议则是 JRMP(Java Remote Method Protocol)。RMI 的使用非常广泛,但它有一定的局限性,毕竟是 ...

Global site tag (gtag.js) - Google Analytics