java远程调用rmi入门实例
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入门实例的更多相关文章
- java rmi 入门实例
java rmi 入门实例 (2009-06-16 16:07:55) 转载▼ 标签: java rmi 杂谈 分类: java-基础 java rmi即java远程接口调用,实现了2台虚拟机之 ...
- Java中间件之RMI及实例介绍 · zijian's blog
RMI介绍 远程方法调用(Remote Method Invocation)是Sun公司规定的允许在不同的JAVA虚拟机之间进行对象间通信的一种规范.在RMI中,JVM可以位于一个或多个计算机上, ...
- Java[2] 分布式服务架构之java远程调用技术浅析(转http://www.uml.org.cn/zjjs/201208011.asp)
转自:http://www.uml.org.cn/zjjs/201208011.asp 在分布式服务框架中,一个最基础的问题就是远程服务是怎么通讯的,在Java领域中有很多可实现远程通讯的技术,例如: ...
- java 远程调用 RPC
1. 概念 RPC,全称为Remote Procedure Call,即远程过程调用,它是一个计算机通信协议.它允许像调用本地服务一样调用远程服务.它可以有不同的实现方式.如RMI(远程方法调用).H ...
- java远程调用linux的命令或者脚本
转载自:http://eksliang.iteye.com/blog/2105862 Java通过SSH2协议执行远程Shell脚本(ganymed-ssh2-build210.jar) 使用步骤如下 ...
- Java远程调用
一. 概念: RMI全称是Remote Method Invocation-远程方法调用,其威力就体现在它强大的开发分布式网络应用的能力上,是纯Java的网络分布式应用系统的核心解决方案之一.它支持 ...
- Java远程调用邮件服务器,实现邮件发送
写这篇文章的背景是公司Android客户端需要实现一个功能,实现类似于密码找回或者用户注册完发送一个邮件给用户的功能,当然这些逻辑客户端只负责请求自己的服务端,自己的服务端再去请求邮件服务器. 邮件服 ...
- struts1+spring+myeclipse +cxf 开发webservice以及普通java应用调用webservice的实例
Cxf + Spring+ myeclipse+ cxf 进行 Webservice服务端开发 使用Cxf开发webservice的服务端项目结构 Spring配置文件applicationCont ...
- Java面向对象之封装 入门实例(一)
一.基础概念 (一)面向对象的三大特征: 1.封装 2.继承 3.多态 (二)封装:隐藏实现细节,对外提供公共的访问方式(接口). 封装的体现之一:将属性都 ...
随机推荐
- python+selenium 鼠标事件操作
一.前言 除了可以使用 click( ) 来模拟鼠标的单击操作,现在Web产品中还提供了更丰富的鼠标交互方式,例如鼠标右键.双击.悬停.拖动等功能,在WebDriver中,将这些关于鼠标操作的方法都封 ...
- deine const 等关键字区别
define 属于预编译指令,在程序运行之前就已经编译好:额,定义变量,没有类型信息, const 修饰的变量是不可变的,只是给出了内存地址,且只在程序运行时初始化开辟一块内存空间 const 只修饰 ...
- linux系统管理员 第五部分 1认识系统服务
linux系统管理员 一 认识系统服务 二认识与分析登录文件 三启动流程.模组管理与loader 四网络设定与备份策略 五软件的安装 源代码与tarball 六软件的安装rpm srpm与yum ...
- zoj 1760 Doubles
Doubles Time Limit: 2 Seconds Memory Limit: 65536 KB As part of an arithmetic competency progra ...
- Brownie Slicing(二分枚举答案)
描述 Bessie has baked a rectangular brownie that can be thought of as an RxC grid (1 <= R <= 500 ...
- HDU 4417 Super Mario(划分树问题求不大于k的数有多少)
Super Mario Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
- 九度oj 题目1367:二叉搜索树的后序遍历序列
题目描述: 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则输出Yes,否则输出No.假设输入的数组的任意两个数字都互不相同. 输入: 每个测试案例包括2行: 第一行为1个整数 ...
- 联合权值(codevs 3728)
Description 无向连通图 G 有 n 个点,n−1 条边.点从 1 到 n 依次编号,编号为 i 的点的权值为 Wi,每条边的长度均为 1.图上两点 (u,v) 的距离定义为 u 点到 v ...
- hdu 4091 Zombie’s Treasure Chest 贪心+枚举
转自:http://blog.csdn.net/a601025382s/article/details/12308193 题意: 输入背包体积n,绿宝石体积s1,价值v1,蓝宝石体积s2,价值v2,宝 ...
- java多线程总结一:线程的两种创建方式及比较
1.线程的概念:线程(thread)是指一个任务从头至尾的执行流,线程提供一个运行任务的机制,对于java而言,一个程序中可以并发的执行多个线程,这些线程可以在多处理器系统上同时运行.当程序作为一个应 ...