实习一远程过程调用中间件及数据访问中间件
- 格式:doc
- 大小:77.50 KB
- 文档页数:6
基于消息中间件的数据安全交换方案摘要:由于内外网安全管理权限的不同,大量相互独立、分散的数据未能实现有效连接、交换,制约了相关单位信息化建设的进一步发展。
消息中间件的出现为实现分布式环境下的数据交换提供了良好的解决方案。
本文提出在现有消息中间件的基础上增加消息标识信息及完整性校验过程,构建了基于标识的SSL改进技术,并设计了相应的数据安全交换方案,从而保证了交换过程的安全可靠。
关键词:消息中间件标识SSL 安全交换1 现有通信机制在分布式环境下,为了集成分布式应用,开发者需要对异构环境下的分布式应用提供有效的通信手段。
系统间通信常采用的方式包括远程过程调用、分布式对象技术和消息传递。
1.1 远程过程调用RPC(Remote Procedure Call)远程过程调用是支持分布式应用系统之间通信的一种重要机制。
RPC技术需要采用软件代理实现不同地址空间执行程序之间的通信。
RPC应用分为Client和Server两部分,Server用于提供多个远程过程以供调用,Client用于向Server发送调用远程过程的请求。
RPC通过本地机器的过程声明调用过程,从而达到过程的实现在远程机器上,过程的声明在本地机器上。
通常情况下,远程过程调用是同步通讯,如果采用线程机制也能够进行异步调用,但是使用过程较为繁琐。
同步通信机制存在一定的局限性,例如需要考虑网络和系统故障、流量控制以及进程同步等复杂问题。
此外,由于缺少中间代理处理请求,Client发出请求时Server 必须处于运行状态,导致Client和Server的生命周期耦合。
1.2 分布式对象技术分布式对象技术是伴随网络而发展起来的一种面向对象的技术,是分布式技术与面向对象技术的结合。
由于对象请求代理负责请求传送和Server定位,Client和Server之间并不需要直接连接。
Client不需要了解如何与Server通信以及如何激活和存储Server对象,也不必知道Server对象的位置、使用何种操作系统及其他与接口无关的成分的状态。
dubbo远程调用实例
摘要:
一、Dubbo简介与架构
二、Dubbo远程调用原理
1.服务暴露
2.服务引入
3.服务调用流程
三、Dubbo远程调用实例
1.编写提供者
2.编写消费者
3.运行并提供远程调用
正文:
一、Dubbo简介与架构
Dubbo是一款高性能的Java RPC框架,起源于阿里巴巴公司开源的一个高性能、轻量级的开源Java RPC框架。
Dubbo可以与Spring框架无缝集成,提供了三大核心能力:面向接口的远程方法调用、智能容错和负载均衡,以及服务自动注册和发现。
二、Dubbo远程调用原理
1.服务暴露
服务提供者需要暴露服务接口,并在注册中心(如ZooKeeper)注册该服务。
服务提供者将服务接口的实现类包装为一个Dubbo接口,并发布到注册
中心。
2.服务引入
服务消费者从注册中心获取服务提供者的信息,包括服务地址、协议等。
服务消费者通过Dubbo的客户端SDK与服务提供者建立连接。
3.服务调用流程
服务消费者通过Dubbo客户端发起远程调用,请求服务提供者执行某个方法。
服务提供者接收到请求后,执行相应的方法并返回结果。
服务消费者收到结果后,完成远程调用。
三、Dubbo远程调用实例
以下是一个简单的Dubbo远程调用实例,分为提供者和消费者两部分。
山东大学软件学院中间件技术课程实验报告onResize();},error : function(e) {alert('初始化数据错误!');}});});并从bootstrap上找一些已经写好的布局,作为参考。
加入到网页的界面中。
一、数据库操作的封装1、AutoCreateDB——自动创建数据库(1)可以根据下列query的结果判断数据库是否存在:Object obj = dao.QueryOnly("SELECT COUNT(*) FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME=?",new Object[] { DATABASE });不存在则创建数据库,则执行executeCreate方法。
(2)AutoCreateDB自动创建数据库的表遍历表,对于数据库中的每一个表,都执行“检测、若不存在则创建”操作,可以根据该query的结果判断数据库的表是否存在,不存在则创建数据库表,则执行executeCreate方法。
2、JdbcDao数据库相关操作(1)在JdbcDao 中定义应用与数据库建立连接,其相关参数从config.properties中获取:/**获取Connection连接*/public Connection getConnection(){Connection conn = null;System.out.println(JDBC_URL);System.out.println(USER_NAME);System.out.println(USER_PWD);try {conn = DriverManager.getConnection(JDBC_URL,USER_NAME,USER_PWD);} catch (SQLException e) {e.printStackTrace();}return conn;}(2)在JdbcDao 中定义关闭所有连接的方法/**关闭所有连接*/public void closeAll(Connection conn, Statement ps, ResultSet rs){try {if(rs!=null) rs.close();} catch (SQLException e) { e.printStackTrace(); }try {if(ps!=null) ps.close();} catch (SQLException e) { e.printStackTrace(); }try {if(conn!=null) conn.close();} catch (SQLException e) { e.printStackTrace(); }}(3)在JdbcDao 中定义增删改查的方法在JdbcDao 中定义执行update的方法(delete则status=0)public int executeUpdate(String sql, Object[] obj)在JdbcDao 中定义执行insert的方法public int executeInsert(String sql, Object[] obj)在JdbcDao 中定义执行query(返回多条记录)的方法public List<Map<String, Object>> Query(final String sql,Object []obj)在JdbcDao 中定义执行query(返回单条记录)的方法public Object QueryOnly(final String sql,Object []obj)3、JoinSql, Relatio, Where构建SQL语使得无需自己写原生的SQL,自己写SQL则比较容易出错.比如,当程序开始时检测并初始化数据库和表时输出的数据库语句如下:二、处理模块以及控制模块1、本框架使用流程:首先是一个control,类的命名方式xxx+Veasion请求url,/项目名/test/method.veatest:类名除Veasion之外的字符串,小写method:将被调用的方法名,或注解@Veasion(value=""),值不包含/ method定义:返回String,表示跳转的url或页面,默认转发,重定向请加“redirect:”或方法注解@Veasion(redirect=true).返回除String之外的Object,返回该对象的json.类中可以添加属性HttpServletRequest获取请求对象.类中可以添加属性HttpServletResponse获取响应对象.类中可以添加属性JSONObject获取分装的数据.2、在VeasionServlet的service方法中的uri预处理字符串处理uri,得到className和methodNameString[] classMethod = getClassMethod(vea);System.out.println("===");for(int i=0;i>classMethod.length;i++){System.out.println(classMethod[i]);}String className = classMethod[0];String methodName = classMethod[1];vea= classMethod[2];比如处理一下uri的过程如下:uri:/Veasion/admin/desktop/iconSearch.veavea:/admin/desktop/iconSearch.veaclassName:veasion.control.admin.DesktopVeasionmethodName:IconSearchvea_:admin/desktop/iconSearch3、Java的反射机制简介(1)Java的反射机制简介及举例:Java语言允许通过程序化的方式间接对Class的对象实例操作,Class文件由类装载器装载后,在JVM中将形成一份描述Class结构的元信息对象,通过该元信息对象可以获知Class的结构信息:构造函数、属性和方法等。
1、中间件的概念随着计算机技术的飞速发展,各种各样的应用软件需要在各种平台之间进行移植,或者一个平台需要支持多种应用软件和管理多种应用系统,软、硬件平台和应用系统之间需要可靠和高效的数据传递或转换,使系统的协同性得以保证。
这些,都需要一种构筑于软、硬件平台之上,同时对更上层的应用软件提供支持的软件系统,而中间件正是在这个环境下应孕而生。
比较流行的定义是:中间件是一种独立的系统软件或服务程序,分布式应用软件借助这种软件在不同的技术之间共享资源。
中间件位于客户机/服务器的操作系统之上,管理计算资源和网络通讯。
中间件不仅仅实现互连,还要实现应用之间的互操作;中间件是基于分布式处理的软件,定义中特别强调了其网络通讯功能。
2、中间件特点及优势通常意义下,中间件应具有以下的一些特点:满足大量应用的需要;运行于多种硬件和OS平台;支持分布式计算,提供跨网络、硬件和OS平台的透明性的应用或服务的交互功能;支持标准的协议;支持标准的接口。
程序员通过调用中间件提供的大量API,实现异构环境的通讯,从而屏蔽异构系统中复杂的操作系统和网络协议。
由于标准接口对于可移植性和标准协议对于互操作性的重要性,中间件已成为许多标准化工作的主要部分。
对于应用软件开发,中间件远比操作系统和网络服务更为重要,中间件提供的程序接口定义了一个相对稳定的高层应用环境,不管底层的计算机硬件和系统软件怎样更新换代,只要将中间件升级更新,并保持中间件对外的接口定义不变,应用软件几乎不需任何修改,从而保护了企业在应用软件开发和维护中的重大投资。
中间件是一种独立的系统软件或服务程序,分布式应用软件借助这种软件在不同的技术之间共享资源。
中间件软件管理着客户端程序和数据库或者早期应用软件之间的通讯。
中间件在分布式的客户和服务之间扮演着承上启下的角色,如事务管理、负载均衡以及基于Web的计算等。
利用这些技术有助于减轻应用软件开发者的负担,使他们利用现有的硬件设备、操作系统、网络、数据库管理系统以及对象模型创建分布式应用软件时更加得心应手。
一、摘要中间件(Middleware)是处于操作系统和应用程序之间的软件,也有人认为它应该属于操作系统中的一部分。
人们在使用中间件时,往往是一组中间件集成在一起,构成一个平台(包括开发平台和运行平台),但在这组中间件中必需要有一个通信中间件,即中间件=平台+通信,这个定义也限定了只有用于分布式系统中才能称为中间件,同时还可以把它与支撑软和实用软件区分开来。
它隐藏了计算机体系结构、操作系统、编程语言和网络技术等方面的异构性,将复杂的协议处理、分割的内存空间、数据复本、网络故障、并行操作等问题与应用程序隔离开来,为上层应用软件提供运行与开发的环境,帮助用户灵活、高效地开发和集成复杂的应用软件。
中间件已成为构建现代分布式应用、集成系统的一种不可或缺的成分,数据访问、企业资源规划、多媒体、无线/移动计算、电子商务、网格等都是它的典型应用领域。
中间件技术屏蔽了底层分布式环境的复杂性和异构性,简化了分布式应用程序的开发,使分布式应用程序的健壮性、可扩展性、可用性更好。
本文介绍了中间件的定义、分类、主流中间件技术平台,分析了中间件技术面临的挑战,提出了中间件技术研究的几个发展趋势,即网格技术、面向移动计算、面向服务质量等。
二、关键词:中间件分类技术平台发展趋势计算机系统最初阶段多是单机系统,多个用户是通过联机终端来访问。
随着网络的出现,产生了客户/服务器的计算服务模式,多个客户端可以共享数据库服务器和打印服务器等。
随着计算机和网络技术的飞速发展,许多软件需要在不同厂家的硬件平台、网络协议异构环境下运行,应用的规模从局域网发展到广域网,应用范围面向三层和多层体系结构的分布式环境,在分布式环境中,无论是硬件平台还是软件平台都不可能做到统一,而大规模的应用软件通常要求在软硬件各不相同的分布式网络上运行。
中间件产生以前,应用软件直接使用操作系统、网络协议和数据库等开发,开发者不得不直接面对许多复杂棘手的问题,如操作系统的多样性、繁杂的网络程序设计和管理、复杂多变的网络环境、数据分散处理带来的不一致性问题等等,这些与用户的业务没有直接关系,但又必须解决,耗费了大量的时间和精力,因此开发者迫切需要一种基于标准的、独立于计算机硬件以及操作系统的开发和运行环境,于是,中间件技术应运而生。
rpc调用实例RPC调用实例在现代软件开发中,远程过程调用(Remote Procedure Call,简称RPC)是一种常用的通信协议,用于在分布式系统中进行进程间通信。
RPC调用可以使不同的计算机之间的程序能够像调用本地函数一样进行通信,从而实现分布式系统的协同工作。
本文将通过一个实例来介绍RPC调用的基本原理和使用方法。
假设我们有一个电商系统,其中包含商品管理和订单管理两个模块。
现在我们需要在商品管理模块中调用订单管理模块的接口来创建订单。
为了实现这个功能,我们可以使用RPC调用来实现模块之间的通信。
我们需要定义订单管理模块的接口。
在订单管理模块中,我们定义一个名为"createOrder"的方法,该方法接收商品信息作为参数,并返回一个订单号。
订单管理模块将根据商品信息创建订单,并将订单号返回给商品管理模块。
接下来,在商品管理模块中,我们需要通过RPC调用来调用订单管理模块的"createOrder"方法。
首先,我们需要引入相应的RPC框架,例如Dubbo或gRPC,以便使用其提供的API来进行远程调用。
然后,我们需要配置RPC框架的相关参数,如服务地址、端口等。
在商品管理模块中,我们可以定义一个名为"createOrderRemote"的方法来调用订单管理模块的"createOrder"方法。
在这个方法中,我们首先需要创建一个RPC客户端,然后使用客户端的API来调用远程方法。
具体来说,我们可以使用客户端的"invoke"方法来调用远程方法,并传递商品信息作为参数。
最后,我们可以将远程方法的返回值作为订单号返回给调用方。
在商品管理模块中,我们可以通过如下代码来实现"createOrderRemote"方法:```javapublic String createOrderRemote(Item item) {String orderNumber = "";try {// 创建RPC客户端RPCClient client = new RPCClient("127.0.0.1", 8888);// 调用远程方法orderNumber = client.invoke("createOrder", item);} catch (Exception e) {e.printStackTrace();}return orderNumber;}```在上述代码中,我们首先创建了一个RPC客户端,指定了服务地址为"127.0.0.1",端口为8888。
远程调⽤⽅法调⽤⽅式介绍⽆论是微服务还是SOA,都⾯临着服务间的远程调⽤。
常见的远程调⽤⽅式有以下⼏种:RPC:Remote Produce Call远程过程调⽤,类似的还有RMI(Remote Method Invocation,远程⽅法调⽤)。
⾃定义数据格式,基于原⽣TCP通信,速度快,效率⾼。
早期的webservice,现在热门的dubbo,都是RPC的典型Http:http其实是⼀种⽹络传输协议,基于TCP,规定了数据传输的格式。
现在客户端浏览器与服务端通信基本都是采⽤Http协议。
也可以⽤来进⾏远程服务调⽤。
缺点是消息封装臃肿。
现在热门的Rest风格,就可以通过http协议来实现。
认识RPC概念解释RPC,即 Remote Procedure Call(远程过程调⽤),是⼀个计算机通信协议。
该协议允许运⾏于⼀台计算机的程序调⽤另⼀台计算机的⼦程序,⽽程序员⽆需额外地为这个交互作⽤编程。
说得通俗⼀点就是:A计算机提供⼀个服务,B计算机可以像调⽤本地服务那样调⽤A计算机的服务。
作⽤实现远程调⽤其他计算机的服务像调⽤本地服务⼀样调⽤远程服务问题总结要实现远程调⽤,肯定是通过⽹络传输数据。
A程序提供服务,B程序通过⽹络将请求参数传递给A,A程序接收参数调⽤本地服务执⾏后得到结果,再将结果返回给B程序。
采⽤何种⽹络通讯协议?现在⽐较流⾏的RPC框架,都会采⽤TCP作为底层传输协议数据传输的格式怎样?两个程序进⾏通讯,必须约定好数据传输格式。
就好⽐两个⼈聊天,要⽤同⼀种语⾔,否则⽆法沟通。
所以,必须定义好请求和响应的格式。
另外,数据在⽹路中传输需要进⾏序列化,所以还需要约定统⼀的序列化的⽅式。
如果仅仅是远程调⽤,还不算是RPC,因为RPC强调的是过程调⽤,调⽤的过程对⽤户⽽⾔是应该是透明的,⽤户不应该关⼼调⽤的细节,可以像调⽤本地服务⼀样调⽤远程服务。
所以RPC⼀定要对调⽤的过程进⾏封装认识http概念解释Http协议:超⽂本传输协议,是⼀种应⽤层协议。
68 1网络计算环境 Journal ofSoftware软件学报Vo1.24,No.1,January 2013
为高可靠、低成本、高效率开发与管理各种复杂的网络应用系统,面向网络资源共享与集成的网络计算环 境【】-4]得到迅速发展.在这样的环境下,网络不仅是信息传输的基础设施,而且是信息处理和服务共享的基础设 施,网络可以为人们提供强大的一体化计算平台.从这个意义上说,网络就是计算机,目前,世界上最强大的“计算 机”无疑是互联网. 为此,需要在网络原基础设施之上构造或装备一个支持一体化网络计算的平台软件,其作用是:管理网络上 的各类软、硬件资源,支持网络资源的共享与集成,并为网络应用提供高效、可信的开发、部署和运行环境.像 在裸机上需要配备操作系统等基础软件才能有效开发应用软件一样,该平台软件旨在有效支持快速构建网络 应用,因而可视为网络上的操作系统. 但是,与单机不同.网络世界是开放的.分布性、自治性、异构性、可演化性已成为网络应用与信息系统的 固有特征.为适应复杂信息世界的不断变化和发展,网络资源集成不能简单套用工业化的做法.如果说机械系统 的集成是刚性的,那么信息系统的集成就是柔性的.一方面,需要以提高系统互操作性为主要目标,及时制订面 向信息系统集成的各种技术体系和标准;另一方面,更需要研究一套支持随需应变的敏捷软件技术.相应技术已 成为当前软件工程的研究热点【5-9】,主要有: (1) 微内核集成总线技术,支持软件模块的即插即用,适应软件功能需求的变化; (2) 软构件和对象代理技术,支持程序代码的重用和分布对象之间的互访与通信,适应代码实现的变化 与应用软件运行环境的变化.这里,软构件简称构件或组件,顾名思义,构之件也.一是构,强调其可构 造性和可组装性:二是件,强调其信息隐蔽性和可包装性.构件作为计算机中一组可重用的二进制代 码,可视为对象的一种发展.基于Agent的自适应构件还能动态适应运行环境的变化.构件化是当今信 息系统软件开发的主流方法,也是软件体系结构的重要特征之一; (3) 消息代理和各种适配机制,支持不同应用代码之问的互联互通互操作,适应应用软件业务逻辑和业 务流程的变化: (4) 软构件的组装、部署、动态重构与绑定等技术,支持网络应用与信息系统的静态和动态搭建,适应应 用需求与操作环境的变化: (5)面向Web服务的架构技术,支持信息系统松散耦合的部门与部门之间的跨域集成,适应更大范围的 网络环境的变化. 网络计算中间件是一种包含上述主要技术的平台软件,它以柔性的松散耦合方式对应万变,是灵活响应网 络环境变化、应用需求变化和软件功能变化的平台软件,已经成为一体化网络计算的基础平台.
rmi远程调用工作原理RMI(远程方法调用)是一种用于实现远程通信的Java API。
它允许一个Java对象在不同的Java虚拟机(JVM)之间进行通信和交互。
RMI的工作原理是通过序列化和反序列化来实现的。
在RMI中,有三个主要的角色:远程对象、客户端和服务器。
远程对象是实现了远程接口的Java对象,它可以在不同的JVM之间进行传输和调用。
客户端是发起远程调用的一方,而服务器是提供远程服务的一方。
RMI的工作流程如下:1. 客户端通过查找RMI注册表来获取远程对象的引用。
RMI注册表是一个存储远程对象引用的服务,客户端可以通过查找注册表来获取远程对象的地址。
2. 客户端通过远程对象的引用调用远程方法。
在调用远程方法之前,客户端需要序列化方法的参数,并将序列化后的数据发送给服务器。
3. 服务器接收到客户端发送的请求后,通过反序列化恢复方法的参数,并执行方法体中的代码。
服务器可以访问本地资源,如数据库或文件系统,并根据客户端的请求进行相应的处理。
4. 服务器执行完方法后,将方法的返回值序列化并发送给客户端。
5. 客户端接收到服务器发送的返回值后,通过反序列化恢复返回值,并继续执行后续的代码。
需要注意的是,在RMI中,远程对象和其所在的JVM之间通过网络进行通信。
为了实现远程通信,RMI使用了Java的序列化机制。
序列化是将一个Java对象转换成字节流的过程,而反序列化则是将字节流转换回Java对象的过程。
RMI的序列化机制可以确保远程对象在不同的JVM之间进行传输和重建。
当客户端调用远程方法时,RMI会自动对方法的参数进行序列化,并将序列化后的数据发送给服务器。
服务器在接收到数据后,会进行反序列化,并将参数恢复成原始的Java对象。
同样地,服务器执行完方法后,将返回值序列化并发送给客户端,客户端在接收到返回值后进行反序列化。
RMI的远程调用过程中,序列化和反序列化是必不可少的环节。
通过序列化,RMI可以将Java对象在网络中进行传输,使得远程调用得以实现。
实验一远程过程调用中间件及数据访问中间件
一、实习目的
通过实例掌握RMI,RPC,JDBC等中间件的使用。
二、实习要求
1)RPC实现远程计算服务。
服务器端提供计算服务;客户端调用计算服务。
2)RMI+JDBC远端数据库的访问。
实现简单的成绩查询系统(创建表,录入成绩,查询成绩等)。
在服务器端,通过JDBC访问数据库。
客户端调用服务端提供的各种数据库操作。
3)服务器和客户端不在同的机器上进行测试。
4)打包成易于执行的文件,如exe, bat文件。
三、实习过程
1 利用RPC实现远程计算服务。
(1)使用IDL定义服务接口mathservice.idl, 定义计算服务操作,方法如下:
加:void Cal_Add([in] double a, [in] double b, [out] double * result);
减:void Cal_Sub([in] double a, [in] double b, [out] double * result);
乘:void Cal_Mul([in] double a, [in] double b, [out] double * result);
除:void Cal_Div([in] double a, [in] double b, [out] double * result);
(2)编写配置文件mathservice.acf, 定义绑定句柄
(3) 编译mathservice.idl文件,产生文件mathservice.h, mathservice_s.c, mathservice_c.c
(4) 编写服务端程序, 编译连接工程,生成mathservice.exe
(5) 编写客户端程序
(6) 测试:
测试结果截图如下:
加法运算:
减法运算:乘法运算:除法运算:
2 RMI+JDBC远端数据库的访问
(1) 使用mysql-connector-java-5[1].0.8.zip驱动包,编写DBmanager类,访问mysql数据
库,实现创建表,录入成绩,查询成绩等操作,主要代码如下:
//加载驱动,获取连接
static {
try {
Class.forName("com.mysql.jdbc.Driver");
cn = DriverManager.getConnection(url, username, password);
} catch (Exception e) {
e.printStackTrace();
}
}
//创建表
public boolean createTable() {
int i = 0;
try {
ps = cn.prepareStatement("" +
"create table rmitest(id int primary key,name varchar(20) not null);");
i = ps.executeUpdate();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if (i!=0) {
return true;
} else {
return false;
}
}
//插入数据
public boolean insertDate() {
int j = 0;
try {
ps = cn.prepareStatement("insert into rmitest
values(100,'rmitest')");
j += ps.executeUpdate();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if (j != 0)
return true;
else
return false;
}
//获取数据
public String getDate() {
ResultSet rs = null;
String result="";
try {
ps = cn.prepareStatement("select * from rmitest");
rs = ps.executeQuery();
while(rs.next()){
result+="id="+rs.getObject(1).toString()+",
name="+rs.getObject(2).toString()+"\n";
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return result;
}
}
(2)定义服务接口DataService,。
提供创建表,录入成绩,查询成绩等操作,方法如下:
public boolean createTable() throws RemoteException;
public boolean insertDate() throws RemoteException;
public String getDate() throws RemoteException ;
(3)实现服务,对实现创建表,录入成绩,查询成绩等操作。
实现过程中可直接使用DBmanager类,主要代码如下:
public class DataServiceImpl extends UnicastRemoteObject implements DataService {
DBmanager dBmanager;
public DataServiceImpl() throws RemoteException {
super();
dBmanager = new DBmanager();
}
//调用DBmanager的方法创建表
public boolean createTable() {
return dBmanager.createTable();
}
//调用DBmanager的插入数据
public boolean insertDate() {
return dBmanager.insertDate();
}
//调用DBmanager的方法显示数据
public String getDate() {
return dBmanager.getDate();
}
(4)编写部署类DeployServer,主要代码如下:
// 创建远程对象
DataServiceImpl ds=new DataServiceImpl();
LocateRegistry.createRegistry(1117); //配置端口
// 远程对象绑定到服务
Naming.rebind("//localhost:1117/ds", ds);
System.out.println("RMI服务器正在运行。
");
(5)使用DataService接口,实现客户端RmiJDBCClient 类,主要代码如下:DataService ds = (DataService) Naming.lookup("//localhost:1118/ds");
System.out.println("获取远程数据库中数据如下:");
ds.createTable();//调用远程创建表方法
ds.insertDate();//调用远程插入数据方法
System.out.println(ds.getDate());//调用远程显示数据方法(6)测试
测试如下:
1. 运行服务器端:
2. 运行客户端
四、实习总结
本次实习的主要内容为通过RPC 实现远程计算服务,通过RMI 、JBDC实现远程访问数据库;
通过老师的案例按照实习指导书完成了本次实习,对通过RPC、RMI 实现远程访问有了进一步的理解,但对他们的底层具体实现还不是很理解。