Java RMI实践
Java远程方法调用,即Java RMI(Java Remote Method Invocation)。一种用于实现远程过程调用的应用程序编程接口。客户机上运行的程序可以调用服务器上的对象。
缺点:只针对Java语言
client: stub
server: skeleton
client与server通过Socket进行双向数据传递。
序列化与反序列化,也叫做: 编码与解密
序列化:将对象转换成字节
反序列化:将字节转换成对象
一、创建RMI程序有4个步骤
1、定义一个远程接口的接口,该接口中的每一个方法必须声明它将产生一个RemoteException异常。
2、定义一个实现该接口的类
3、创建一个服务,用于发布2中定义的类。
4、创建一个客户端,进行RMI调用。
二、程序的实现
1、创建一个Student类。实现Serializable接口,用于信息的传输
public class Student implements Serializable {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
2、定义一个接口
public interface IStudentService extends Remote {
List<Student> getStudents() throws RemoteException;
}
3、创建一个实现类
public class StudentServiceImpl extends UnicastRemoteObject implements IStudentService {
protected StudentServiceImpl() throws RemoteException {
}
public List<Student> getStudents() throws RemoteException {
List<Student> students = new ArrayList<>();
for(int i = 1; i < 5; i++){
Student s = new Student();
s.setName("Nick" + i);
s.setAge(i + 20);
students.add(s);
}
return students;
}
}
4、启动服务
public class Start {
public static void main(String[] args) {
try {
IStudentService studentService = new StudentServiceImpl();
LocateRegistry.createRegistry(5000);
Naming.rebind("rmi://127.0.0.1:5000/IStudentService",studentService);
System.out.println("服务已经启动");
}catch (Exception e){
e.printStackTrace();
}
}
}
5、客户端程序调用RMI方法
public class RmiClient {
public static void main(String[] args) {
try{
IStudentService studentService = (IStudentService) Naming.lookup("rmi://127.0.0.1:5000/IStudentService");
List<Student> students = studentService.getStudents();
for (Student s: students){
System.out.println("姓名:" + s.getName() + ",年龄:" + s.getAge());
}
}catch (Exception e){
e.printStackTrace();
}
}
}
显示结果
姓名:Nick1,年龄:21
姓名:Nick2,年龄:22
姓名:Nick3,年龄:23
姓名:Nick4,年龄:24
Java RMI实践的更多相关文章
- Exception thrown by the agent : java.rmi.server.ExportException: Port already in use
今天有个应用一直起不来,感觉配置都对啊,奇了怪了.看日志发现如下: STATUS | wrapper | 2017/01/04 08:09:31 | Launching a JVM...INFO | ...
- Java RMI之HelloWorld篇
Java RMI 指的是远程方法调用 (Remote Method Invocation).它是一种机制,能够让在某个 Java 虚拟机上的对象调用另一个 Java 虚拟机中的对象上的方法.可以用此方 ...
- 启动tomcat时 错误: 代理抛出异常 : java.rmi.server.ExportException: Port already in use: 1099;
错误: 代理抛出异常 : java.rmi.server.ExportException: Port already in use: 1099; nested exception is: java ...
- JAVA RMI 实例
下面我将介绍一个完整的实例,让初学者能快速体验RMI的功用. 分为以下四个步骤 1. 创建远程接口及声明远程方法(HelloInterface.java)2. 实现远程接口及远程方法(继承Unicas ...
- JAVA RMI例子
RMI 是java语言的一个RPC框架,本文给出基础例子如下: 1.实现接口: public interface ICalc extends Remote { public int add(int p ...
- java.rmi.NoSuchObjectException: no such object in table
jmx链接的时候,最简单的例子都行不通,郁闷,出现了: 参考:http://reiz6153.blog.163.com/blog/static/401089152009442723208/ 代码: M ...
- 大型网站系统与Java中间件实践
大型网站系统与Java中间件实践(贯通分布式高并发高数据高访问量网站架构与实现之权威著作,九大一线互联网公司CTO联合推荐) 曾宪杰 著 ISBN 978-7-121-22761-5 2014年4 ...
- 启动tomcat时 错误: 代理抛出异常 : java.rmi.server.ExportException: Port already in use: 1099的解决办法
一.问题描述 今天一来公司,在IntelliJ IDEA 中启动Tomcat服务器时就出现了如下图所示的错误:
- Java RMI 介绍和例子以及Spring对RMI支持的实际应用实例
RMI 相关知识 RMI全称是Remote Method Invocation-远程方法调用,Java RMI在JDK1.1中实现的,其威力就体现在它强大的开发分布式网络应用的能力上,是纯Java的网 ...
随机推荐
- 一:MySQL系列之基本介绍(一)
本篇主要介绍关于MySQL数据的基本知识,包括数据存储的变化,什么是MySQL以及其有什么优点.以及什么是RDBMS概念性知识等,以及关于MySQL语句的SOL的基本用法: 一.数据库 数据库,顾名思 ...
- .net core自定义读取配置文件
新建完成后项目目录下有个 appsettings.json { "Logging": { "LogLevel": { "Default": ...
- web workers 实例
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- linux简单的命令
本文转自 https://www.cnblogs.com/pyyu/articles/9314206.html Linux命令行的组成结构 [root@oldboy_python ~]# [root@ ...
- 小程序基础能力~自定义 tabBar
自定义 tabBar 基础库 2.5.0 开始支持,低版本需做兼容处理. 自定义 tabBar 可以让开发者更加灵活地设置 tabBar 样式,以满足更多个性化的场景. 在自定义 tabBar 模式下 ...
- TP5.x——initialize()中如何return
前言 首先在tp框架中initialize中是无法直接通过return来返回任何值的,return并不会造成脚本的中断! 环境:PHP 7.0.4 | TP5.1 说明 initialize方法 首先 ...
- RestTemplate将字符串以文件的方式上传
背景 在java后台将内容拼接为字符串,然后使用RestTemplate将字符串以文件的方式上传到指定接口 思路 使用 RestTemplate 时,将字符串封装为字节流,然后上传 代码 /** * ...
- epoll版http服务器
epoll是事件通知方式接收数据,效率比轮询要高 代码: import socket import re import select def client_server(new_client,recv ...
- Linux命令基础3-cd命令
cd 到带空格的文件夹 [root@cctg-sjc16-grafana ccatgbld]# cd 'my test' [root@cctg-sjc16-grafana my test]# cd . ...
- 面试官常问的20道Java题目(附答案)-来自Java1234
1. 以下代码的输出结果是(A) int i =3; i = i++; System.out.println(i); A .3 B.4 C.5 a=b++是先将b值赋值给a后b再自增. 2. Ma ...