rmi 实例
最近看到自服务系统的基本架构,里面有大量接口是调用主应用的服务,这种分布式应用应该会涉及到RMI,先看看具体实现,实现步骤大致如下:
1、生成一个远程接口
2、实现远程对象(服务器端程序)
3、生成占位程序和骨干网(服务器端程序)
4、编写服务器程序
5、编写客户程序
6、注册远程对象
7、启动远程对象
package RMI;
import java.rmi.Remote;
import java.rmi.RemoteException;
/**
* RMI远程接口
* @author yaohonv
*/
public interface ServiceMethodI extends Remote{
String getMessage() throws RemoteException;
}
package RMI;
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
/**
* RMI接口实现
* @author yaohonv
*/
public class ServiceMethod extends UnicastRemoteObject implements ServiceMethodI {
public String getMessage() throws RemoteException {
return "hello,this is service";
}
public ServiceMethod() throws RemoteException {
super();
}
}
启动服务main方法:
package RMI;
import java.rmi.Naming;
/**
* 服务器,用于上面写好的类
* @author yaohonv
*
*/
public class RMIService {
public static void main(String[] args) {
//System.setSecurityManager(new RMISecurityManager());
try {
ServiceMethod sm = new ServiceMethod();
//rmi://127.0.0.1:1099/yaohonv_ServiceMethod
//端口1099是默认的RMI端口,如果你启动 rmiregistry 的时候(见第6点)没有指定特殊的端口号,默认就是1099
Naming.rebind("yaohonv_ServiceMethod", sm);
System.out.println("this is remote class ,Ready to give service");
} catch (Exception e) {
e.printStackTrace();
}
}
}
编译服务器端类。
:F:yao_zone estJspsrc>javac RMI*.java
生成根和干(占位程序和骨干程序)。(这个步骤不进行,似乎也没有报错,或许是只需要调用一次)
:F:yao_zone estJspsrc>rmic -classpath . -d . RMI.ServiceMethod
开启RMI的注册服务,开启以后我们的server程序才能调用rebing方法发布我们的类。
:F:yao_zone estJspsrc>start rmiregistry
启动远程服务:
:F:yao_zone estJspsrc>java -Djava.rmi.server.codebase=file:/F:yao_zone estJspsrcRMI/ RMI.RMIService
客户端调用程序:
package RMIclient;
import java.rmi.Naming;
import java.rmi.RMISecurityManager;
import RMI.ServiceMethodI;
/**
* 测试RMI
* @author yaohonv
*/
public class TestRMI {
public static void main(String[] args) {
System.setSecurityManager(new RMISecurityManager());
try {
ServiceMethodI t = (ServiceMethodI) Naming.lookup("yaohonv_ServiceMethod");
System.out.println("client =" + t.getMessage());
} catch (Exception e) {
e.printStackTrace();
}
}
}
启用客户端
java RMIclient.TestRMI,报错:
java.security.AccessControlException: access denied (java.net.SocketPermission 127.0.0.1:1099 connect,resolve)
崩溃,权限问题。
这是因为RMI的服务需要授权,外部程序才能访问,所以我们要改动 jre的安全配置文件,来开放权限, 具体如下:
打开你的jdk目录下的这个文件 D:Program FilesJavajdk1.5.0_15jrelibsecurityjava.policy
在文件最后加入下面代码:
grant {
permission java.net.SocketPermission "*:1024-65535",
"connect,accept";
permission java.net.SocketPermission "*:80","connect";
};
重新运行客户端
F:yao_zone estJspsrc>java RMIclient.TestRMI
client =hello,this is service
OK,成功调用
此代码,开放了端口的connect访问权限
注意:你应该修改服务器那台机子的安全配置文件,也就是你运行 rmiregistry 和 RMI_Server的机子
分享到:
相关推荐
Java RMI实例
6. **RMI实例操作** - **创建远程接口**:例如定义一个名为`Calculator`的接口,包含加减乘除的远程方法。 - **实现远程接口**:实现`Calculator`接口,实现计算逻辑。 - **启动RMI服务**:在服务器端启动RMI服务...
这个“一个RMI实例”显然是一个供初学者使用的示例项目,可以帮助理解RMI的基本原理和操作流程。 在RMI中,主要有以下几个核心概念: 1. **远程接口(Remote Interface)**:这是定义远程方法的接口,它继承自java...
中间件实验(RMI 实例)是 Java RMI(Remote Method Invocation,远程方法调用)的实验报告,旨在通过实验了解 Java RMI 的机制和开发流程。本实验报告主要介绍了 RMI 的基本概念、实验步骤、实验结果和结论分析等...
在"rmidemo"这个压缩包中,很可能包含了一个完整的RMI实例。通常,它会有一个服务端项目,用于实现和注册远程对象,以及一个客户端项目,用于查找并调用远程对象的方法。具体代码可能如下: - 服务端(Server.java...
这个简单的RMI实例可能是为了帮助初学者理解RMI的基本工作原理和实现步骤。 RMI的核心概念是客户端和服务端。服务端通过RMI注册一个远程接口,该接口定义了可供客户端调用的方法。客户端则通过RMI机制获取到服务端...
这个“简单的RMI实例”演示了如何在不依赖像Tomcat这样的Web服务器的情况下实现RMI。下面我们将深入探讨RMI的基本概念、配置过程以及如何创建和运行这个实例。 ### RMI基本概念 1. **远程对象(Remote Object)**:...
在Java RMI实例中,我们通常会经历以下几个步骤: 1. **创建远程接口**:首先,我们需要定义一个远程接口,这个接口需要扩展`java.rmi.Remote`。远程接口中的所有方法都需要抛出`RemoteException`,这是因为远程...
### Java分布式之RMI实例教程知识点详解 #### 一、RMI基础知识介绍 **RMI (Remote Method Invocation)** 是一种Java技术,用于实现分布式应用程序之间的远程过程调用。通过RMI,开发者可以在不同的JVM之间调用方法...
总结一下,这个简单的RMI实例展示了如何创建一个远程接口,实现该接口,启动服务器以导出远程对象,以及编写客户端代码进行调用。RMI的实现包括了接口定义、实现、服务器注册和客户端调用四个关键步骤。在实际应用中...
**标题:“RMI实例(Spring整合)”** 远程方法调用(Remote Method Invocation,简称RMI)是Java中的一种机制,允许一个Java对象在某个Java虚拟机(JVM)上执行另一个Java对象的方法,即使该对象位于不同的网络...
JAVA分布式之RMI实例教程网络通信原理[收集].pdf
【RMI实例详解】 远程方法调用(RMI,Remote Method Invocation)是Java JDK 1.1引入的一种分布式对象技术,旨在简化分布在不同环境下的Java应用程序间的通信。RMI允许对象在不同的Java虚拟机(JVM)之间进行交互,...
java rmi小例子源代码 ,运行Reg.java ,再执行Client客户端代码就能看效果。如果在不同jvm下执行,注意接口定义包路径客服端和服务端必须保持一致。 客服端包含文件有服务端接口的定义文件。
本实例将深入讲解如何使用Java RMI在Linux环境中启动远程服务,并在Windows环境下进行操作。 首先,理解RMI的基本原理:RMI系统由两部分组成,客户端和服务器端。服务器端暴露远程接口,客户端通过引用这个远程接口...
RMI(Remote Method Invocation,远程方法调用)是Java中的一种技术,用于构建分布式系统,使得在一台机器上的对象能够调用另一台机器上对象的方法,就像它们在同一个进程中一样。RMI使得开发者可以创建跨网络的、...
创建客户端RMI调用服务端的应用程序。 启动服务端,再启动客户端,测试是否调用成功。 如果客户端和服务端不在同一台电脑上,则需要对刚才定义的服务类采用rmic 编译一个客户端的框架类_stub并拷贝到客户端的类...
RMI远程调用开发实例,必须打开防火墙。 必须要在jdk安装目录D:\Java\jdk1.7\jre\lib\security javaws.policy文件加上 grant { permission java.security.AllPermission "", ""; };