远程通讯之rmi开发案例1---Java基础实现rmi功能
来源:互联网 发布:java jdbc 批量insert 编辑:程序博客网 时间:2024/05/21 14:47
在这里我声明:这里的源码是我从网上copy下来的,详见大神篇:http://blog.csdn.net/leslies2/article/details/6436847
为了便于自己永久记录自己的RMI实战,特此记录。。。
关于任何一个知识我都比较喜欢从基础学起,这也常常让我很痛苦,不过没办法,我不太喜欢不了解机理就去学习高层封装的一些技术。
这篇文章的初衷也是如此,我是为了应用spring3.2.3对RMI的封装及应用才来了解和学习Java最基础的RMI实现。
第一步:你首先要去百度什么是RMI,及RMI是干啥的,不赘述。
第二步:为了便于你再现我的场景,我详细列出我的环境:
开发工具:Eclipse j2ee Kepler(开普勒版本,好像是3.4+吧,这个应该没啥影响),jdk6,
第三部:新建普通项目:j2se项目,目录如下:
上面显示了我的涉及的类名,具体的内容如下:
这是实体类PersonEntity
package rmi.model;import java.io.Serializable;//注意对象必须继承Serializablepublic class PersonEntity implements Serializable { private int id; private String name; private int age;public void setId(int id) {this.id = id;}public int getId() {return id;}public void setName(String name) {this.name = name;}public String getName() {return name;}public void setAge(int age) {this.age = age;}public int getAge() {return age;}}
这是服务端应用接口PersonService:
package rmi.service;import java.rmi.Remote;import java.rmi.RemoteException;import java.util.List;import rmi.model.*;//此为远程对象调用的接口,必须继承Remote类public interface PersonService extends Remote { public List<PersonEntity> GetList() throws RemoteException;}
下面是服务端接口的实现类PersonServiceImpl
package rmi.serviceImpl;import java.rmi.RemoteException;import java.rmi.server.UnicastRemoteObject;import java.util.LinkedList;import java.util.List;import rmi.model.PersonEntity;import rmi.service.*;//此为远程对象的实现类,须继承UnicastRemoteObjectpublic class PersonServiceImpl extends UnicastRemoteObject implements PersonService {public PersonServiceImpl() throws RemoteException {super();// TODO Auto-generated constructor stub}@Overridepublic List<PersonEntity> GetList() throws RemoteException {// TODO Auto-generated method stubSystem.out.println("Get Person Start!");List<PersonEntity> personList=new LinkedList<PersonEntity>();PersonEntity person1=new PersonEntity();person1.setAge(25);person1.setId(0);person1.setName("Leslie");personList.add(person1);PersonEntity person2=new PersonEntity();person2.setAge(25);person2.setId(1);person2.setName("Rose");personList.add(person2);return personList;}}
接下来是服务器端的服务启动类Program:
package rmi.remotingservice;import java.rmi.Naming;import java.rmi.registry.LocateRegistry; import rmi.service.*;import rmi.serviceImpl.*;public class Program{public static void main(String[] args) {// TODO Auto-generated method stub try {PersonService personService=new PersonServiceImpl();//注册通讯端口LocateRegistry.createRegistry(6666);//注册通讯路径Naming.rebind("rmi://192.168.0.234:6666/PersonService", personService);System.out.println("Service Start!");} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}}}
接下来是客户端的调用类ProgramC:
package rmi.remotingclient;import java.rmi.Naming;import java.util.List;import rmi.model.PersonEntity;import rmi.service.*;public class ProgramC { public static void main(String[] args){ try{ //调用远程对象,注意RMI路径与接口必须与服务器配置一致 PersonService personService=(PersonService)Naming.lookup("rmi://192.168.0.234:6666/PersonService"); List<PersonEntity> personList=personService.GetList(); for(PersonEntity person:personList){ System.out.println("ID:"+person.getId()+" Age:"+person.getAge()+" Name:"+person.getName()); } }catch(Exception ex){ ex.printStackTrace(); } }}
这里我要强调原理下:RMI的目的是实现远程调用服务端接口,从而调用服务端的数据。
所以我在测试的时候,使用两台机子,服务器就是我的机子,ip:192.168.0.234 ,大家看到在服务端启动类Program和客户端调用类里的ip就是我的ip,可见,RMi不关心客户端ip,只要求服务端ip及在同一网段(你也可以用虚拟机实现我的两台机子的环境)。
测试方法:
步骤1:我的机子(192.168.0.234)是服务器,启动服务就是运行服务端启动类Program类,因为在Eclipse环境下,右击运行就行。(当然你也可以在cmd里运行Program.class),这时会看到输出信息:“Service start”
步骤2:给你的另一台机子装上jdk6 ,然后去Eclipse的工作空间里把所有的class都拷贝出来,放在另一台机子的c盘下,删除掉里面remotingservice包和serviceImpl包,
这时你的另一台机子的C盘下的rmi目录应该就剩下实体类ProgramC及它的包、服务端接口PersonService及它的包,
步骤3:打开cmd,进入命令提示符输入java rmi/remotingclinet/ProgramC,看到了输出了服务端的信息。好开心啊。。。
- 远程通讯之rmi开发案例1---Java基础实现rmi功能
- 远程通讯之rmi开发案例2---用spring3实现rmi功能
- java 远程通讯之 rmi
- java rmi 远程调用实现
- 远程通讯实例(RMI)
- Java RMI 远程方法调用 基础
- Java RMI之HelloWorld RMI
- rmi实现远程调用
- Java实现远程访问(RMI-Naming)
- JAVA RMI实现远程接口调用
- Java之RMI(远程方法调用)
- JAVA序列化之RMI远程调用
- Java rmi 远程调用
- JAVA RMI 远程调用
- java--- RMI远程调用
- Java rmi 远程调用
- java rmi 远程调用
- java远程调用RMI
- openwrt 策略路由
- 通过AFNetworking下载网络闪屏用的图片并存储到本地同时获取header头相关信息
- 基姆拉尔森计算公式
- selenium IDE mac 使用安装
- leetcode 之 Maximum Depth of Binary Tree
- 远程通讯之rmi开发案例1---Java基础实现rmi功能
- IOS开发网络篇之──ASIHTTPRequest示例(支持断点续传)
- JUnit(>4.0)@BeforeClass、@Before、@Test、@After、@AfterClass、@Ignore
- 利用php调用C语言 扩展PHP的功能
- openwrt RT5350使能两个UART
- 计算几何
- POJ 2516 Minimum Cost(费用流)
- WEB界面客制化之采购申请审批界面(错误做法)
- Java Executors(线程池)