RMI是Java的一组拥护开发分布式应用程序API。RMI使用Java语言接口定义了远程对象,它集合了Java序列化和Java远程方法协议(Java
Remote Method Protocol)。简单地说,这样使原先的程序在同一操作系统的方法调用。变成了不同操作系统之间程序的方法调用。因为J2EE是分布式程序平台。它以RMI机制实现程序组件在不同操作系统之间的通信。

比方,一个EJB能够通过RMI调用Web上还有一台机器上的EJB远程方法。

用例server端结构大概如此

首先定义要传送的实体类,由于要网络传输。必须实现序列化

User.java

package com.yiyuwanglu.rmi.entity;

import java.io.Serializable;

public class User implements Serializable {
/**
*
*/
private static final long serialVersionUID = -8400949180923337013L;
private String id;
private String name;
private int age; public String getId() {
return id;
} public void setId(String id) {
this.id = id;
} 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;
} }

第二定义实体接口,必须继承 java.rmi.Remote

UserService

package com.yiyuwanglu.rmi.service;

import java.rmi.Remote;
import java.rmi.RemoteException; import com.yiyuwanglu.rmi.entity.User; public interface UserService extends Remote {
public User getUserById(String id)throws RemoteException;
}

第三,实现接口 记得继承UnicastRemoteObject

UserServiceImpl

package com.yiyuwanglu.rmi.service.impl;

import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject; import com.yiyuwanglu.rmi.entity.User;
import com.yiyuwanglu.rmi.service.UserService; public class UserServiceImpl extends UnicastRemoteObject implements UserService { /**
*
*/
private static final long serialVersionUID = 6222175854495075991L; public UserServiceImpl() throws RemoteException {
super();
// TODO Auto-generated constructor stub
} @Override
public User getUserById(String id) {
User user=new User();
user.setId(id);
user.setAge(100);
user.setName("測试");
return user;
} }

server端启动

Program.java

package com.yiyuwanglu.rmi.program;

import java.net.MalformedURLException;
import java.nio.channels.AlreadyBoundException;
import java.rmi.Naming;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry; import com.yiyuwanglu.rmi.service.UserService;
import com.yiyuwanglu.rmi.service.impl.UserServiceImpl; public class Program{
public static void main(String[] args) {
// TODO Auto-generated method stub
try {
UserService userService=new UserServiceImpl();
//注冊通讯端口
LocateRegistry.createRegistry(6600);
//注冊通讯路径
Naming.rebind("rmi://127.0.0.1:6600/userService", userService);
System.out.println("Service Start!");
} 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();
}
}
}

client測试,最好找还有一台机子(当然同一台机子或许,只是为了模拟真实情况,还是还有一台机子,记得iP要换)创建client。切记:相关的类的包的路径要跟server一样

比如:client的 UserService

package com.yiyuwanglu.rmi.service;

最后client调用

package com.yiyuwanglu.rmi.program;

import java.rmi.Naming;

import com.yiyuwanglu.rmi.entity.User;
import com.yiyuwanglu.rmi.service.UserService; public class Client {
public static void main(String[] args){
try{
//调用远程对象,注意RMI路径与接口必须与server配置一致
UserService userService=(UserService)Naming.lookup("rmi://127.0.0.1:6600/userService");
User user =userService.getUserById("1245");
System.out.println(user.getName());
}catch(Exception ex){
ex.printStackTrace();
}
}
}
先启动server端
Program
然后启动client
Client

显示结果各自是

Service Start!

client

測试

