`
wen866595
  • 浏览: 268952 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

RMI简单实例

 
阅读更多
1、定义一个表示远程服务的接口RemoteInterface,必须继承自java.rmi.Remote(Remote是一个标识,没有抽象的方法)。
在RemoteInterface里定义可被远程调用的方法,方法必须声明抛出java.rmi.RemoteException。
public interface RemoteInterface extends Remote {
	public long serverTime() throws RemoteException;
}


2、定义一个类RemoteClass继承自UnicastRemoteObject类,且实现了远程服务接口RemoteInterface,
public class RemoteClass extends UnicastRemoteObject implements RemoteInterface {
	private static final long serialVersionUID = 1L;

	protected RemoteClass() throws RemoteException {
		super();
	}

	@Override
	public long serverTime() throws RemoteException {
		return System.currentTimeMillis();
	}
	
	public static void main(String[] args) {
		try {
			RemoteClass rc = new RemoteClass();
			
			// 创建一个远程对象注册表,并绑定到端口8985;
			// 如果要绑定IP,则使用createRegistry(int port, RMIClientSocketFactory csf, RMIServerSocketFactory ssf),通过
			// 在RMIClientSocketFactory、RMIServerSocketFactory的定制实现里绑定IP。
			Registry registry = LocateRegistry.createRegistry(8985);
			
			// 在rmi远程对象注册表注册一个远程对象。
			registry.bind("serverTime", rc);
			
		} catch (RemoteException e) {
			e.printStackTrace();
		} catch (AlreadyBoundException e) {
			e.printStackTrace();
		}
		
	}

}


3、客户端查找远程对象的示例
public class ClientClass {

	public static void main(String[] args) {
		// 通过远程注册表查找远程对象
		try {
			// 获取远程注册表
			Registry remoteRegistry = LocateRegistry.getRegistry("127.0.0.1", 8985);
			
			// 从远程注册表获取远程对象
			RemoteInterface remoteTime = (RemoteInterface)remoteRegistry.lookup("serverTime");

			for(int i = 0; i < 10; i++) {
				System.out.println("remote time :" + remoteTime.serverTime());
			}
			
		} catch (RemoteException e) {
			e.printStackTrace();
		} catch (NotBoundException e) {
			e.printStackTrace();
		}
		// 通过远程注册表查找远程对象 end
		
		
		System.out.println("================================================");
		
		// 通过rmi协议查找远程对象
		try {
			// 查找远程对象
			RemoteInterface remoteTime = (RemoteInterface)Naming.lookup("rmi://127.0.0.1:8985/serverTime");
			
			for(int i = 0; i < 10; i++) {
				System.out.println("remote time :" + remoteTime.serverTime());
			}
			
		} catch (MalformedURLException e) {
			e.printStackTrace();
		} catch (RemoteException e) {
			e.printStackTrace();
		} catch (NotBoundException e) {
			e.printStackTrace();
		}
	}

}


4、编译这些类,用rmic编译器生成根:
rmic RemoteClass
在对应的包下会出现一个文件:RemoteClass_Stub.class

5、先后运行  RemoteClass ,ClientClass ,结果大致如下:
remote time :1303288008309
remote time :1303288008309
remote time :1303288008309
remote time :1303288008309
remote time :1303288008309
remote time :1303288008309
remote time :1303288008309
remote time :1303288008309
remote time :1303288008309
remote time :1303288008309
================================================
remote time :1303288008325
remote time :1303288008325
remote time :1303288008325
remote time :1303288008325
remote time :1303288008325
remote time :1303288008325
remote time :1303288008325
remote time :1303288008325
remote time :1303288008325
remote time :1303288008325

执行远程方法调用成功。





网上找到的绑定IP的其他方法,未验证:
System.setProperty("java.rmi.server.hostname", ip);


Naming.rebind("rmi://"+serverPath + ":" + port + "/" + serverName,
serverInterface);




分享到:
评论

相关推荐

    JAVA RMI简单例子

    这个"JAVA RMI简单例子"旨在帮助我们深入理解RMI的基本原理和实现步骤。 RMI的核心概念包括远程接口、远程对象和RMIC编译器。首先,我们需要定义一个远程接口,该接口声明了可以在远程服务器上执行的方法。这些方法...

    java RMI简单例子

    以下是对"java RMI简单例子"的详细解释: 1. **RMI的基本概念**: - **远程对象**:在RMI中,一个对象如果可以在不同的JVM上执行其方法,那么就被称为远程对象。 - **远程接口**:定义远程对象需要实现的接口,...

    rmi简单例子

    根据提供的文件信息,本文将详细解释RMI(远程方法调用)的概念、工作原理以及一个简单的RMI示例。RMI是一种Java技术,允许在不同的Java虚拟机(JVM)之间进行远程过程调用。 ### RMI简介 RMI是Java平台提供的一种...

    spring RMI简单例子

    在这个简单的例子中,我们将深入理解Spring RMI的工作原理以及如何实现一个基本的Spring RMI应用。 首先,让我们了解RMI的基本概念。RMI允许Java对象在不同的JVM之间进行通信,仿佛它们都在同一台机器上。它通过...

    rmi简单例子,可以学习一下

    在"rmi简单例子,可以学习一下"这个主题中,我们将深入探讨RMI的基本概念、工作原理以及如何创建一个简单的RMI应用。 RMI的核心思想是将Java对象的方法调用跨越网络进行,使得一台机器上的客户端程序可以像调用本地...

    RMI简单实例RMI简单实例

    RMI在Java中提供了一种强大的分布式计算模型,使得对象之间的远程通信变得简单且高效。通过定义远程接口、实现远程对象、在服务器端注册以及在客户端调用这些步骤,可以构建起一个完整的RMI系统。在实际应用中,RMI...

    RMI简单实例.docx

    在本实例中,我们将详细了解如何创建一个简单的RMI应用。 首先,我们要定义一个远程接口。在Java RMI中,所有可被远程调用的方法都必须在一个实现了`Remote`接口的接口中声明。这个接口被称为远程接口。例如: ```...

    RMI简单例子

    以上就是一个简单的RMI应用实例,它展示了如何定义、实现远程接口,以及在服务器和客户端之间进行交互。在实际开发中,你可能需要考虑异常处理、安全性、性能优化等更多因素,但这个基础例子已经足以让你理解RMI的...

    java rmi 简单实例

    远程服务的接口定义  远程服务接口的具体实现  桩(Stub)和框架... 一个RMI命名服务,它允许客户端去发现这个远程服务  类文件的提供者(一个HTTP或者FTP服务器)  一个需要这个远程服务的客户端程序

    spring与rmi 整合实例 源码详解

    spring 与rmi 的整合 1.首先编写接口 interface : 这里的接口要继承Remote, 它是一个标识接口 2.编写实现类 3.编写main方法用于启动 service 4 配置spring文件 编写客户端测试类

    java简单示例rmi

    一个简单的RMI示例步骤如下: 1. 定义远程接口,如: ```java import java.rmi.Remote; import java.rmi.RemoteException; public interface MyRemoteInterface extends Remote { String doSomething(String ...

    一个java RMI应用实例 构建简单的RMI应用

    创建客户端RMI调用服务端的应用程序。 启动服务端,再启动客户端,测试是否调用成功。 如果客户端和服务端不在同一台电脑上,则需要对刚才定义的服务类采用rmic 编译一个客户端的框架类_stub并拷贝到客户端的类...

    java rmi 简单易懂的实例

    通过这个简单的实例,学习者可以了解到Java RMI的基本工作流程,以及如何在实践中部署和使用远程对象。深入研究后,还可以探索更复杂的场景,如并发调用、安全性控制、容错机制等,以构建更加健壮和高效的分布式系统...

    Java RMI的简单例子

    ### Java RMI基础知识与示例解析 ...通过以上详细分析,我们可以清楚地了解到如何使用Java RMI来实现简单的分布式应用。尽管RMI在现代Java开发中的使用频率不高,但了解其基本原理和技术细节仍然具有一定的价值。

    Java RMI 简单示例

    总结来说,Java RMI简单示例主要展示了以下知识点: 1. **远程接口**:定义了远程方法的签名,需要继承`Remote`接口。 2. **远程对象**:服务器端的类实现远程接口,并继承`UnicastRemoteObject`,以支持远程调用。 ...

    rmi使用实例

    ### RMI 使用实例详解 #### 一、RMI 概述 远程方法调用(Remote Method Invocation,简称 RMI)是 Java 平台提供的一种分布式计算技术,它允许开发者创建可跨网络调用的方法,就像在本地调用一样简单。RMI 的设计...

    RMI的简单完整例子

    下面将详细解释RMI的基本概念、工作原理以及如何创建一个简单的RMI应用。 1. **RMI基本概念** - **远程对象**:RMI的核心是远程对象,它是驻留在网络上另一台计算机上的Java对象,可以通过网络调用其方法。 - **...

    SpringRMI小例子

    在这个"SpringRMI小例子"中,我们将深入探讨如何利用Spring框架来增强RMI的功能,使其更加灵活和易于管理。 首先,我们需要理解Spring框架在RMI中的角色。Spring提供了对RMI的高级抽象,通过其`org.springframework...

    一个简单的RMI实例

    这个“简单的RMI实例”演示了如何在不依赖像Tomcat这样的Web服务器的情况下实现RMI。下面我们将深入探讨RMI的基本概念、配置过程以及如何创建和运行这个实例。 ### RMI基本概念 1. **远程对象(Remote Object)**:...

Global site tag (gtag.js) - Google Analytics