电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

java RMI詳細介紹及實例講解

瀏覽:5日期:2022-08-28 14:16:29

java本身提供了一種RPC框架——RMI(即RemoteMethodInvoke遠程方法調用),在編寫一個接口需要作為遠程調用時,都需要繼承了Remote,Remote接口用于標識其方法可以從非本地虛擬機上調用的接口,只有在“遠程接口”(擴展java.rmi.Remote的接口)中指定的這些方法才可遠程使用,下面通過一個簡單的示例,來講解RMI原理以及開發流程:

為了真正實現遠程調用,首先創建服務端工程rmi-server,結構如下:

java RMI詳細介紹及實例講解 

代碼說明:

1.User.java:用于遠程調用時pojo對象的傳輸,該對象必須實現Serializable接口,否則在調用過程中,會拋出NotSerializableException異常,代碼如下:

/** * 用戶信息,用于遠程調用傳輸,必須實現Serializable接口 * * @author andy * */public class User implements Serializable { private static final long serialVersionUID = 1L; private String name; private int age; 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; } @Override public String toString() { return 'name : ' + this.name + ', age : ' + this.age; }}

2.Hello.java:遠程接口,該接口需要繼承Remote接口,并且接口中的方法全都要拋出RemoteException異常,代碼如下:

import java.rmi.Remote;import java.rmi.RemoteException;import pers.andy.rmi.bean.User;/** * 定義一個遠程接口,必須繼承Remote接口,其中需要遠程調用的方法必須拋出RemoteException異常 * * @author andy * */public interface IHello extends Remote { /** * 更新user信息 * @param user * @return * @throws RemoteException */ public User updateUser(User user) throws RemoteException;}

3.HelloImpl:遠程接口實現類,必須繼承UnicastRemoteObject(繼承RemoteServer->繼承RemoteObject->實現Remote,Serializable),只有繼承UnicastRemoteObject類,才表明其可以作為遠程對象,被注冊到注冊表中供客戶端遠程調用(補充:客戶端lookup找到的對象,只是該遠程對象的Stub(存根對象),而服務端的對象有一個對應的骨架Skeleton(用于接收客戶端stub的請求,以及調用真實的對象)對應,Stub是遠程對象的客戶端代理,Skeleton是遠程對象的服務端代理,他們之間協作完成客戶端與服務器之間的方法調用時的通信。),代碼如下:

/** * 遠程的接口的實現,繼承了UnicastRemoteObject,表明該類作為一個遠程對象 * * @author andy * */public class HelloImpl extends UnicastRemoteObject implements IHello { /** * */ private static final long serialVersionUID = 1L; /** * 因為UnicastRemoteObject的構造方法拋出了RemoteException異常,因此這里默認的構造方法必須寫,必須聲明拋出RemoteException異常 * * @throws RemoteException */ public HelloImpl() throws RemoteException { } public User updateUser(User user) throws RemoteException { System.out.println('-------------- 客戶端發送的user為' + user.toString()); user.setName('andy2'); user.setAge(30); return user; }}

4.HelloServer:服務端啟動類,用于創建遠程對象注冊表以及注冊遠程對象,代碼如下:

