当前位置:文档之家› java远程调用kettle说明与代码

java远程调用kettle说明与代码

java远程调用kettle说明与代码
java远程调用kettle说明与代码

Kettle远程任务执行

1.

2.远程服务器

2.1.说明

KETTLE 提供了名为carte的web server 程序,也叫slave server ,启动该程序可以把主机作为kettle的运行服务器,可以接收其他kettle客户端发送过来的ETL 任务。

此功能为ETL任务分布式执行提供了方便。可以在多个服务器上运行carte web server,在调用不同的ETL任务时,指定不同的目标服务器执行。

2.2.启动方法

kettle提供了carte.bat和carte.sh(linux)批处理脚本来启动子服务器,这种启动方式分为两种

2.2.1.使用主机号和端口号

Carte 127.0.0.1 8080

Carte 192.168.1.221 8081

2.2.2.使用配置文件

Carte /foo/bar/carte-config.xml

Carte https://www.doczj.com/doc/f113359763.html,/carte-config.xml

如果cluster schema中定义了Dynamic cluster选项,则必须使用配置文件来进行启动,当这个子服务器启动时,它需要向配置文件中“masters”中列出的主服务器列表中汇报其运行状态(通过调用主服务器的registerSlave服务),已达到动态地设置子服务器的目的。配置文件格式

master1

localhost

8080

cluster

cluster

Y

Y

slave4-8084

localhost

8084

cluster

cluster

N

这个配置文件主要包括以下几个节点

◆masters: 这里列出来的服务器是当前子服务器需要向其汇报状态的主服

务器。如果当前这个子服务器是主服务器,则它将连接其它的主服务器来获得这个集群中的所有子服务器。

◆report_to_masters : 如果为Y,则表示需要向定义的主服务器发送消息以

表明该从属服务器存在

◆slaveserver : 这里定义的就是当前carte实例运行时需要的子服务器的配

置情况

这里定义的username和password在向主服务器调用Register服务时连接主服务器时提供的安全设置。在 部分,你可以使用

参数,这个参数的优先级高于参数,如果你的机器中安装有多个网卡,这个设置可以起作用。

2.2.

3.程序启动

Kettle提供了org.pentaho.di.www.Carte类,你可以通过该类提供的函数来启动或者停止子服务器。

◆启动子服务器

SlaveServerConfig config = new SlaveServerConfig(hostname, port, false);

Carte. runCarte(config);

◆停止子服务器

carte.getWebServer().stopServer();

2.3.子服务器内幕

我们前面提到过子服务器实际上就是一个web server,该web server是基于Jetty这个嵌入式的开源servlet容器。

这个web server主要是提供转换运行的环境,另外一个重要的功能通过提供servlet来在客户端、主服务器和从属服务器之间进行通讯和控制。主服务器和从属服务器之间是通过httpClient来进行通讯的,通讯时传递的数据是xml 格式。通过提供的servlet,可以实现启动、停止、暂停转换或者作业、获得转换或者作业的状态、注册子服务器、获得子服务器的列表等等

Kettle主要提供了以下的几种基于servlet的服务

◆GetRootServlet:获得Carte的根目录

◆GetStatusServlet:获得在服务器上运行的所有的转换和作业的状态

◆GetTransStatusServlet:获得在服务器上运行的某个指定的转换的每个步

骤的运行状态。

◆PrepareExecutionTransServlet:让服务器上的某个指定的转换做好运行的

准备。

◆StartTransServlet:执行服务器上的某个指定的转换

◆PauseTransServlet:暂停或者重新运行某一个转换

◆StopTransServlet:停止正在运行的转换

◆CleanupTransServlet:清理运行转换时的环境

◆AddTransServlet:向子服务器中增加某个转换。如果服务器中有正在运

行或者准备运行的相同名字的转换,则抛出异常。

◆AllocateServerSocketServlet:分配一个新的socket端口号。这个端口号是

基于你在定义cluster schema中设置的端口号,依次加1

◆StartJobServlet:执行服务器上某个指定的作业

◆StopJobServlet:停止正在运行的作业

◆GetJobStatusServlet:获得某个指定作业的状态

◆AddJobServlet:向当前的子服务器中添加某个作业。

