由于公司的项目中用到了java.rmi 分布式中的东西,所以就研究了一下,总结给朋友们分享,支持JDK1.6+
我们编写的借口类必须要继承java.rmi.Remote 接口。
好的,不多罗嗦,直接来代码:
package com.kaobian.rmi;
import java.rmi.Remote;
import java.rmi.RemoteException;
public interface ICal extends Remote {
public int sum(int add1, int add2) throws RemoteException;
}
切记我们传输的类 都是必须要实现序列化的,参数的话 也是必须实现了序列化或者是java基本类型
package com.kaobian.rmi;
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
public class ICalImpl extends UnicastRemoteObject implements ICal {
protected ICalImpl() throws RemoteException {
super();
}
private static final long serialVersionUID = 1L;
@Override
public int sum(int add1, int add2) throws RemoteException {
System.out.println("server : add1=" + add1 + ",add2=" + add2);
return add1 + add2;
}
}
package com.kaobian.rmi;
import java.rmi.Remote;
import java.rmi.RemoteException;
/**
* 分布式开发,据说 EJB 就是采用rmi开发的 ,道听途说
* 如果想要用 远程对象调用 接口必须要继承Remote或者类必须要实现Remote接口
*/
public interface IHello extends Remote {
public String sayHello(String name) throws RemoteException;
}
package com.kaobian.rmi;
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
public class IHelloImpl extends UnicastRemoteObject implements IHello {
private static final long serialVersionUID = 1L;
protected IHelloImpl() throws RemoteException {
super();
}
@Override
public String sayHello(String name) throws RemoteException {
System.out.println("server : " + name + " come here ");
return "hello " + name;
}
}
Server端 编写,如果有必要 也可以写成多线程
package com.kaobian.rmi;
import java.net.MalformedURLException;
import java.rmi.AlreadyBoundException;
import java.rmi.Naming;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
public class Server {
public static void main(String[] args) {
//声明我要暴露的对象
try {
ICal cal = new ICalImpl();
IHello hello = new IHelloImpl();
//本地主机上的远程对象注册表Registry的实例,并指定端口为 1100,
//这一步必不可少(Java默认端口是1099),必不可缺的一步,缺少注册表创建,则无法绑定对象到远程注册表上
LocateRegistry.createRegistry(1100);
Naming.bind("rmi://192.168.1.244:1100/IHello",hello);
Naming.bind("rmi://192.168.1.244:1100/ICal",cal);
System.out.println("Server already be started up ");
} catch (RemoteException e) {
e.printStackTrace();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (AlreadyBoundException e) {
e.printStackTrace();
}
}
}
客户端调用
package com.kaobian.rmi;
import java.net.MalformedURLException;
import java.rmi.Naming;
import java.rmi.NotBoundException;
import java.rmi.RemoteException;
public class RmiClient {
public static void main(String[] args) {
try {
ICal cal = (ICal)Naming.lookup("rmi://192.168.1.244:1100/ICal");
IHello hello = (IHello)Naming.lookup("rmi://192.168.1.244:1100/IHello");
System.out.println(cal.sum(2, 3));
System.out.println(hello.sayHello("kaobian"));
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (RemoteException e) {
e.printStackTrace();
} catch (NotBoundException e) {
e.printStackTrace();
}
}
}
将 IHello 、IHelloImpl、ICal、ICalImpl、Server这五个类布置到服务器上,我用的是linux,客户端包含所有的类。
注意:如果在布置到服务器端时出现连接 遭拒绝错误,解决办法:
1: 关闭防火墙
2: 将 /ect/hosts文件中的 localhost 修改为实际的ip,而不是 127.0.0.1
这样启动就没问题了
分享到:
相关推荐
在"java RMI demo"中,通常包含两个主要部分:rmiclient和rmiserver,分别代表客户端和服务器端。 1. **RMI服务器(rmiserver)**: - **注册表(Registry)**:RMI系统的核心组件,用于存储远程对象的引用。...
java rmi demo1 一个客户端,一个服务端,一个最顶服务端,客户端向服务端上传下载文件,服务端传输到最顶服务端,然后服务端删除文件,当客户端下载的时候,先判断服务端有无文件,如果没有的话就从最顶服务端下载...
java rmi demo2 N个客户端,N个P2P节点,一个服务端,客户端连接P2P节点,服务端保存当前所有在线的客户端的IP和端口,客户端相当于我们的电脑。用户上传文件,都从客户端传到P2P节点中,然后每个P2P节点互相传输,...
Java Remote Method Invocation(RMI)是Java平台上的一个特性,它允许在分布式环境中进行对象间的交互,即在一台机器上的对象可以调用另一台机器上对象的方法,仿佛它们是在同一台机器上一样。这个特性使得Java成为...
在这个"Java RMI demo"中,我们可以通过分析和运行提供的代码来理解RMI的工作原理。 1. **RMI基本概念** - **远程接口(Remote Interface)**:定义了客户端可以调用的远程方法,它继承自`java.rmi.Remote`接口。 ...
【RMI+EHCACHE Demo】是一个面向初学者的示例项目,旨在帮助理解如何结合Remote Method Invocation(远程方法调用)和Ehcache缓存技术。这个Demo将展示如何利用RMI来创建分布式系统,并利用Ehcache进行高效的数据...
Java RMI(Remote Method Invocation,远程方法调用)是Java平台提供的一种分布式计算技术,它允许在不同网络节点上的Java对象之间进行透明的交互。在Java RMI中,一个对象可以调用另一个位于不同JVM(Java虚拟机)...
java rmi入门级实例:分为三个javase项目,rmi-api(存放公共的接口和实体),rmi-server(rmi服务器端),rmi-client(rmi客户端),其中服务端和客户端都依赖rmi-api项目
Java RMI,全称为Remote Method Invocation,是Java平台上的一个...对于初学者,通过实践Java RMI Demo可以深入理解远程方法调用的概念和流程。在实际项目中,根据需求可能会选择更为复杂但功能强大的分布式系统框架。
Spring RMI(Remote Method Invocation)是Java平台上的远程方法调用技术,结合Spring框架,能够帮助开发者轻松地创建分布式应用程序。在这个"Spring RMI小例子"中,我们将深入理解Spring如何简化RMI的使用,以及...
Java RMI(Remote Method Invocation,远程方法调用)是Java平台提供的一种用于在分布式环境中进行对象间通信的技术。它允许一个Java对象在某一台机器上执行,并能够调用位于另一台机器上的对象的方法,仿佛它们是在...
### 编写RMI Demo 以下是一个简单的RMI示例: 1. **定义远程接口**: ```java import java.rmi.Remote; import java.rmi.RemoteException; @Remote public interface MyRemoteInterface extends Remote { String...
远程方法调用(Remote Method Invocation,...通过这个RMI的完整demo,初学者可以深入理解RMI的工作原理,逐步掌握如何创建、运行和测试RMI应用程序。这是一个很好的实践项目,可以帮助开发者建立起分布式编程的基础。
在这个“ehcache rmi集群demo”中,我们将探讨如何将Ehcache与RMI结合,实现一个跨节点的缓存集群。 首先,Ehcache的核心概念包括缓存管理器(Cache Manager)、缓存(Cache)、缓存项(Cache Entry)等。缓存管理...
本示例"rmi-demo.zip"是一个关于Java RMI的演示项目,旨在帮助开发者理解并实践RMI的基本原理和用法。 在RMI中,一个Java对象可以定义其方法为远程方法,这些方法可以在网络上的另一个Java虚拟机上执行。这个过程...
"RMI-demo.zip_DEMO_rmi"是一个示例项目,用于教学目的,展示了RMI的基本用法。 该压缩包包含以下四个主要文件: 1. **FirstProblem.jar**:这是一个包含服务器端和客户端所需类的Java可执行jar文件。RMI应用通常...
该demo分为MainService.java服务端和MainClient.java客户端,既可以都在本地运行, 也可以上传到Linux环境使用 java -cp RMITest-0.0.1-SNAPSHOT.jar com.xxz.mainclient.MainClient 命令运行
在“rmi-demo.zip”这个压缩包中,我们可以预见到一个包含RMI示例代码的项目,帮助我们理解并实践RMI的基本概念和工作原理。 首先,RMI的核心思想是透明性:客户端和服务器之间的通信细节被隐藏,使得开发者可以...