8. Activation
通过调用UnicastRemoteObject.exportObject()方法发布的远程对象的生命周期是从发布起,一直到所在应用停止为止。RMI的activation机制允许在rmid中发布可激活的激活描述符,只有当客户端发起远程调用时才真正构造远程对象。
8.1 MyRemote类
public interface MyRemote extends Remote{
public Product getProduct(int productId) throws RemoteException;
}
8.2 Product实现了Serializable
public class Product implements Serializable{
private static final long serialVersionUID = 5206082551028038485L;
private int id;
private String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String toSring(){
return new ToStringBuilder(this, ToStringStyle.SHORT_PREFIX_STYLE)
.append("id")
.append("name")
.toString();
}
}
8.3 RmiUtil工具类
public abstract class RmiUtil {
public static int getRegistryPort(){
return Registry.REGISTRY_PORT;
}
public static Registry getRegistry() throws Exception{
return getRegistry(Registry.REGISTRY_PORT);
}
public static Registry getRegistry(int port) throws Exception{
Registry reg = LocateRegistry.getRegistry(port);
reg.list();
return reg;
}
public static Registry getRegistry(String host) throws Exception{
return LocateRegistry.getRegistry(host, Registry.REGISTRY_PORT);
}
public static Registry getRegistry(String host, int port) throws Exception{
return LocateRegistry.getRegistry(host, port);
}
}
8.4 MyRemoteImpl实现类
public class MyRemoteImpl implements MyRemote{
@Override
public Product getProduct(int productId) throws RemoteException {
final Product product = new Product();
product.setId(productId);
product.setName("xiao");
return product;
}
public static void main(String[] args) throws Exception{
MyRemoteImpl remote = new MyRemoteImpl();
MyRemote myRemote = (MyRemote)UnicastRemoteObject.exportObject(remote, 0);
Registry reg = RmiUtil.getRegistry();
reg.bind("MyRemote", myRemote);
System.out.println("server started");
}
}
8.5 Client客户端
public class Client {
public static void main(String[] args) throws Exception {
Registry reg = RmiUtil.getRegistry();
MyRemote remote = (MyRemote)reg.lookup("MyRemote");
System.out.println(" name = " + remote.getProduct(1).getName());
}
}
9. 垃圾回收
RMI采用其分布式垃圾回收功能收集不再被网络中任何客户程序所引用的远程服务对象。当前的分布式垃圾回收采用的是引用计数的方式(类似于Modula-3's Network Objects),因此无法检测到循环引用的情况,这要求程序员打破循环引用,以便无用的对象可以被回收。RMI运行时通过WeakReference引用远程对象,当某个远程对象不再被任何客户端引用时,JVM会对其进行垃圾回收。
分享到:
相关推荐
**基于JAVA RMI的聊天室** Java Remote Method Invocation(RMI)是Java平台提供的一种用于在分布式环境中调用远程对象的方法。在这个“基于JAVA RMI的聊天室”项目中,开发者利用RMI技术构建了一个简单的多用户...
2. **RMI架构**:RMI的核心组件包括远程接口(Remote Interface)、远程对象(Remote Object)、RMIC编译器和RMI注册表(RMI Registry)。远程接口定义了客户端可以调用的远程方法,远程对象实现了这些接口并实际...
根据提供的文件信息,我们可以深入探讨Java RMI(Java Remote Method Invocation)的相关知识点,包括其概念、原理、体系结构以及一个具体的示例。 ### RMI的概念 RMI是一种Java技术,它允许开发者创建分布式应用...
2. 远程对象:实现了远程接口的类,代表实际执行远程方法的实体,需要继承`java.rmi.Remote`并实现接口中的所有方法。 3. RMIServer:服务器端程序,负责注册远程对象到RMI注册表,使得客户端可以通过名称查找并调用...
Java RMI(Remote Method Invocation,远程方法调用)是一种Java技术,允许在分布式环境中执行远程对象的方法。这个技术的核心是序列化和反序列化过程,它使得对象可以在网络上进行传输。然而,这个特性也可能引入...
2. **实现远程接口**:然后,创建一个实现远程接口的类,该类通常需要继承自`java.rmi.Remote`接口,并且抛出`java.rmi.RemoteException`。在这个实现类中,你需要实现远程接口中的所有方法。 3. **创建并注册远程...
### Java RMI (Remote Method Invocation) 概念与实践 #### 一、Java RMI简介 Java RMI(Remote Method Invocation)是一种允许调用不同Java虚拟机(JVM)上方法的机制。这些JVM可能位于不同的机器上,也可能在同一...
Java Remote Method Invocation(Java RMI)是Java编程语言中用于在网络间进行远程对象调用的技术。它是Java平台的标准部分,允许程序员在分布式环境中调用对象的方法,就像它们在同一台计算机上一样。Java RMI对于...
但需要注意的是,它并不适合所有场景,特别是在高并发和大流量的情况下,可能需要考虑其他更高效的通信机制,如RMI的替代品如Java的JMS(Java Message Service)或者更现代的HTTP/2和WebSocket协议。
Java RMI(Remote Method Invocation)是Java编程语言中用于实现远程过程调用的一种技术。它允许运行在客户机上的程序调用位于远程服务器上的对象的方法,从而实现分布式计算。RMI的核心思想是通过接口隐藏底层网络...
2. **银行应用程序**:Java RMI可以用来构建一个分布式银行应用程序,其中不同服务器负责处理账户、交易等业务逻辑,而客户端则可以轻松地与这些远程服务进行交互。 #### 四、Java RMI的设计与实现 1. **设计阶段*...
Java RMI(远程方法调用)是Java编程语言中的一项核心技术,自JDK 1.1版本起就被引入,用于构建分布式系统。RMI允许Java对象在不同的Java虚拟机(JVMs)之间进行交互,仿佛这些对象是在同一台机器上一样。这种技术的...
2. `RemoteObjectImpl.java`: 实现了`IRemoteInterface`,提供了远程方法的具体实现。 3. `Server.java`: 在服务器端启动,实例化`RemoteObjectImpl`并注册到RMI注册表。 4. `Client.java`: 客户端代码,查找并调用...
Java RMI(Remote Method Invocation,远程方法调用)是Java平台提供的一种用于分布式计算的技术,它允许一个Java对象调用另一个在不同 JVM(Java虚拟机)上的对象的方法。这个简单的示例展示了如何创建一个基本的...
2. 可移动属性:RMI 可将属性(类实现程序)从客户机移动到服务器,或者从服务器移到客户机。 3. 安全:RMI 使用 Java 内置的安全机制保证下载执行程序时用户系统的安全。 4. 便于编写和使用:RMI 使得 Java 远程...
**JAVA RMI(远程方法调用)详解** Java RMI(Remote Method Invocation)是Java平台上的一个核心特性,它允许Java程序在不同的JVM(Java虚拟机)之间进行分布式计算,实现了对象间的远程调用。RMI使得开发者可以像...
Java RMI(Remote Method Invocation,远程方法调用)是Java平台中用于构建分布式对象系统的关键技术。它允许Java应用程序在不同Java虚拟机(JVM)之间进行远程方法调用,这些虚拟机可能位于同一台计算机或网络上的...
Java RMI(Remote Method Invocation,远程方法调用)是Java平台提供的一种分布式计算技术,它允许Java对象在不同的网络环境中进行交互,就像调用本地方法一样。RMI是构建分布式应用的重要工具,尤其适用于需要跨...
Java Remote Method Invocation (RMI) 是Java平台中用于构建分布式应用程序的一种重要技术。RMI允许Java对象在不同的Java虚拟机(JVM)之间调用方法,从而实现了远程对象的透明访问。这个RAR文件"JAVA RMI.rar"包含...
Java RMI,全称为Remote Method Invocation,是Java平台上的一个标准API,用于实现分布式计算,使得在不同Java虚拟机(JVM)上的对象能够互相调用方法。这个"java rmi HelloWorld版(源码)"的压缩包文件提供了一个...