◆RegisterSlaveServlet:注册某个服务器的信息。服务器信息包括子服务器

是否活动、最新活动的时间、最新不活动的时间。这个在dynamic cluster

中需要用到,由从属服务器向主服务器汇报当前状态。

◆GetSlavesServlet:获得集群中子服务器的信息

◆AddExportServlet:以zip文件的形式向caret服务器传递作业或者转换信

息,并将信息加入到服务器中。

3.运行任务

3.1.在spoon中运行

在kettle的集成设计环境spoon中,你可以选择转换中的“运行”菜单项,或者按F9快捷键,弹出以下的窗口

这里有三个选项来决定转换是以什么方式来执行

本地执行:转换或者作业将在你现在使用的JVM中运行。

远程执行:允许你指定一个想运行转换的远程服务器。这需要你在远程服务器上安装Pentaho Data Integration(Kettle)并且运行Carte子服务器。

集群方式执行:允许你在集群环境下执行作业或者转换

3.2.程序运行

代码中需要定义slaveserver ,然后在任务执行配置中设置slaveserver,然后把任务发送给slaveserver

4.程序实现

首先,需要在项目中引入执行kettle所需要的jar包:

实际应该引用更多的jar包,包括

lib/中的所有包

Libext/commons中的所有包等。

调用的源码如下

com.zip

其中在172.16.100.28服务器上运行carte.bat 172.16.100.28 8765命令来启动slaveserver

其中调用方法如下

第六章 远程服务调用和Service Locator

第六章远程服务调用和Service Locator 1.什么是Websharp Service Locator 当今大部分的企业应用都是分布式的,单机版的软件虽然仍旧有很多,但是,在考虑一个完整的应用软件系统框架的时候,总是需要考虑完整的情况。多层分布式应用软件的开发原则和技术通常也是适用于单机版软件的。 对于多层的应用系统来说,我们通常把它们划分成客户端、应用服务层和数据库。在应用服务层,我们需要考虑至少两个方面的问题: ?如何实现业务逻辑 ?如何向客户端提供服务。 我们可能使用多种技术来实现服务的提供:Webservice、.Net Remoting、甚至EJB等。如此多的实现技术,带来的很大的灵活性,但同时也带来了文题,其中一个就是,有多少种服务端技术,就得有多少种相应的客户端访问技术。甚至,在某些分布式应用系统中,应用逻辑使用不同的技术开发,存在于不同的机器上,有的存在于客户机本机,有的使用.Net Remoting开发,存在于局域网内,有的使用因特网上的Web Service,有的时候,我们希望相同的业务逻辑能够支持不同的客户端。 在这种情况下,我们需要一个一致的服务访问编程模型,以统合不同的服务访问模式,简化系统的开发和部署。Websharp Service Locator(以下简称WSL)提供了这样一种能力,开发人员只需要定义服务访问接口,就可以使用一致的方式透明的访问这些服务,而不用理会这些服务之间的不同点。框架会自动生成访问远程服务需要的代理。 下面简单介绍一下.Net环境下的两种主要分布式访问技术: 2.Web Service Web Service便是基于网络的、分布式的模块化组件,它执行特定的任务,遵守具体的技术规范,这些规范使得Web Service能与其他兼容的组件进行互操作。它可以使用标准的互联网协议,像超文本传输协议HTTP和XML,将功能体现在互联网和企业内部网上。Web Service平台是一套标准,它定义了应用程序如何在Web上实现互操作性。可以使用任何语言,在任何平台上写Web Service。 Web Service平台需要一套协议来实现分布式应用程序的创建。任何平台都有它的数据表示方法和类型系统。要实现互操作性,Web Service平台必须提供一套标准的类型系统,用于沟通不同平台、编程语言和组件模型中的不同类型系统。目前这些协议有: 1.XML和XSD 可扩展的标记语言XML是Web Service平台中表示数据的基本格式。除了易于建立和易于分析外,XML主要的优点在于它既与平台无关,又与厂商无关。XML是由万维网协会(W3C)创建,W3C制定的XML SchemaXSD定义了一套标准的数据类型,并给出了一种语言来扩展这套数据类型。 Web Service平台是用XSD来作为数据类型系统的。当你用某种语言如https://www.doczj.com/doc/f113359763.html,或C#来构造一个Web Service时,为了符合Web Service标准,所有你使用的数据类型都必须被转换为XSD类型。如想让它使用在不同平台和不同软件的不同组织间传递,还需要用某种东西将它包装起来。这种东西就是一种协

