最近在学习序列化,看到远程调用也和序列化有关,于是顺便学学RMI,权当玩玩
1:所谓远程,并不需要分布在Internet上,或者在局域网中个,或者在同一台计算机的不同虚拟机之间,我们都可以称之为远程。EJB的实现也是以Java RMI为基础核心的。RMI远程方法调用,可以跨机器通过网络调用,不过Java RMI只支持两边都是Java程序,如果要实现完全两边异构,那么就要用到传说中的Web Service了。为了看好效果,都要建立两个或两个以上工程,当然,如果你有两个机器并通过局域网相连更好,如果能同有互联网的条件就更好了,以下是同一机器不同工程之间的小测试。
(1)首先建立一个服务端的工程,就叫RMIServerTest吧
(2)创建接口ServerInterface,继承Remote接口
package com.bona.rmi.server; import java.rmi.Remote; import java.rmi.RemoteException; /** * 定义远程接口,必须继承Remote接口, * 其中所有需要远程调用的方法都必须抛出RemoteException异常 */ public interface HelloInterface extends Remote { public String sayHello(String name) throws RemoteException; }
(3)创建接口的实现类 HelloInterfaceImpl,继承UnicastRemoteObject ,实现 HelloInterface 接口
package com.bona.rmi.server; import java.rmi.RemoteException; import java.rmi.server.UnicastRemoteObject; public class HelloInterfaceImpl extends UnicastRemoteObject implements HelloInterface{ private static final long serialVersionUID = 1L; public HelloImpl() throws RemoteException { super(); } @Override public String sayHello(String name) throws RemoteException { return "Hello, " + name; } }
说明:接口的实现类同时要实现Serializable接口,这里继承UnicastRemoteObject也是间接实现Serializable接口,同时,因为构造方法需要抛出RemoteException,所以不能缺省使用隐含的无参构造方法,而应该自己显式定义构造方法。
(3)创建应用类,注册和启动服务端RMI,以被客户端调用
package com.bona.rmi.server; import java.net.MalformedURLException; import java.rmi.AlreadyBoundException; import java.rmi.Naming; import java.rmi.RemoteException; import java.rmi.registry.LocateRegistry; public class HelloServer { public static void main(String args[]) { try { //创建一个远程对象 HelloInterface rhello = new HelloInterfaceImpl(); //生成远程对象注册表Registry的实例,并指定端口为8888(默认端口是1099) LocateRegistry.createRegistry(8888); //把远程对象注册到RMI注册服务器上,并命名为RHello //绑定的URL标准格式为:rmi://host:port/name(协议名可以省略,下面两种写法都可以) Naming.bind("rmi://10.225.112.86:8888/HelloInterface", rhello); //Naming.bind("//10.225.112.86:8888/HelloInterface",rhello); System.out.println(">>INFO:远程HelloInterface对象绑定成功!"); } catch (RemoteException e) { System.out.println("创建远程对象发生异常!"); e.printStackTrace(); } catch (AlreadyBoundException e) { System.out.println("发生重复绑定对象异常!"); e.printStackTrace(); } catch (MalformedURLException e) { System.out.println("发生URL畸形异常!"); e.printStackTrace(); } } }
运行HelloServer,看到
>>INFO:远程HelloInterface对象绑定成功!
(4)新建一个新的工程,为了方便,也是Java Project,就叫RMIClientTest,
(5) 因为客户端需要有服务端那边提供的接口,才可以访问,所以要将服务端的HelloInterface接口完全拷贝(连同包)到客户端,当然为了方便,你在客户端工程中新建一个完全一样的接口也可以。实际运用中通常是要服务端接口打成jar包来提供的。
(6)创建客户端调用类
package com.bona.rmi.client; import java.rmi.Naming; import com.bona.rmi.server.HelloInterface; public class HelloClient { public static void main(String args[]) { try { // 在RMI服务注册表中查找名称为RHello的对象,并调用其上的方法 HelloInterface rhello = (HelloInterface) Naming.lookup("rmi://10.225.112.86:8888/HelloInterface"); System.out.println(rhello.sayHello("白哥")); } catch (Exception e) { e.printStackTrace(); } } }
运行,显示成功
相关推荐
Java RMI(Remote Method Invocation,远程方法调用)是Java平台提供的一种分布式计算技术,它允许Java对象在不同的网络环境中进行交互,就像它们在同一个进程内一样。RMI是Java在分布式系统领域的核心特性,极大地...
在Java RMI应用开发中,有几个关键点需要注意: 1. **远程服务接口定义**: - 接口是RMI的核心,它定义了可供远程调用的方法。这些接口需要继承`java.rmi.Remote`接口,并声明可能抛出`RemoteException`的异常。...
在这个“Java RMI的应用”项目中,我们看到一个用RMI实现的课程成绩管理系统。这个系统由几个关键组件组成,包括服务器端和客户端的接口、实现以及支持文件。 1. **RMI基本概念**:RMI的核心是远程对象,这些对象...
Java RMI(远程方法调用)是Java编程语言中的一项核心技术,自JDK 1.1版本起就被引入,用于构建分布式系统。RMI允许Java对象在不同的Java虚拟机(JVMs)之间进行交互,仿佛这些对象是在同一台机器上一样。这种技术的...
Java中RMI(Remote Method Invocation)的实现机制是Java分布式应用系统的核心解决方案之一。RMI使得Java对象之间可以进行远程方法调用,是Java实现分布式应用系统的关键技术之一。 RMI的实现机制可以分为三个步骤...
根据提供的文件信息,我们...通过以上步骤,我们成功地实现了一个简单的RMI应用程序,其中包括了远程接口的定义、远程对象的实现、服务器端和客户端的代码实现。这个例子展示了如何利用RMI技术来构建分布式应用程序。
2. 远程对象:实现了远程接口的类,代表实际执行远程方法的实体,需要继承`java.rmi.Remote`并实现接口中的所有方法。 3. RMIServer:服务器端程序,负责注册远程对象到RMI注册表,使得客户端可以通过名称查找并调用...
Java RMI(Remote Method Invocation,远程方法调用)是Java平台提供的一种用于构建分布式应用程序的技术。它允许Java对象在不同的网络计算机之间进行交互,仿佛它们都在同一台机器上运行。这个压缩包“java_rmi.zip...
描述中提到的"java rmi例子"表明其中可能包含了一个或多个实际的RMI应用实例,这对于学习和理解RMI的工作原理非常有帮助。 首先,让我们详细了解Java RMI的核心概念和组件: 1. **远程接口(Remote Interface)**...
JAVA远程调用RMI与应用 一、RMI(Remote Method Invocation)概念解析 RMI,即远程方法调用,是Java平台提供的分布式计算模型,它允许Java对象跨网络进行方法调用,如同本地调用一样。RMI的实现基于Java的面向对象...
1. **远程对象(Remote Object)**:这是RMI的核心,它是一个实现了特定接口(继承自java.rmi.Remote)的对象,该接口中的方法声明抛出java.rmi.RemoteException。远程对象可以驻留在网络上的任何地方,并通过网络...
在这个实例中,我们将详细探讨如何通过四个步骤来设置和使用一个简单的 Java RMI 应用。 1. 创建远程接口及声明远程方法 首先,我们需要定义一个远程接口 `HelloInterface`,它继承自 `java.rmi.Remote`。这个接口...
在实际应用中,RMI常用于构建服务器应用程序,如分布式数据库、分布式计算系统、网格计算等。通过RMI,开发者可以轻松地在不同的JVM之间交换数据,实现复杂的服务交互。 在"249866"这个文件名中,可能是指该压缩...
在创建RMI应用时,一般步骤包括: 1. 定义远程接口。 2. 创建远程接口的实现。 3. 在服务器端注册远程对象。 4. 在客户端查找并调用远程对象的方法。 5. 处理异常,特别是`RemoteException`。 在提供的文件列表中...
6. **RMISecurityManager**:为了确保安全,RMI应用通常会使用`RMISecurityManager`,它提供了对远程调用的访问控制和权限管理。 7. **异常处理**:`RemoteException`是RMI中最常见的异常,它通常表示在调用远程...
Java RMI(Remote Method Invocation,远程方法调用)是Java平台中用于构建分布式对象系统的关键技术。它允许Java应用程序在不同Java虚拟机(JVM)之间进行远程方法调用,这些虚拟机可能位于同一台计算机或网络上的...
Java RMI(Remote Method Invocation)技术是Java平台中用于分布式计算的一种机制,它允许一个Java对象调用远程计算机上的另一个Java对象的方法。在本案例中,“java RMI技术实现的网络聊天室”是一个使用RMI构建的...
10. **CORBA兼容性**:Java RMI还支持与公共对象请求代理架构(CORBA)的互操作,这使得Java RMI应用能够与其他CORBA应用进行交互。 #### 三、Java RMI的典型应用场景 1. **网络打印服务**:通过Java RMI,可以...
Java RMI(Remote Method ...这些实例可能涵盖基本的RMI应用,以及更复杂的场景,例如处理并发请求、优化性能、处理安全性和异常等。实践中学习是掌握RMI的最佳途径,因此,这个压缩包将是一个宝贵的教育资源。
在这次的项目中,对于客户端与服务器之间的通信,想了许多办法,由于做的是富客户端应用,最终将技术选定在了RMI和Java-sockets两种之间,其中RMI的灵活性不高,客户端和服务器端都必须是java编写,但使用比较方便,...