所谓分布式,就是一个系统的多个服务在不同的域上。
我们都知道实现分布式系统之间的通信包括基于消息的系统间通信,即tcp/ip,udp/ip的socket通信,还有rmi和websercie的方式。
今天学习了一下rmi,并做了一个小例子
过程如下:
1.首先创建远程服务器端的接口以及实现类。
package jdevelloper.rmi;
import java.rmi.Remote;
import java.rmi.RemoteException;
//接口要实现Remote接口,并且接口中的方法也要抛出RemoteException
public interface Hello extends Remote {
String sayHello() throws RemoteException;
}
2.编写接口对应的实现类
package jdevelloper.rmi;
import java.rmi.Naming;
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
public class HelloImp extends UnicastRemoteObject implements Hello {
private static final long serialVersionUID = 1L;
protected HelloImp() throws RemoteException {
super();
}
public String sayHello() throws RemoteException {
return "Hello word";
}
public static void main(String[] args) {
if(System.getSecurityManager()==null){
System.setSecurityManager(new SecurityManager());
}
try{
Hello obj = new HelloImp();
//使用RMI注册机注册对象
Naming.bind("HelloServer",obj);
System.out.println("HelloServer bound in registry");
}catch(Exception e){
e.printStackTrace();
}
}
}
//注:main方法中主要就是完成将服务器对象注册的RMI注册机中,可以提出来方法其他的类中
3.进入DOS编译以上两个文件
当我在dos中敲java的时候发现不识别该命令,这个原因是由于没有在高级环境变量中配置java bin的根目录导致的。
配置后重新启动机器,可以识别java命令
首先进入文件所在目录
f:
cd F:\worklearning\RMI\src\jdevelloper\rmi
javac -d . *.java
//javac -d表示把编译后的java文件按照包接口放到指定的目录下,这里使用.表示的是当前的目录.
进行rmi反编译以生产stub文件
rmic jdevelloper.rmi.HelloImp
//rmic是java中用于让远程对象生成stub和skeleton,所谓远程对象就是指实现remote接口的类
成功生成HelloImp_Stub.class文件后创建安全策略
在命令窗口中输入policytool
再弹出的窗口中选择添加规则项目-添加权限-选择全部权限,然后将文件保存到C:\Documents and Settings\Administrator路径下,保存名称为.java.policy。
启动rmi注册机
start rmiregistry
运行服务器端
java jdevelloper.rmi.HelloImp
抛出拒绝soctet访问的异常,于是我进入
C:\java1.6\jre\lib\security目录下,修改java.policy文件,在grant里添加
permission java.security.AllPermission;
permission java.util.PropertyPermission "file.encoding", "read";
命令
第二句的意思是让程序能读取二进制文件,否则会抛出拒绝读取二进制文件的异常
再次运行服务器脚本成功
然后创建客户端
package jdevelloper.rmi;
import java.rmi.Naming;
public class HelloClient {
public static void main(String[] args) throws Exception {
System.setSecurityManager(new SecurityManager());
Hello RemoteObj = (Hello)Naming.lookup("//localhost/HelloServer");
String message = RemoteObj.sayHello();
System.out.println(message);
}
}
重新打开一个DOS窗口,编译并运行
服务器端返回hello word
分享到:
相关推荐
在MYEclipse6.0这样的集成开发环境中,这些步骤通常可以通过IDE的内置工具进行,简化了调试和部署过程。 RMI的优势在于它提供了透明的远程调用,使得开发者可以像调用本地对象一样调用远程对象,极大地简化了分布式...
在提供的学习资料中,"rmi入门教程,简单明了(转).htm"和"RMI基础教程 - 深海有约 - BlogJava.htm"很可能是两篇关于RMI基础知识的教程,它们可能涵盖了RMI的基本概念、设置步骤、示例代码以及常见问题。"RMI基础...
根据给定的示例代码,我们可以详细分析RMI的实现过程: ##### 步骤一:定义远程接口 定义一个名为`FileServerInterface`的远程接口,该接口继承自`java.rmi.Remote`,声明了一个名为`download`的方法,用于从远程...
RMI是构建分布式Java应用程序的基础,它简化了跨网络通信的过程,使得开发者可以像操作本地对象一样操作远程对象。 在Java RMI中,一个对象可以在一个JVM(Java Virtual Machine)上执行,但被另一个JVM上的代码...
通过上述分析,我们可以看出RMI的学习过程涉及以下关键点: 1. 理解RMI的基本概念和工作原理。 2. 掌握如何定义远程接口和实现类。 3. 学习创建RMI客户端,包括查找远程对象和调用远程方法。 4. 实现RMI服务器,...
Java RMI(远程方法调用)是Java编程语言中的一项核心技术,自JDK 1.1版本起就被引入...虽然现代的Java框架如Spring、EJB等提供了更高级别的分布式服务,但理解RMI的基本原理对于深入学习Java分布式系统仍然是必要的。
自JDK 1.1起,RMI就成为Java开发者构建分布式系统的重要工具,它弥补了传统RPC(远程过程调用)在分布式对象系统中的不足。 RMI通过Java远程消息交换协议JRMP(Java Remote Messaging Protocol)进行通信,确保了...
RMI过程涉及两个主要步骤:导出远程对象(使得其方法可供远程调用)和注册该对象到一个远程命名服务,这样其他客户端就可以找到并调用它。RMI在分布式Web应用程序中特别有用,因为它可以实现服务器端组件的远程调用...
《Synaptics RMI3 触摸芯片编程详解——基于S3508》 ...通过深入学习“Synaptics_RMI3_Specification.pdf”,开发者不仅可以掌握S3508的硬件特性和操作方法,还能了解到RMI3协议的精髓,从而在项目开发中得心应手。
【rmi-lite 1.0】是一个轻量级的Java Remote Method Invocation (RMI)实现,它...总的来说,rmi-lite是一个实用的学习资源,有助于开发者深入理解Java RMI的工作原理,并能在实际项目中灵活运用轻量级的远程调用方案。
在学习RMI的过程中,实践是至关重要的。通过编写简单的客户端和服务端程序,可以深入理解RMI的工作流程。同时,理解RMI的局限性也很关键,例如它可能不适合大量并发调用的场景,因为每个请求都会创建新的网络连接。 ...
在这个“RMI学习例子”中,我们有两个关键部分:服务端和客户端,它们都是使用Java 1.5编写的,因此不需要通过`rmic`命令来手动生成存根(stub)和 skeletons 文件。 首先,让我们深入理解RMI的工作原理。RMI的核心...
《数学方法论RMI方法学习教案》探讨了数学中一种重要的问题解决策略——关系映射反演(Relational Mapping Inversion,简称RMI)方法。RMI方法是数学方法论中的核心概念,它强调通过将复杂问题转化为同构的简单问题...
在RMI的学习过程中,你需要掌握以下关键步骤: 1. **创建远程接口**:定义一个继承自`Remote`接口的接口,声明远程方法。 2. **实现远程接口**:编写实现该接口的类,这些类的方法会执行实际的业务逻辑。 3. **...
在JDK 1.5版本中,RMI的使用变得更加简化,避免了手动编译生成桩(stub)和骨架(skeleton)的过程。本教程将介绍一个基础的RMI HelloWorld应用,以及如何在Spring环境下配置RMI。 首先,我们要创建一个Server端...
在实验过程中,可能遇到的问题包括网络配置、权限问题、序列化异常(`RemoteException`)等,这些都是学习RMI时常见的挑战。 通过RMI,我们可以构建分布式系统,比如分布式数据库、负载均衡服务、分布式计算等。RMI...
学习和掌握RMI,不仅可以提升你的Java编程能力,更是在分布式系统和企业级应用开发中打开新视野的关键。通过实践和理解上述知识点,你将能够熟练地运用RMI技术,创建高效、可靠的分布式Java应用程序。
学习和掌握RMI-IIOP技术,不仅可以提升开发者的分布式编程技能,也有助于设计和实现更高效、更健壮的企业级应用。通过实践和研究提供的资源,初学者可以逐步了解和掌握这一强大的分布式计算工具。