本文介绍的是使用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是Java中实现分布式计算的关键技术,通过理解其工作原理和实现步骤,开发者可以构建跨越多个JVM的高效应用程序。同时,合理地使用RMI工具和优化策略,能够进一步提升应用的性能和安全性。
至于“工具”,可能是指使用Java自带的RMI工具或者其他的辅助工具,如JConsole,用于管理和监控远程Java应用程序。 由于没有具体的博客内容,我们无法深入讨论细节。不过,你可以通过提供的博文链接访问原文,了解...
它结合了Java RMI(远程方法调用)和CORBA(Common Object Request Broker Architecture)的IIOP协议,使得Java对象可以跨网络进行交互,如同在本地一样操作。在Java RMI-IIOP中,ORBS(Object Request Brokers)...
**远程方法调用(Remote Method Invocation,RMI)** RMI是Java平台中用于实现分布式计算的一种机制。它允许一个Java对象在某台计算机上执行方法,而...了解其工作原理和最佳实践对于任何Java开发者来说都是有价值的。
通过阅读和理解这两部分代码,可以深入理解RMI的工作原理和使用方法。 工具的使用: 在开发RMI应用时,常用的工具有JDK自带的RMI注册表(rmiregistry)、`rmic`编译器(用于生成stub和skeleton文件),以及IDE如...
在实现RMI时,开发者需要注意网络通信的性能优化,如减少远程调用的次数,缓存远程对象的引用,以及正确处理并发和线程安全问题。此外,调试RMI应用程序可能会比较复杂,因为错误通常涉及到网络和多线程,所以理解...
【RMI(远程方法调用)基础介绍】 RMI(Remote Method Invocation,远程方法调用)是Java平台中用于分布式计算的一种技术。...通过阅读和理解这些源码,可以更深入地学习RMI的工作原理和实现细节。
以下是对RMI基础概念和实现步骤的详细讲解。 1. **RMI的基本概念** - **远程接口(Remote Interface)**:这是定义远程方法的接口,必须继承`java.rmi.Remote`接口,声明抛出`java.rmi.RemoteException`异常的远程...
Java中的RMI(Remote Method Invocation)是一种用于实现跨JVM的远程调用技术,它是Java标准库自带的功能,无需额外引入第三方库。RMI使得在不同的虚拟机之间,对象能够像调用本地方法一样调用远程对象的方法,实现...
综上所述,学习RMI入门需要理解其核心概念,掌握创建远程接口和实现类的方法,了解RMI的工作流程,熟悉序列化过程,以及能够编写简单的RMI服务端和客户端程序。同时,通过阅读相关的源码和使用相关的工具,可以...
1. **接口定义**:在RMI中,我们需要定义一个公共接口,该接口声明了可被远程调用的方法。这个接口应该标记为`@Remote`,例如: ```java public interface MyRemoteService extends Remote { String doSomething...
- 动态代理还可用于模拟远程调用,比如RMI(远程方法调用)中的代理对象,以及单元测试中模拟依赖对象。 综上所述,Java动态代理提供了一种灵活的方式,可以在不修改原对象代码的情况下,扩展或修改其行为。通过...
9. **部署和网络**:讲解了如何打包和发布Java应用程序,以及如何处理网络通信、RMI(远程方法调用)和套接字编程。 10. **附录**:包含各种参考信息,如字符集、错误和异常代码、JNI(Java Native Interface)等。...
Java自带的`java.util.zip`包提供了文件和数据流的压缩功能,这对于实现数据压缩至关重要。 - **RMI (Remote Method Invocation)**:RMI是Java提供的远程方法调用技术,使得开发者能够在网络上透明地调用远程对象的...
RMI是Java自带的远程方法调用框架,它允许Java对象在不同JVM之间进行交互。RMI的核心包括接口定义、接口实现和客户端调用。服务端通过继承`UnicastRemoteObject`并实现接口来提供服务,客户端通过`Registry`查找...
JConsole和VisualVM是Java自带的JMX客户端工具,可以方便地连接到运行中的JMX服务器进行监控。此外,还可以使用开源工具如JManage、JMXTERM或自定义的JMX客户端来访问和操作MBeans。 5. **安全配置** 远程JMX访问...
"jabsorb learning.rtf"文件很可能是这个案例的详细步骤和代码示例,包括如何设置项目、编写接口和实现、启动服务器、创建客户端并进行调用等。通过阅读和实践这个案例,你可以更好地理解JabSorb的工作原理,并将其...
15. DubboMonitor实现原理:监控和统计服务调用情况。 16. Dubbo用到的设计模式:工厂模式、代理模式、策略模式等。 17. Dubbo配置文件如何加载到Spring中:通过XML配置或注解方式将Dubbo配置整合到Spring应用中。 ...
RMI 是 Java 自带的远程方法调用工具,允许在不同的 JVM 中进行通信。RMI 的序列化和反序列化是 Java 自带的,传输协议则是 JRMP(Java Remote Method Protocol)。RMI 的使用非常广泛,但它有一定的局限性,毕竟是 ...