第一步:接口(客户端与服务器端共享)
//Product.java
import java.rmi.*;
public interface Product extends Remote
{
String getDescription() throws RemoteException;
}
>javac Product.java
第二步:接口实现
//ProductImpl.java
import java.rmi.*;
import java.rmi.server.*;
public class ProductImpl extends UnicastRemoteObject implements Product
{
public ProductImpl(String n) throws RemoteException
{
name=n;
}
public String getDescription() throws RemoteException
{
return “I am a “+name+”. Buy me!”;
}
private String name;
}
>javac ProductImpl.java
第三步:存根类生成(生成ProductImpl_Stub.class,需要客户端和服务器端共享)
>rmic ProductImpl
第四步:服务器端
//ProductServer.java
import java.rmi.*;
import java.rmi.server.*;
import javax.naming.*;
public class ProductServer {
/**
* @param args
*/
public static void main(String[] args) {
// TODO 自动生成方法存根
try
{
System.out.println(”Constructing server implementations…”);
ProductImpl p1=new ProductImpl(”Blackwell Toaster”);
ProductImpl p2=new ProductImpl(”ZapXpress Microwave Oven”);
System.out.println(”Binding server implements to registry…”);
Naming.rebind(”rmi://localhost:1099/toaster”,p1);
Naming.rebind(”rmi://localhost:1099/microwave”,p2);
System.out.println(”Waiting for invocations from clients…”);
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
>javac ProductServer.java
第五步:配置服务器段
修改权限:在%JRE_HOME%\lib\security\java.policy文件最后添加
grant {
permission java.net.SocketPermission “*:1024-65535″, “connect”;
};
启动rmi注册:>start rmiregistry
启动服务端程序:>start java ProductServer
第六步:客户端
//ProductClient.java
import java.rmi.*;
import java.rmi.server.*;
import javax.naming.*;
public class ProductClient {
public static void main(String[] args)
{
System.setProperty(”java.security.policy”,”client.policy”);
System.setSecurityManager(new RMISecurityManager());
String url=”rmi://localhost/”;
try
{
Context namingContext=new InitialContext();
Product c1=(Product)namingContext.lookup(url+”toaster”);
Product c2=(Product)namingContext.lookup(url+”microware”);
System.out.println(c1.getDescription());
System.out.println(c2.getDescription());
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
>javac ProductClient
>java ProductClient
其他:
测试服务器提供的服务
//ShowBindings.java
import java.rmi.*;
import java.rmi.server.*;
import javax.naming.*;
public class ShowBindings
{
public static void main(String[] args)
{
try
{
Context namingContext=new InitialContext();
NamingEnumeration<nameclasspair></nameclasspair> e=namingContext.list(”rmi:”);
while(e.hasMore())
System.out.println(e.next().getName());
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
>javac ShowBindings.java
>java ShowBindings
参考资料:《Java2核心技术 卷2 高级特性》
分享到:
相关推荐
在这个"第一个简单的RMI程序"中,`server`文件夹可能包含了服务器端的代码,包括远程接口和实现,以及启动服务器的主类。`client`文件夹则可能包含客户端代码,用于查找远程对象并调用其方法。`download`可能包含了...
创建RMI应用的第一步是定义远程接口。这个接口声明了可以被远程调用的方法。例如: ```java import java.rmi.Remote; import java.rmi.RemoteException; public interface MyRemoteInterface extends Remote { ...
在IT领域,远程方法调用(Remote Method Invocation,简称RMI)是一种用于分布式计算的技术,它允许一个程序在不同的网络节点上执行另一程序的方法。RMI最初由Java语言提出并广泛应用,但此处提及的是如何在VC++环境...
- **RMI 功能**:RMI 包括多种功能,每种功能都由一个特定的功能号标识。 - **功能编号**:每个功能都有一个唯一的功能编号,用于识别不同的功能。 - **寄存器**:RMI 使用不同类型的寄存器来存储数据和控制信息。 ...
"ch11"可能是指该压缩包中的第11章内容,通常在教程或书籍中,这一章节可能详细介绍了如何创建和运行一个简单的RMI应用,包括设置环境、编写远程接口和实现、注册远程对象、编写客户端代码等步骤。通过实践这个例子...
C++ Remote Method Invocation (RMI) 是一种在分布式系统中实现对象间远程调用的技术,它允许一个程序在一台计算机上执行操作,而这些操作实际上是在另一台计算机上的对象上进行的。C++ 并非原生支持RMI,但通过第三...
在IT行业中,远程方法调用(Remote Method Invocation,简称RMI)是一种允许程序在不同的网络节点上执行对象方法的技术。Java RMI是Java平台提供的一个核心特性,它使得分布式计算变得简单。本篇我们将探讨如何使用...
AutoBoot作为一款高度灵活且强大的引导加载程序,为RMI Alchemy系列处理器提供了广泛的支持。通过对该手册的深入学习,用户不仅可以掌握如何构建和安装AutoBoot,还能了解如何根据具体需求对其进行定制化配置,从而...
远程方法调用(Remote Method Invocation,RMI)是Java编程语言中的一种机制,它允许一个对象的方法被运行在不同JVM(Java Virtual Machine)上的另一个对象调用。这个标题"RMI.rar_remote"暗示了这是一个关于Java ...
第一章概述中,RMI被定义为Java的远程过程调用机制,允许不同Java虚拟机之间的对象通信,跨越单台或多台计算机。这种技术促进了分布式对象的使用,使得应用程序能够远程调用方法并共享资源。RMI的优势在于它的面向...
实现RMI的第一步是定义远程接口,这个接口声明了可以在远程对象上调用的方法。在航班管理系统中,可能有一个名为`FlightService`的接口,包含了诸如查询航班、预订座位等方法。接着,需要创建该接口的实现类,这些类...
- **对象激活**:当远程对象第一次被调用时自动启动该对象所在的进程。 #### 5. **实战RMI** - **实战RMI**通常涉及以下几个步骤: - **定义远程接口**:定义远程对象的方法签名。 - **实现远程接口**:创建...
RMI的第二节是为了更好地理解RMI的Marshalling(对象序列化),在继续之前完成第一个活动是非常重要的。内容推荐工具: 蚀Java 1.6 或更高版本。 面向对象编程的中级知识。在 Eclipse 中安装: 克隆存储库。 在 ...
在RMI利用分析中,文章还提到了服务注册和请求的流程,包括对RMIRegistry的bind方法的深入跟踪,观察到向RMIRegistry申请服务时,第三个参数对应于操作集中的操作。这部分讨论强调了对RMI协议细节的理解,以及如何...
实现RMI程序包括创建远程接口、实现接口并继承UnicastRemoteObject、注册远程对象到Registry,以及在客户端调用远程方法。自定义RMI实现通常涉及编写服务器监听(如使用Socket)和客户端连接,数据的序列化和反序列...
在RMI中,第一步是定义远程接口,这个接口将作为远程服务的公共契约。在这个案例中,我们定义了一个名为`FileServerInterface`的接口,它继承自`java.rmi.Remote`接口,并声明了一个名为`download`的方法,用于从...
描述中的“第2部分和第3部分”表明这个项目是逐步进行的,学生可能已经完成了RMI的基础部分(第1部分),现在正进入更复杂的阶段。"rmi1-carrental的启动器"可能是一个程序或脚本,用于初始化RMI系统并启动相关的...
1. **远程接口**:这是RMI的第一步,定义了可以在远程服务器上执行的方法。接口必须使用`java.rmi`包下的`Remote`接口作为其父接口,并声明所有方法抛出`java.rmi.RemoteException`。例如: ```java public ...
Java RMI(Remote Method Invocation),是Java开发的一种调用远程方法的技术。 它为基于 Java 的分布式应用程序中的服务器和客户端的通信提供了一种简单的机制。 使用 RMI 构建分布式应用程序包括: 客户端上 ...
Java远程方法调用(RMI,Remote Method Invocation)是Java编程中的一个重要概念,它使得一个Java程序能够调用网络中另一台计算机上的Java方法,如同调用本地方法一样。RMI是Java开发分布式应用程序的关键技术,它极...