看到RMI,首先想到了这个问题,什么是RMI
Java RMI (Remote Method Invocation 远程方法调用)是用Java在JDK1.1中实现的,它大大增强了Java开发分布式应用的能力。Java作为一种风靡一时的网络开发语言,其巨大的威力就体现在它强大的开发分布式网络应用的能力上,而RMI就是开发百分之百纯Java的网络分布式应用系统的核心解决方案之一。其实它可以被看作是RPC的Java版本。但是传统RPC并不能很好地应用于分布式对象系统。而Java RMI 则支持存储于不同地址空间的程序级对象之间彼此进行通信,实现远程对象之间的无缝远程调用。(从网上copy的,呵呵)
它与WEBSERVICE有什么区别。
rmi的客户端和服务端都必须是java,webservice没有这个限制
webservice是在http协议上传递xml文本文件,与语言和平台无关
rmi是在tcp协议上传递可序列化的java对象,只能用在java虚拟机上,绑定语言
RMI是EJB远程调用的基础,仅用RMI技术就可以实现远程调用,使用EJB是为了实现组件,事物,资源池,集群等功能。
WebService是通过XML来传输数据,可用http等协议因此可在异构系统间传递,并且可以穿过防火墙,可在公网上远程调用。
一张图解释远程方法调用的过程。RMI将客户辅助对象称为stub,服务辅助对象成为skeleton。
下面是一个RMI的入门实例。
目录结构:
1. 被调用的远程对象必须实现java.rmi.Remote接口,该接口是一个空接口,只是用来标志实现它的对象可以被远程访问。开发中一般根据业务需要自己创建接口来继承该接口,并封装可以被远程调用的方法。
package edu.rob.rmi.remote;
import java.rmi.Remote;
import java.rmi.RemoteException;
public interface MyRemote extends Remote {
public String getHello() throws RemoteException;
}
远程调用依赖网络与IO,因此接口中的方法必须抛出RemoteException,否则会报错误 - java.rmi.server.ExportException: remote object implements illegal remote interface
2. 然后创建该接口的实现类,一般继承自UnicastRemoteObject:
package edu.rob.rmi.remote;
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
public class MyRemoteImpl extends UnicastRemoteObject implements MyRemote {
private static final long serialVersionUID = 1579125597612791522L;
public MyRemoteImpl() throws RemoteException {}
@Override
public String getHello() {
System.out.println("Sever: hello");
return "hello";
}
}
3. 在server端的rmi registry中注册该服务。在client访问远程方法之前,必须完成server端的绑定。
package edu.rob.rmi.server;
import java.net.MalformedURLException;
import java.rmi.Naming;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import edu.rob.rmi.remote.MyRemoteImpl;
import edu.rob.rmi.remote.MyRemote;
public class HelloRMIServer {
public static void main(String[] args) {
try {
MyRemote h = new MyRemoteImpl();
LocateRegistry.createRegistry(1099);
Naming.rebind("rmi://192.168.1.101:1099/hello", h);
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (RemoteException e) {
e.printStackTrace();
}
}
}
4. 编写client访问远程方法。需要注意的是,client同样需要一份远程方法的接口。直接将server端的接口拷贝至客户端就可以(注意包名、类名必须相同)。
package edu.rob.rmi.client;
import java.net.MalformedURLException;
import java.rmi.Naming;
import java.rmi.NotBoundException;
import java.rmi.RemoteException;
import edu.rob.rmi.remote.MyRemote;
public class HelloRMIClient {
public static void main(String[] args) {
try {
MyRemote h = (MyRemote) Naming.lookup("rmi://192.168.1.101:1099/hello");
System.out.println("Client: " + h.getHello());
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (RemoteException e) {
e.printStackTrace();
} catch (NotBoundException e) {
e.printStackTrace();
}
}
}
先运行HelloRMIServer,再运行HelloRMIClient,我们能再控制台看到如下输出
Sever: hello
Client: hello
- 大小: 42.2 KB
- 大小: 1.6 MB
分享到:
相关推荐
**零基础入门RMI:** 1. **理解基本概念:** - **远程对象(Remote Object)**:这是在远程主机上运行的Java对象,可以通过网络被其他客户端访问。 - **接口(Interface)**:定义远程对象的方法,这个接口需要...
在本文中,我们将深入探讨Java Remote Method Invocation (RMI)技术,通过一个具体的实例来学习如何设置、构建和调试RMI应用。RMI是Java提供的一种远程对象调用机制,它允许Java对象在不同的JVM之间进行通信。在这个...
这个"java RMI入门例子"将带你深入理解RMI的工作原理和主要组件。 RMI的核心概念包括: 1. **远程接口**:这是定义远程方法的接口,通常继承自java.rmi.Remote。这些方法声明抛出java.rmi.RemoteException,表示...
这个“rmi入门(带源码)”的资源可能是一个教学资料或实践项目,帮助初学者理解和应用RMI技术。 首先,我们来详细了解一下RMI的基本概念: 1. **远程接口(Remote Interface)**:这是定义远程方法的接口。它继承了...
**RMI(Remote Method Invocation)入门小结** 远程方法调用(RMI)是Java平台上的一个关键特性,它允许Java对象在不同的JVM(Java虚拟机)之间进行交互,从而实现分布式计算。RMI是Java开发分布式应用程序的基础,...
3. **服务器端**:在服务器端启动服务,实例化远程对象并将其注册到RMI注册表。 4. **客户端**:客户端通过RMI注册表获取远程对象的引用,然后就可以像调用本地对象一样调用远程对象的方法。 RMI的优势在于: - **...
【标题】:“RMI入门” 远程方法调用(Remote Method Invocation,简称RMI)是Java平台提供的一种用于在分布式环境中实现对象间通信的技术。RMI允许一个Java对象调用网络另一端的Java对象的方法,就像调用本地对象...
2. **远程对象**:远程对象是实现了远程接口的实例,它可以驻留在网络中的任何地方。Java RMI允许这些对象的引用在不同进程中传递,使得客户端可以调用远程对象的方法。 3. **注册表(Registry)**:RMI注册表是一...
远程对象(Remote Object)是实现了远程接口的实例,驻留在服务器端,客户端通过引用远程接口来与服务器交互。 2. **注册表(Registry)**:RMI系统中的注册表是一个服务,用于存储远程对象的引用。客户端可以通过...
标题 "CORBA与RMI的比较及实例" 涉及到的是两种分布式计算技术——Common Object Request Broker Architecture (CORBA) 和 Remote Method Invocation (RMI) 的对比以及实际应用的示例。这两种技术都是为了让运行在...
远程对象的实例化和生命周期管理是RMI系统的一部分。 3. **注册表**:在RMI中,一个叫做RMIServer的注册表服务负责管理和查找远程对象。客户端通过注册表获取远程对象的引用,从而进行通信。 4. **stubs/skeletons...
java rmi入门级实例:分为三个javase项目,rmi-api(存放公共的接口和实体),rmi-server(rmi服务器端),rmi-client(rmi客户端),其中服务端和客户端都依赖rmi-api项目
这是一个Hessian入门学习的实例,程序包是一个web工程,使用intellij idea + Maven开发,其中通过两个方式展示了使用Hessian实现RMI的原理,一个是访问jsp页面,一个是在代码中手工创建client。对于Hessian Servlet...
【标题】"dubbo+zookeeper入门实例"是一个关于使用Dubbo框架与Zookeeper结合实现服务发现和服务调用的基础教程。Dubbo是阿里巴巴开源的一款高性能、轻量级的Java分布式服务框架,而Zookeeper则是一个分布式服务协调...
【JAVA-RMI使用快速入门】 Java RMI(Remote Method Invocation,远程方法调用)是Java平台中用于构建分布式应用程序的一种核心技术。它允许Java对象在不同的Java虚拟机(JVM)之间进行交互,实现了"Write Once, ...
总的来说,"Ice经典入门和实例"是一套完整的学习资料,涵盖了Ice的基本概念、核心功能、高级特性和实战应用,对于想要掌握这个分布式对象中间件的开发者来说,是非常宝贵的资源。通过深入学习和实践,你将能熟练地...
【Dubbo入门实例详解】 Dubbo,作为阿里巴巴开源的一款高性能、轻量级的服务框架,它致力于提供一个简单、高效、可扩展的分布式服务解决方案。在本入门实例中,我们将通过两个核心组件——`dubboserver`(服务提供...