/** * 服務端啟動類 * * @author andy * */public class HelloServer { public static void main(String args[]) { try { // 本地主機上的遠程對象注冊表Registry的實例,并指定端口為8888,這一步必不可少(Java默認端口是1099) LocateRegistry.createRegistry(8888); // 把遠程對象注冊到RMI注冊服務器上,并命名為RHello // 綁定的URL標準格式為:rmi://host:port/name(其中協議名可以省略,下面兩種寫法都是正確的) Naming.bind('rmi://localhost:8888/RHello', rhello); // Naming.bind('//localhost:8888/RHello',rhello); System.out.println('------------遠程對象IHello注冊成功,等待客戶端調用...'); } 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(); } }}

補充說明:為何HelloImpl繼承了UnicastRemoteObject就可以被作為遠程對象發布,查閱UnicastRemoteObject的源碼可以發現:

protected UnicastRemoteObject() throws RemoteException { this(0); } protected UnicastRemoteObject(int port) throws RemoteException { this.port = port; exportObject((Remote) this, port); }

其實在啟動server端的時候,new了HelloImpl對象,因為繼承了UnicastRemoteObject,會先調用父類的構造方法,這時候,就會將this(當前對象)通過exportObject方法注冊。

所以,如果在被導出的對象需要繼承其它的類,那么就可以不采用集成UnicastRemoteObject的方式,而是通過exportObject方法將其導出為遠程對象:

...// 創建一個遠程對象IHello rhello = new HelloImpl();//HelloImpl不需要繼承UnicastRemoteObject類,通過exportObject將其顯示導出UnicastRemoteObject.exportObject(rhello,0);...

以上即是服務端所有代碼,接下來是創建客戶端工程,結構如下:

java RMI詳細介紹及實例講解

實際應用開發中,客戶端的User.java和IHello.java應該是從服務端導出jar包的形式添加到依賴庫里,因此這邊只介紹HelloClient.java,該類為客戶端啟動類,用于在注冊表中查找遠程對象實現遠程方法調用,代碼如下:

/** * 客戶端啟動類 * * @author andy * */public class HelloClient { public static void main(String args[]) { try { // 在RMI服務注冊表中查找名稱為RHello的對象,并調用其上的方法 IHello rhello = (IHello) Naming.lookup('rmi://localhost:8888/RHello'); // 構造user對象,測試遠程對象傳輸 User user = new User(); user.setAge(20); user.setName('andy'); System.out.println('-------------- 服務端返回的的user為' + rhello.updateUser(user).toString()); } catch (NotBoundException e) { e.printStackTrace(); } catch (MalformedURLException e) { e.printStackTrace(); } catch (RemoteException e) { e.printStackTrace(); } }}

到此為止,客戶端和服務端的工程都搭建完畢,現在可以進行測試,執行次序和測試結果如下所示:

1.首先運行服務端啟動類HelloServer,結果如下:

服務端:------------遠程對象IHello注冊成功,等待客戶端調用...

2.運行客戶端啟動類,結果如下:

服務端:-------------- 客戶端發送的user為name : andy, age : 20 客戶端:-------------- 服務端返回的的user為name : andy2, age : 30

 到此這篇關于java RMI詳細介紹及實例講解的文章就介紹到這了,更多相關java RMI 內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網! 

標簽: Java
相關文章:
主站蜘蛛池模板: 反渗透阻垢剂-缓蚀阻垢剂厂家-循环水处理药剂-山东鲁东环保科技有限公司 | 政府园区专业委托招商平台_助力企业选址项目快速落地_东方龙商务集团 | 四川成都干燥设备_回转筒干燥机_脉冲除尘器_输送设备_热风炉_成都川工星科机电设备有限公司 | 电磁铁_小型推拉电磁铁_电磁阀厂家-深圳市宗泰电机有限公司 | 信阳市建筑勘察设计研究院有限公司 | 世界箱包品牌十大排名,女包小众轻奢品牌推荐200元左右,男包十大奢侈品牌排行榜双肩,学生拉杆箱什么品牌好质量好 - Gouwu3.com | 消防设施操作员考试报名时间,报名入口,报考条件 | 天津暖气片厂家_钢制散热器_天津铜铝复合暖气片_维尼罗散热器 | 吉祥新世纪铝塑板_生产铝塑板厂家_铝塑板生产厂家_临沂市兴达铝塑装饰材料有限公司 | 焊接烟尘净化器__焊烟除尘设备_打磨工作台_喷漆废气治理设备 -催化燃烧设备 _天津路博蓝天环保科技有限公司 | 深圳公司注册-工商注册公司-千百顺代理记账公司 | 水质传感器_水质监测站_雨量监测站_水文监测站-山东水境传感科技有限公司 | 南京租车,南京汽车租赁,南京包车,南京会议租车-南京七熹租车 | 不锈钢钢格栅板_热浸锌钢格板_镀锌钢格栅板_钢格栅盖板-格美瑞 | 武汉宣传片制作-视频拍摄-企业宣传片公司-武汉红年影视 | 哈希PC1R1A,哈希CA9300,哈希SC4500-上海鑫嵩实业有限公司 | 高压无油空压机_无油水润滑空压机_水润滑无油螺杆空压机_无油空压机厂家-科普柯超滤(广东)节能科技有限公司 | 高铝轻质保温砖_刚玉莫来石砖厂家_轻质耐火砖价格 | 细胞染色-流式双标-试剂盒免费代做-上海研谨生物科技有限公司 | app开发|app开发公司|小程序开发|物联网开发||北京网站制作|--前潮网络 | 万家财经_财经新闻_在线财经资讯网| 钢格板|镀锌钢格板|热镀锌钢格板|格栅板|钢格板|钢格栅板|热浸锌钢格板|平台钢格板|镀锌钢格栅板|热镀锌钢格栅板|平台钢格栅板|不锈钢钢格栅板 - 专业钢格板厂家 | 旋转气浴恒温振荡器-往复式水浴恒温振荡器-金怡百科 | 网架支座@球铰支座@钢结构支座@成品支座厂家@万向滑动支座_桥兴工程橡胶有限公司 | 合肥白癜风医院_[治疗白癜风]哪家好_合肥北大白癜风医院 | 抖音短视频运营_企业网站建设_网络推广_全网自媒体营销-东莞市凌天信息科技有限公司 | 高防护蠕动泵-多通道灌装系统-高防护蠕动泵-www.bjhuiyufluid.com慧宇伟业(北京)流体设备有限公司 | 带锯机|木工带锯机圆木推台锯|跑车带锯机|河北茂业机械制造有限公司| | 并离网逆变器_高频UPS电源定制_户用储能光伏逆变器厂家-深圳市索克新能源 | 气体检测仪-氢气检测仪-可燃气体传感器-恶臭电子鼻-深国安电子 | 拼装地板,悬浮地板厂家,悬浮式拼装运动地板-石家庄博超地板科技有限公司 | 合肥风管加工厂-安徽螺旋/不锈钢风管-通风管道加工厂家-安徽风之范 | 沈飞防静电地板__机房地板-深圳市沈飞防静电设备有限公司 | B2B网站_B2B免费发布信息网站_B2B企业贸易平台 - 企资网 | 温湿度记录纸_圆盘_横河记录纸|霍尼韦尔记录仪-广州汤米斯机电设备有限公司 | 视频直播 -摄影摄像-视频拍摄-直播分发 | 济南网站策划设计_自适应网站制作_H5企业网站搭建_济南外贸网站制作公司_锐尚 | 新能源汽车电池软连接,铜铝复合膜柔性连接,电力母排-容发智能科技(无锡)有限公司 | 二手光谱仪维修-德国OBLF光谱仪|进口斯派克光谱仪-热电ARL光谱仪-意大利GNR光谱仪-永晖检测 | 标准光源箱|对色灯箱|色差仪|光泽度仪|涂层测厚仪_HRC大品牌生产厂家 | 无锡装修装潢公司,口碑好的装饰装修公司-无锡索美装饰设计工程有限公司 |