java远程调用rmi入门实例的更多相关文章

  1. java rmi 入门实例

    java rmi 入门实例 (2009-06-16 16:07:55) 转载▼ 标签: java rmi 杂谈 分类: java-基础    java rmi即java远程接口调用,实现了2台虚拟机之 ...

  2. Java中间件之RMI及实例介绍 · zijian's blog

    RMI介绍   远程方法调用(Remote Method Invocation)是Sun公司规定的允许在不同的JAVA虚拟机之间进行对象间通信的一种规范.在RMI中,JVM可以位于一个或多个计算机上, ...

  3. Java[2] 分布式服务架构之java远程调用技术浅析(转http://www.uml.org.cn/zjjs/201208011.asp)

    转自:http://www.uml.org.cn/zjjs/201208011.asp 在分布式服务框架中,一个最基础的问题就是远程服务是怎么通讯的,在Java领域中有很多可实现远程通讯的技术,例如: ...

  4. java 远程调用 RPC

    1. 概念 RPC,全称为Remote Procedure Call,即远程过程调用,它是一个计算机通信协议.它允许像调用本地服务一样调用远程服务.它可以有不同的实现方式.如RMI(远程方法调用).H ...

  5. java远程调用linux的命令或者脚本

    转载自:http://eksliang.iteye.com/blog/2105862 Java通过SSH2协议执行远程Shell脚本(ganymed-ssh2-build210.jar) 使用步骤如下 ...

  6. Java远程调用

    一.  概念: RMI全称是Remote Method Invocation-远程方法调用,其威力就体现在它强大的开发分布式网络应用的能力上,是纯Java的网络分布式应用系统的核心解决方案之一.它支持 ...

  7. Java远程调用邮件服务器,实现邮件发送

    写这篇文章的背景是公司Android客户端需要实现一个功能,实现类似于密码找回或者用户注册完发送一个邮件给用户的功能,当然这些逻辑客户端只负责请求自己的服务端,自己的服务端再去请求邮件服务器. 邮件服 ...

  8. struts1+spring+myeclipse +cxf 开发webservice以及普通java应用调用webservice的实例

    Cxf + Spring+ myeclipse+ cxf 进行  Webservice服务端开发 使用Cxf开发webservice的服务端项目结构 Spring配置文件applicationCont ...

  9. Java面向对象之封装 入门实例(一)

    一.基础概念 (一)面向对象的三大特征:      1.封装         2.继承          3.多态 (二)封装:隐藏实现细节,对外提供公共的访问方式(接口). 封装的体现之一:将属性都 ...

随机推荐

  1. 一丶Python模块之getpass模块

    Python模块之getpass模块 Python 模块(Module),是一个 Python 文件,以 .py 结尾,包含了 Python 对象定义和Python语句. getpass模块提供了可移 ...

  2. 【LeetCode】Count and Say(报数)

    这道题是LeetCode里的第38道题. 题目要求: 报数序列是一个整数序列,按照其中的整数的顺序进行报数,得到下一个数.其前五项如下: 1. 1 2. 11 3. 21 4. 1211 5. 111 ...

  3. Android圆弧背景

    代码改变世界 Android圆弧背景 <?xml version="1.0" encoding="utf-8"?><shape xmlns:a ...

  4. Python 打印嵌套list中每个数据(遍历列表)

    new_list = ["H1","H2",1999] for each_list in new_list: print (each_list); 若列表中包含 ...

  5. BZOJ 3850: ZCC Loves Codefires【贪心】

    Though ZCC has many Fans, ZCC himself is a crazy Fan of a coder, called "Memset137". It wa ...

  6. cf701E Connecting Universities

    Treeland is a country in which there are n towns connected by n - 1 two-way road such that it's poss ...

  7. Mysql字符集与校对规则

    字符集是一套字符和编码的集合,校对规则是用于比较字符集的一套规则. 所以字符集有两部分组成字符集合和对应的编码集合.比如说,现在有这几个字符:A B a b, 假设它们对应的编码分别是00, 01, ...

  8. 关于a标签的onclick和href谁先执行的问题

    今天上午遇到一个问题,我想在a标签跳转的时候增加一些程序上的判断,但又不会影响a标签的正常跳转,于是就有了这篇文章. 我的具体代码是这样的: <a href="http://www.m ...

  9. echarts3样例

    <script type="text/javascript" src="echarts.min.js"></script> <di ...

  10. luogu P2659 美丽的序列

    题目背景 GD是一个热衷于寻求美好事物的人,一天他拿到了一个美丽的序列. 题目描述 为了研究这个序列的美丽程度,GD定义了一个序列的“美丽度”和“美丽系数”:对于这个序列的任意一个区间[l,r],这个 ...