远程调用的几种方式

远程调用的几种方式 在分布式服务框架中,一个最基础的问题就是远程服务是怎么通讯的,在Java领域中有很多可实现远程通讯的技术,例如:RMI、MINA、ESB、Burlap、Hessian、SOAP、EJB 和JMS 等,这些名词之间到底是些什么关系呢,它们背后到底是基于什么原理实现的呢,了解这些是实现分布式服务框架的基础知识,而如果在性能上有高的要求的话,那深入了解这些技术背后的机制就是必须的了,在这篇blog中我们将来一探究竟,抛砖引玉,欢迎大家提供更多的实现远程通讯的技术和原理的介绍。 基本原理 要实现网络机器间的通讯,首先得来看看计算机系统网络通信的基本原理,在底层层面去看,网络通信需要做的就是将流从一台计算机传输到另外一台计算机,基于传输协议和网络IO 来实现,其中传输协议有tcp、udp等等,tcp、udp都是在基于Socket概念上为某类应用场景而扩展出的传输协议,网络IO,主要有bio、nio、aio三种方式,所有的分布式应用通讯都基于这个原理而实现,只是为了应用的易用,各种语言通常都会提供一些更为贴近应用易用的应用层协议。 应用级协议 远程服务通讯,需要达到的目标是在一台计算机发起请求,另外一台机器在接收到请求后进行相应的处理并将结果返回给请求端,这其中又会有诸如one way request、同步请求、异步请求等等请求方式,按照网络通信原理,需要实现这个需要做的就是将请求转换成流,通过传输协议传输至远端,远端计算机在接收到请求的流后进行处理,处理完毕后将结果转化为流,并通过传输协议返回给调用端。 原理是这样的,但为了应用的方便,业界推出了很多基于此原理之上的应用级的协议,使得大家可以不用去直接操作这么底层的东西,通常应用级的远程通信协议会提供: 1. 为了避免直接做流操作这么麻烦,提供一种更加易用或贴合语言的标准传输格式; 2. 网络通信机制的实现,就是替你完成了将传输格式转化为流,通过某种传输协议传输至远端计算机,远端计算机在接收到流后转化为传输格式,并进行存储或以某种方式通知远端计算机。 所以在学习应用级的远程通信协议时,我们可以带着这几个问题进行学习: 1. 传输的标准格式是什么? 2. 怎么样将请求转化为传输的流? 3. 怎么接收和处理流? 4. 传输协议是? 不过应用级的远程通信协议并不会在传输协议上做什么多大的改进,主要是在流操作方面,让应用层生成流和处理流的这个过程更加的贴合所使用的语言或标准,至于传输协议则通常都是可选的,在java领域中知名的有:RMI、XML-RPC、Binary-RPC、SOAP、CORBA、JMS,来具体的看看这些远程通信的应用级协议:

远程调用技术代码追踪之(RemObjects)

