1.创建接口,继续Remote接口
package com.rmi.server; import java.rmi.Remote; import java.rmi.RemoteException; import java.util.Date; public interface HelloService extends Remote { public String echo(String msg) throws RemoteException; public Date getDate() throws RemoteException; }
2.创建服务类,继续Remote接口
package com.rmi.server; import java.rmi.RemoteException; import java.rmi.server.UnicastRemoteObject; import java.util.Date; public class HelloServiceImpl extends UnicastRemoteObject implements HelloService { private static final long serialVersionUID = 1L; String name; protected HelloServiceImpl(String name) throws RemoteException { this.name = name; } @Override public String echo(String msg) throws RemoteException { System.out.println(name + ":调用echo()方法"); return "echo:" + msg + " from " + name; } @Override public Date getDate() throws RemoteException { System.out.println(name + ":调用getDate()方法"); return new Date(); } }
3.绑定服务
package com.rmi.server; import java.rmi.registry.LocateRegistry; import javax.naming.Context; import javax.naming.InitialContext; public class SimpleServer { public static void main(String[] args) { try { HelloService service1 = new HelloServiceImpl("service1"); HelloService service2 = new HelloServiceImpl("service2"); Context namingContext = new InitialContext(); // 之前一直报javax.naming.ServiceUnavailableException,加上此方法后才正常 LocateRegistry.createRegistry(1099); namingContext.rebind("rmi://127.0.0.1:1099/HelloService1", service1); namingContext.rebind("rmi://127.0.0.1:1099/HelloService2", service2); System.out.println("服务器启动..."); } catch (Exception e) { e.printStackTrace(); } } }
4.客户端调用
package com.rmi.client; import javax.naming.Context; import javax.naming.InitialContext; import javax.naming.NameClassPair; import javax.naming.NamingEnumeration; import com.rmi.server.HelloService; public class SimpleClient { public static void showRemoteObjects(Context namingContext) throws Exception { NamingEnumeration<NameClassPair> e = namingContext.list("rmi:"); while (e.hasMore()) { System.out.println(e.next().getName()); } } public static void main(String[] args) { String url = "rmi://127.0.0.1:1099/"; try { Context namingContext = new InitialContext(); HelloService service1 = (HelloService) namingContext.lookup(url + "HelloService1"); HelloService service2 = (HelloService) namingContext.lookup(url + "HelloService2"); Class stubClass = service1.getClass(); System.out.println("service1 是" + stubClass.getName() + "的实例"); Class[] interfaces = stubClass.getInterfaces(); for (int i = 0; i < interfaces.length; i++) { System.out.println("存根类实现了" + interfaces[i].getName() + "接口"); } System.out.println(service1.echo("测试")); System.out.println(service1.getDate()); System.out.println(service2.echo("测试2")); System.out.println(service2.getDate()); showRemoteObjects(namingContext); } catch (Exception e) { e.printStackTrace(); } } }
5.输出
服务端:
服务器启动... service1:调用echo()方法 service1:调用getDate()方法 service2:调用echo()方法 service2:调用getDate()方法
客户端:
service1 是$Proxy0的实例 存根类实现了java.rmi.Remote接口 存根类实现了com.rmi.server.HelloService接口 echo:测试 from service1 Tue Jul 29 16:14:34 CST 2014 echo:测试2 from service2 Tue Jul 29 16:14:34 CST 2014 HelloService1 HelloService2
6.LocateRegistry.createRegistry(int port)
java.rmi包中提供了类java.rmi.registry.LocateRegistry,用于获取名字服务或创建名字服务.调用LocateRegistry.createRegistry(int port)方法可以在某一特定端口创建名字服务,从而用户无需再手工启动rmiregistry.此外,LocateRegistry.getRegistry(String host,int port)方法可用于获取名字服务.
如果不写LocateRegistry.createRegistry(int port),也可以运行命令start rmiregistry [port]启动注册表,默认1099端口
相关推荐
这个"JAVA RMI简单例子"旨在帮助我们深入理解RMI的基本原理和实现步骤。 RMI的核心概念包括远程接口、远程对象和RMIC编译器。首先,我们需要定义一个远程接口,该接口声明了可以在远程服务器上执行的方法。这些方法...
以下是对"java RMI简单例子"的详细解释: 1. **RMI的基本概念**: - **远程对象**:在RMI中,一个对象如果可以在不同的JVM上执行其方法,那么就被称为远程对象。 - **远程接口**:定义远程对象需要实现的接口,...
通过这个完整的Java RMI通信例子,我们可以学习如何在实际项目中利用RMI来构建分布式系统,提升应用的可扩展性和灵活性。同时,理解RMI的工作原理也有助于我们更好地设计和实现其他分布式技术,如EJB、Web服务等。
这个"java RMI入门例子"将带你深入理解RMI的工作原理和主要组件。 RMI的核心概念包括: 1. **远程接口**:这是定义远程方法的接口,通常继承自java.rmi.Remote。这些方法声明抛出java.rmi.RemoteException,表示...
通过学习和实践这个RMI例子,我们可以深入理解Java的分布式编程能力,这对于开发大型企业级应用或者分布式系统来说是非常有价值的。同时,了解RMI的工作原理也有助于我们更好地掌握其他类似技术,如JDBC、JNDI等。
### Java RMI基础知识与示例解析 #### 一、RMI简介 远程方法调用(Remote Method Invocation,简称RMI)是Java平台提供的一种用于实现分布式应用的技术。它允许对象在不同的JVM之间通过网络相互调用对方的方法,就...
根据提供的文件信息,我们可以深入探讨Java RMI(Java Remote Method Invocation)的相关知识点,包括其概念、原理、体系结构以及一个具体的示例。...这个例子展示了如何利用RMI技术来构建分布式应用程序。
java rmi小例子源代码 ,运行Reg.java ,再执行Client客户端代码就能看效果。如果在不同jvm下执行,注意接口定义包路径客服端和服务端必须保持一致。 客服端包含文件有服务端接口的定义文件。
我的博客《Java中的RMI(远程方法调用)》的示例代码
这个简单的例子将引导我们了解如何利用Java RMI实现远程调用。 首先,我们要创建远程接口。在Java RMI中,远程接口是一个实现了`java.rmi.Remote`接口的Java接口。接口中声明的方法将在客户端调用,实际上会在...
Java RMI(Remote Method Invocation)是Java编程语言中用于实现远程过程调用的一种技术。它允许运行在客户机上的程序调用位于远程服务器上的对象的方法,从而实现分布式计算。RMI的核心思想是通过接口隐藏底层网络...
Java RMI(Remote Method Invocation,远程方法调用)是Java平台提供的一种用于分布式计算的技术,它允许一个Java对象调用另一个在不同 JVM(Java虚拟机)上的对象的方法。这个简单的示例展示了如何创建一个基本的...
Spring Remote Method Invocation (RMI) 是Java平台上的一个远程对象调用框架,它允许你在分布式环境中调用对象...通过理解并实践这个小例子,你将能够更好地掌握Spring RMI的用法,为构建更复杂的分布式系统打下基础。
在这个"Spring RMI小例子"中,我们将深入理解Spring如何简化RMI的使用,以及如何通过它实现跨网络的交互。 首先,RMI允许Java对象在不同的JVM之间进行通信,仿佛它们都在同一个进程中运行。Spring通过提供自动注册...
Java RMI,全称为Remote Method Invocation,是Java平台上的一个标准API,用于实现分布式计算,使得在不同Java虚拟机(JVM)上的...通过这个简单的例子,你可以理解RMI的工作机制,并为更复杂的分布式系统打下基础。
这个简单的例子展示了RMI的基本使用方式。实际应用中,可能会涉及到更复杂的网络交互、多线程、安全性控制等话题。理解RMI的工作原理和实践,对于开发分布式Java应用至关重要。同时,由于RMI依赖于Java序列化,因此...
Java RMI (Remote Method Invocation) 是一种用于在Java应用程序之间进行远程通信的技术。为了提高RMI通信的安全性,我们可以使用SSL (Secure Sockets Layer) 或其后继者TLS (Transport Layer Security) 进行加密。...
在这个"SpringRMI小例子"中,我们将深入探讨如何利用Spring框架来增强RMI的功能,使其更加灵活和易于管理。 首先,我们需要理解Spring框架在RMI中的角色。Spring提供了对RMI的高级抽象,通过其`org.springframework...
描述中提到的"java rmi例子"表明其中可能包含了一个或多个实际的RMI应用实例,这对于学习和理解RMI的工作原理非常有帮助。 首先,让我们详细了解Java RMI的核心概念和组件: 1. **远程接口(Remote Interface)**...
Java Remote Method Invocation(RMI)是Java平台中用于...通过这个简单的例子,你可以了解到如何创建一个基本的RMI应用程序。在实际项目中,RMI可以与其他技术(如EJB、Spring框架)结合,构建更复杂的分布式系统。