rmi学习笔记(1)
来源:互联网 发布:mac魔兽世界多少g 编辑:程序博客网 时间:2024/06/05 05:00
RMI学习笔记(1)
RMI(RemoteMethod Invocation):远程方法调用,该技术在Java1.1就已经出现,是一项非常重要的底层技术。
这种技术可以实现Java远程方法的调用,即一个Java虚拟机上的对象可以调用另一个Java虚拟机上的对象的方法。举个简单的例子:有两个Java工程,分别部署在不同的机器上,在A工程中有一个功能,需要从B工程中的某个方法取得数据(如:一台设备的实时监测数据),此时就可以用rmi实现两个工程中方法的远程调用。写个简单的hellworld例子:
1. 在eclipse中创建三个工程,分别为rmiA、rmiB、rmiInterface
说明:rmiA用于远程方法实现
rmiB用于远程调用
rmiInterface用于公共接口
2. 在rmiInterface工程中定义一个远程接口(该接口必须继承Remote类,并且接口中的方法必须抛出RemoteException异常)
① IHelloWorld.java
packagecom.demo.interfaces;
importjava.rmi.Remote;
importjava.rmi.RemoteException;
publicinterface IHelloWorld extends Remote
{
publicvoid sayHelloworld() throws RemoteException;
}
3. 将rmiInterface项目打包成jar文件,分别添加到rmiA、rmiB项目中
4. 实现远程接口(这个实现必须有一个显式的构造函数,并且要抛出RemoteException异常)
② HelloWorldImpl.java
packagecom.rmi.demo.imp;
importjava.rmi.RemoteException;
importjava.rmi.server.UnicastRemoteObject;
importcom.rmi.demo.interfaces.IHelloWorld;
publicclass HelloWorldImpl extends UnicastRemoteObject implements IHelloWorld
{
public HelloWorldImpl() throws RemoteException
{
super();
}
@Override
public void sayHelloworld() throwsRemoteException
{
System.out.println("HelloWorld!");
}
}
5. 新建一个rmi客户端调用程序。
① 创建一个接口的实例
② 创建注册表
③ 绑定对象到远程注册表
ServerStart.java
packagecom.demo.start;
importjava.net.MalformedURLException;
importjava.rmi.AlreadyBoundException;
importjava.rmi.Naming;
importjava.rmi.RemoteException;
importjava.rmi.registry.LocateRegistry;
importcom.demo.imp.HelloWorldImpl;
importcom.demo.interfaces.IHelloWorld;
publicclass ServerStart
{
public static void main(String[] args)
{
try
{
//创建一个远程接口的实例
IHelloWorld helloWorld = newHelloWorldImpl();
//本地主机上的远程对象注册表Registry的实例,并指定端口为8888,这一步必不可少(Java默认端口是1099),必不可缺的一步,缺少注册表创建,则无法绑定对象到远程注册表上
LocateRegistry.createRegistry(8888);
//把远程对象注册到RMI注册服务器上,并命名为helloWorld
Naming.bind("rmi://localhost:8888/helloWorld",helloWorld);
System.out.println("远程服务对象绑定成功---->");
}
catch (RemoteException e)
{
System.out.println("创建远程对象发生异常!");
e.printStackTrace();
}
catch (AlreadyBoundException e)
{
System.out.println("发生重复绑定对象异常!");
e.printStackTrace();
}
catch (MalformedURLException e)
{
System.out.println("发生URL畸形异常!");
e.printStackTrace();
}
}
}
6.编写客户端方法
ClientCall.java
package com.rmi.demo.call;
importjava.net.MalformedURLException;
import java.rmi.Naming;
import java.rmi.NotBoundException;
import java.rmi.RemoteException;
importcom.rmi.demo.interfaces.IHelloWorld;
public class ClientCall
{
publicstatic void main(String[] args)
{
try
{
IHelloWorldhelloWorld = (IHelloWorld)Naming.lookup("rmi://localhost:8888/helloWorld");
helloWorld.sayHelloworld();
}
catch(MalformedURLException e)
{
e.printStackTrace();
}
catch(RemoteException e)
{
e.printStackTrace();
}
catch(NotBoundException e)
{
e.printStackTrace();
}
}
}
测试:先启动serverstart,然后启动clientcall
- rmi学习笔记(1)
- RMI学习笔记(2)-Spring集成RMI
- EJB学习笔记(RMI)
- RMI学习笔记
- RMI学习笔记
- RMI 学习笔记
- RMI学习笔记
- RMI学习笔记(一)-----概述
- RMI学习笔记(一)-----概述
- python Pyro(python中的RMI)学习笔记一
- python Pyro(python中的RMI)学习笔记
- EJB(RMI学习)
- RMI学习(一)
- EJB(RMI学习)
- RMI学习笔记(二)-----RMI远程调用实例(一)
- RMI学习笔记(二)-----RMI远程调用实例(一)
- spring rmi http invoker学习笔记
- JMX学习笔记(四) JMX RMI
- contiki netstack数据收发结构
- Lua程序设计:第1章 开始
- 读书不二
- 用中断方式,实现PIC单片机的串口传输
- FPGA I/O 约束
- rmi学习笔记(1)
- 我的第一篇博客
- easyui的combobox兼容火狐浏览器
- squeeze函数
- C语言基础测试题04
- ios Sqlite数据库增删改查基本操作
- android(小米)系统隐藏的小功能
- 博文收藏,便于后续重温
- Contiki packetbuf原理