远程调用技术代码追踪之(RemObjects) 最近阅读了SocketConn的源码和WebService 的源码,把追踪的过程写了下来,方便大家学习。毕竟这需要精力,时间和毅力。感谢煮茶待英雄博志区和三层数据库讨论区兄弟们的支持,特别是julian兄弟,不是他,我可能没耐心继续下去。如果有时间,大家可以继续完善。从socket和Websevice的底层实现细节,我们发现BORLAND的工程师们的构思和实现的过程。我觉得这对我们的学习应该是非常重要的。学会思考。学会读源码,学会分析。 希望和我交往的朋友可通过QQ或Email联系我。Wu_yanan2003@https://www.doczj.com/doc/f113359763.html, 另见:《远程调用技术代码追踪(webservice) 》 《远程调用技术代码追踪(Socket) 》 《远程调用技术代码追踪(ASTA) 》 《远程调用技术代码追踪(RemObjects) 》 远程调用技术内幕 在前面我已经分析了socket和webservice的代码追踪。现在总结一下:三层架构的运作模型:1. BizSnap与.NET Remoting 的Server端运作模式 当Client 将Request 送达Server端后,会经过一个Message Dispatcher机制,这个机制大多是几个重要的组件合作完成,主要在于解出Request中对于所要求对象的描述,以及欲呼叫的方法等信息,有了这些信息后Dispatcher就可以找到对应的对象与方法,接着就开始了呼叫动作,由于Request 是SOAP讯息格式,并不能直接用来呼叫对象的方法,因此得先将SOAP讯息转化为Stack(堆栈),完成这个转换动作后就到了这种处理模式中的核心概念了,也就是建立起目的对象并呼叫对应的方法,这个动作非常依赖前面的Message To Stack程序,因为这个程序会将SOAP讯息转化为Stack,有了Stack之后Push Stack and Call Method 动作才能正确的执行,那么如何呼叫目的方法呢?很简单,只要利用该语言所提供的RTTI信息(.NET 中则是MetaData),就可取得该方法的内存地址,接着只须以低阶的ASM 或IL 所提供的CALL 指令即可呼叫该方法,由于已将SOAP讯息转为Stack,因此传入参数就不是问题了。在呼叫结束后,Stack 中已经有了传回的参数,接着只须将Stack转回SOAP 讯息传回给Client端就可以了。 BizSnap、.NET Remoting 的Client端运作模式 不管是BizSnap或是.NET Remoting,当Client端欲呼叫Web Services时都会经过一个Proxy Object,于BizSnap中这个对象就是THTTPRIO,.NET Remoting中这个对象就是RealProxy,由于这个对象属于静态的,因此在使用之前必需将其转型回目的对象的型别,当Client端下达转型动作后整个魔法就开始运行了,首先Proxy Object会利用RTTI或是MetaData信息取得欲转型的类别信息,并依照这些信息建立起一个兼容于该类别的对象(Transparent Proxy Object),接着将这个对象中的所有方法地址替换为Stub Method,Stub Method 做的事情很单纯,只是将Stack转为SOAP Message后送出,当Server端响应后再将SOAP Message转换为Stack 后返回,这样整个Client端呼叫动作就完成了,下次再呼叫时只需由Cache中取出这个已建立好的Transparent Proxy Object,就可以直接进行呼叫,这可以避免因反复以RTTI或是MetaData建立Transparent Proxy Object而失去效率。 BizSnap、.NET Remoting 的处理模式属于较低阶的方法,这种方法的坏处大于好处,

用Java实现基于SOAP的XML文档网络传输及远程过程调用(RPC)

用Java实现基于SOAP的XML文档网络传输及远程过程调用(RPC) SOAP(Simple Object Access Protocol,简单对象访问协议) 是一种基于XML 的,用于计算机之间交换信息的协议。SOAP能应用于各种消息接发系统,并能 通过各种传输协议进行消息传递,但最初的侧重点是通过HTTP传输的远程过程调用。SOAP是Web service的一个重要组成部份,如果把Web service比喻成Internet,那么SOAP就可以比喻成TCP/IP。SOAP是一种协议而非具体产品, 微软也有自己的SOAP实现产品,而Java下比较流行的SOAP实现产品就是Apache SOAP,不过它的下一个版本已经改名成AXIS了。 SOAP是用XML文件来做为数据转输的载体的,走HTTP的线路。一般企业的防火墙都开放HTTP的80端口,所以SOAP不会被防火墙阻断,这算是SOAP的一个优点。信息转输的双方都要求支持SOAP服务,因为XML文件发过去,则对方需要有SOAP服务来接收,然后对方会有反馈也是XML文件,这时你也需要安装SOAP服务来接收。 1. 环境配置 为了运行程序,我们首先必须配置好环境: 共要下载四个软件包,它们都是开源免费的。其中,前两个是Apache的,后两个是SUN网站的,如下所示: ?SOAP:https://www.doczj.com/doc/f113359763.html,/ws/soap/version-2.3.1/ ?Xerces:https://www.doczj.com/doc/f113359763.html,/dist/xerces-j/ ?JavaMail: https://www.doczj.com/doc/f113359763.html,/products/javamail/downloads/index.html ?JAF:https://www.doczj.com/doc/f113359763.html,/products/javabeans/glasgow/jaf.html 下载后将它们分别解压缩。分别在这四个包的解压目录中找到:xerces.jar、soap.jar、mail.jar、activation.jar(JAF的),则是四个jar文件是我们所需要的。 本机安装环境:WindowsXP(SP2) + JDK1.4.2_06 + Tomcat5.0.28 + SOAP2.3.1 配置步骤: 1、安装JDK和Tomcat。过程比较简单,这里不再详述。

