RMI

1、RMI概念

     Distributed Computing is known as exchange message among many machines on the network.Except RMI ,there are other distributed computing techenologies ,such as CORBO(Common Object Request Broker),RPC.

     RMI enables one JVM to invoke objects methods that will run on another JVM located elsewhere on the network.

 

 

 

 

 

 

 

http://blog.youkuaiyun.com/lucifer1016/archive/2007/09/10/1778970.aspx

http://apusic.javaeye.com/blog/44930

http://www.javaeye.com/topic/173909

http://cache.baidu.com/c?m=9d78d513d9831ef409f9d33e53198d205f1697624fcacd532296c81984642c100630bfac27554c5395d83a7a01ad4b5be8f634782a0027aa9ac38848dcbe983f2fff7d722f42&p=8b2a90128f891bf919bd9b7d0659&user=baidu

03-24
### Java RMI 教程及相关问题 远程方法调用 (Remote Method Invocation, RMI) 是一种用于实现客户端和服务器之间通信的技术。它允许对象在不同的虚拟机上运行并相互交互,就像它们在同一进程中一样[^1]。 #### RMI 的基本概念 RMI 提供了一种机制,使得程序可以像调用本地方法那样调用远程对象上的方法。这种技术依赖于序列化来传输数据,并通过动态代理类支持接口的透明调用[^3]。 以下是 RMI 工作的核心组件: - **Stub 和 Skeleton**: Stub 负责接收来自客户端的方法调用并将请求转发给远程对象;Skeleton 则负责将这些请求传递到实际的对象实例。 - **Registry**: 远程对象注册表是一个服务,用来存储远程对象的引用以便客户端能够查找并连接到它们。 #### 创建简单的 RMI 应用程序 要创建一个基于 RMI 的应用程序,通常需要以下几个步骤: 1. 定义远程接口:该接口必须扩展 `java.rmi.Remote` 接口,并声明所有可被远程访问的方法为抛出 `java.rmi.RemoteException` 的抽象方法。 ```java import java.rmi.*; public interface Hello extends Remote { String sayHello() throws RemoteException; } ``` 2. 实现远程接口:编写具体的实现类继承自 `UnicastRemoteObject` 并提供接口定义的功能。 ```java import java.rmi.server.UnicastRemoteObject; import java.rmi.RemoteException; public class HelloImpl extends UnicastRemoteObject implements Hello { protected HelloImpl() throws RemoteException { super(); } @Override public String sayHello() throws RemoteException { return "Hello, world!"; } } ``` 3. 启动命名服务(rmiregistry),绑定远程对象至注册中心。 ```bash rmiregistry & ``` 4. 编写服务器端代码以启动服务并与注册表关联。 ```java import java.rmi.registry.LocateRegistry; import java.rmi.registry.Registry; public class Server { public static void main(String args[]) { try { Registry registry = LocateRegistry.createRegistry(1099); Hello helloObj = new HelloImpl(); registry.rebind("HelloServer", helloObj); System.out.println("Server ready"); } catch (Exception e) { System.err.println("Server exception: " + e.toString()); e.printStackTrace(); } } } ``` 5. 开发客户端应用去定位远程对象并通过其 stub 来执行操作。 ```java import java.rmi.registry.LocateRegistry; import java.rmi.registry.Registry; public class Client { private Client() {} public static void main(String[] args) { try { Registry registry = LocateRegistry.getRegistry("localhost"); Hello stub = (Hello) registry.lookup("HelloServer"); String response = stub.sayHello(); System.out.println("response: " + response); } catch (Exception e) { System.err.println("Client exception: " + e.toString()); e.printStackTrace(); } } } ``` #### 常见问题排查 如果遇到与 RMI 相关的问题,可以从以下方面入手分析: - 网络配置错误可能导致无法建立连接; - 防火墙阻止了必要的端口通讯; - 类加载器未能正确处理跨 JVM 边界的类版本差异等问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值