Android远程Service调用(RPC)实现步骤详解

开始介绍之前,先看一下本例的界面:

Android远程Service调用 简介: 远程Service调用,是Android系统为了提供进程间通信而提供的轻量级实现方式,这种方式采用一种称为远程进程调用技术来实现,英文名全称是Remote Procedure Call,即RPC。

RPC简介:远程进程调用是指在一个进程里,调用另外一个进程里的服务。Android通过接口定义语言来生成两个进程间的访问代码。接口定义语言(Android Interface Definition Language,即AIDL)是Android系统的一种接口描述语言,Android编译器可以将AIDL文件编译成一段JA V A代码,生成相对的接口。 下面来详细介绍下如何通过RPC机制来达到远程进程调用的目的和步骤。 第一,我们要先弄清楚这是怎么样的一个流程。用通俗点语言来说,打个例子:比如公司A提供A服务,并且这种服务是对外开放的,也就是其他公司或者个人都可以通过某种方式来使用这种服务,公司B想要使用A公司的A服务,就以通过公司A编制的一种形式来使用它。用图来表示就是: 公司B通过公司A的某种形式来使用公司A提供的服务A 现在,我们可以说,进程B可以通过进程A提供的某种形式来使用进程A的服务A。这个过程就是RPC。 了解基本概念之后,我们可以开始进行RPC的实现步骤。下面我们分点来说明实现RPC 的步骤。 第一、创建AIDL文件。这个文件和普通的JA V A文件差不多,只不过后缀名是.aidl。 这个文件相当于一个接口,里面要声明一些你想对外提供服务的方法,也就是 你要对外暴露的方法。注意,这个文件里,除了JA V A基本类型和String,List,Map 和Charquene类型不需要引入相应的包外,其他的都要引入包。例如我们创建 一个IPerson.aidl文件,里面只声明了一个方法display(): package com.test.service; interface IPersonaidl { String display();//该接口里面所有的方法都应该是你想对外暴露的} 第二、创建完AIDL文件后,刷新项目,会发现在gen目录对应的目录下会生成一个IPerson.java接口文件,打开该文件,会发现你在aidl文件里面定义的 display()方法,不过没有实现。 第三、实现系统生动生成的IPerson接口。注意,这里创建的类不能写实现系统生成的IPerson接口,而是继承该接口里面的Stub类。 package com.test.service; import android.os.RemoteException;

远程过程调用失败

服务器:Windows Server2003 sp2服务器 客户端:XP SP3 内容:C#Winform客户端调用服务器的Excel模板生成报表的时候,生成失败,抛出的异常如下: TargetInvocationException{ Source : mscorlib Message : Exception has been thrown by the target of an invocation. Data : ListDictionaryInternal{} HelpLink : null TargetSite: InvokeDispMethod at System.RuntimeType.InvokeDispMethod(String name, BindingFlagsinvokeAttr, Object target, Object[] args, Boolean[] byrefModifiers, Int32 culture, String[] namedParameters) at System.RuntimeType.InvokeMember(String name, BindingFlagsbindingFlags, Binder binder, Object target, Object[] providedArgs, ParameterModifier[] modifiers, CultureInfo culture, String[] namedParams) at System.Type.InvokeMember(String name, BindingFlagsinvokeAttr, Binder binder, Object target, Object[] args, CultureInfo culture) at https://www.doczj.com/doc/f113359763.html,Base.InvokeMethod(String method, Object[] args) at CIS.Interop.Microsoft.Excel.ExcelApplication.Run(String macroName, Object[] args) at CIS.IS.Data.Manager.ExcelReportMaker.DoWork() ************************ COMException{ Message :远程方法调用失败(Exception from HRESULT: 0x800706BE) Data : ListDictionaryInternal{} ErrorCode : -2147023170 HelpLink : null } }

实习一远程过程调用中间件及数据访问中间件

实验一远程过程调用中间件及数据访问中间件 一、实习目的 通过实例掌握RMI,RPC,JDBC等中间件的使用。 二、实习要求 1)RPC实现远程计算服务。服务器端提供计算服务;客户端调用计算服务。 2)RMI+JDBC远端数据库的访问。实现简单的成绩查询系统(创建表,录入成绩,查询成绩等)。在服务器端,通过JDBC访问数据库。客户端调用服务端提供的各种数据库操作。 3)服务器和客户端不在同的机器上进行测试。 4)打包成易于执行的文件,如exe, bat文件。 三、实习过程 1 利用RPC实现远程计算服务。 (1)使用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)编写配置文件, 定义绑定句柄 (3) 编译文件,产生文件, , (4) 编写服务端程序, 编译连接工程,生成 (5) 编写客户端程序 (6) 测试: 测试结果截图如下: 加法运算: |

减法运算: 乘法运算: 除法运算:

2 RMI+JDBC远端数据库的访问 (1) 使用mysql-connector-java-5[1].驱动包,编写DBmanager类,访问mysql数据库, 实现创建表,录入成绩,查询成绩等操作,主要代码如下: oString()+", name="+(2).toString()+"\n"; } — } catch (SQLException e) { 运行服务器端: 2. 运行客户端 四、实习总结 本次实习的主要内容为通过RPC 实现远程计算服务,通过RMI 、JBDC实现远程访问数据库; 通过老师的案例按照实习指导书完成了本次实习,对通过RPC、RMI 实现远程访问有了进一步的理解,但对他们的底层具体实现还不是很理解。

Java远程方法调用

font size="3">概述 Java Remote Method Invocation ( RMI -- Java远程方法调用)允许您使用Java编写分布式对象。本文将介绍RMI的优点以及如何将其连接到现有的和原有的系统中,以及与用Java 编写的组件的连接。 RMI为采用Java对象的分布式计算提供了简单而直接的途径。这些对象可以是新的Java对象,也可以是围绕现有API的简单的Java 包装程序。Java体现了“编写一次就能在任何地方运行的模式。而RMI 可将Java模式进行扩展,使之可在任何地方运行”。 因为RMI是以Java为核心的,所以,它将Java的安全性和可移植性等强大功能带给了分布式计算。您可将代理和梢?务逻辑等属性移动到网络中最合适的地方。如果您要扩展Java在系统中的使用,RMI将使您充分利用其强大功能。 RMI可利用标准Java本机方法接口JNI与现有的和原有的系统相连接。RMI还可利用标准JDBC包与现有的关系数据库连接。RMI/JNI 和RMI/JDBC相结合,可帮助您利用RMI与目前使用非Java语言的现有服务器进行通信,而且在您需要时可扩展Java在这些服务器上的使用。RMI可帮助您在扩展使用时充分利用Java的强大功能。

优点 从最基本的角度看,RMI是Java的远程过程调用(RPC)机制。与传统的RPC系统相比,RMI具有若干优点,因为它是Java面向对象方法的一部分。传统的RPC系统采用中性语言,所以是最普通的系统--它们不能提供所有可能的目标平台所具有的功能。 RMI以Java为核心,可与采用本机方法与现有系统相连接。这就是说,RMI可采用自然、直接和功能全面的方式为您提供分布式计算技术,而这种技术可帮助您以不断递增和无缝的方式为整个系统添加Java功能。 RMI的主要优点如下: 面向对象:RMI可将完整的对象作为参数和返回值进行传递,而不仅仅是预定义的数据类型。也就是说,您可以将类似Java哈希表这样的复杂类型作为一个参数进行传递。而在目前的RPC系统中,您只能依靠客户机将此类对象分解成基本数据类型,然后传递这些数据类型,最后在服务器端重新创建哈希表。RMI则不需额外的客户程序代码(将对象分解成基本数据类型),直接跨网传递对象。 可移动属性:RMI可将属性(类实现程序)从客户机移动到服务器,或者从服务器移到客户机。例如,您可以定义一个检查雇员开支报告

RPC远程过程调用

南华大学 计算机科学与技术学院 实验报告 (2010~2011学年度第2学期) 课程名称分布式系统 题目RPC远程过程调用 一、实验目的 通过远程过程调用(RPC)的OSF以及如何使用它们来开发应用程序,了解RPC的基本原理,并认识如何开发使用RPC进行异种机网络分布式处理的客户机应用程序和服务器应用程序。实现一个简单的rpc远程过程调用程序,学会一些基本的rpc函数的使用方法 二、实验环境

操作系统:Windows 7 开发环境: Microsoft Visual C++ 三、实验步骤 1. 定义接口:创建一个.idl文件, 为应用程序的远地函数定义一个接口.// File: RpcFact.idl // interface header uuid (C16F6562-520D-11D0-B338-444553540000), // universally unique identifier,唯一识别这个接口, 它可以被服务器用来注册接口, 以使客户机可以定位这个特殊接口. uuid由5位数字组成,你可以用Microsoft的uuidgen.exe来得到它. version (1.0), // 指定版本号, 那么在同一个网络上就可以同时拥有一个R PC接口的不同版本 endpoint(“ncalrpc: [myFactorial]”) // 接口的端点, 它给出了将会使用的网络协议的类型和用来接收接口的请求的地址和端口, ncalrpc 表示Local pr ocedure call // interface text, 指定了组成这个接口的函数, 函数类型不支持int 和void* interface rpcfactor ial { long RpcFactor ial([in] long nVal); // 出现[ ]的部分表示属性 } // end File RpcFact.idl 2. 应用程序属性配置文件 // RpcFact.acf [ auto_handle // 相关属性] interface rpcfactor ial{ }// end File RpcFact.acf 3. 用MIDL编译器编译RpcFact.idl文件 先将RpcFact.idl插入你的Project中, 在Projects—Settings中选取左边框内的RpcFact.idl文件, 选择右边的Custom Build页面, 位IDL文件指定一个用户定制的编译器. 可以键入如下命令:midl.exe /c_text /ms_text /app_config $ (InputPath) 4. 开发RPC服务器 定义好了一个接口之后, 就需要创建一个响应接口请求的进程, 执行请求的操作并返回所有结果给client. 这些任务就由RPC服务器来完成.

RMI远程方法调用

Java RMI 技术原理(远程方法调用)Java RMI指的是远程方法调用。它是一种机制,能够让在某个Java虚拟机上的对象调用另一个Java虚拟机中的对象上的方法。可以用此方法调用的任何对象必须实现该远程接口。 Java RMI不是什么新技术(JDK1.1就有了),但却是是非常重要的底层技术。大名鼎鼎的EJB都是建立在RMI基础之上的,现在还有一些开源的远程调用组件,其底层技术也是RMI。 在这个大力吹捧Web Service、SOA的年代,不是每个应用都应该选用笨拙的Web Service组件来实现,有人通过对比测试后,认为RMI是最简单的,在一些小的应用中是最合适的。在Java中,只要一个类extends了 java.rmi.Remote接口,即可成为存在于服务器端的远程对象,供客户端访问并提供一定的服务。 注意:extends了Remote接口的类或者其他接口中的方法若是声明抛出了RemoteException异常,则表明该方法可被客户端远程访问调用。 同时,远程对象必须实现java.rmi.server.UniCastRemoteObject类,这样才能保证客户端访问获得远程对象时,该远程对象将会把自身的一个拷贝以Socket的形式传输给客户端,此时客户端所获得的这个拷贝称为“存根stub”,而服务器端本身已存在的远程对象则称之为“骨架skeleton”。其实此时的Stub 是客户端的一个代理,用于与服务器端的通信,而Skeleton也可认为是服务器端的一个代理,用于接收客户端的请求之后调用远程方法来响应客户端的请求。 从客户对象经存根(Stub)、远程引用层(Remote Reference Layer)和传输层(Transport Layer)向下,传递给主机,然后再次经传输层,向上穿过远程

相关主题
文本预览
相关文档 最新文档