java的远程调试是基于什么协议

Python017

java的远程调试是基于什么协议,第1张

RMI是java语言本身提供的远程通讯协议,稳定高效,是EJB的基础。但它只能用于JAVA程序之间的通讯。

Hessian和Burlap是caucho公司提供的开源协议,基于HTTP传输,服务端不用开防火墙端口。协议的规范公开,可以用于任意语言。

Httpinvoker是SpringFramework提供的远程通讯协议,只能用于JAVA程序间的通讯,且服务端和客户端必须使用SpringFramework。

Web service是连接异构系统或异构语言的首选协议,它使用SOAP形式通讯,可以用于任何语言,目前的许多开发工具对其的支持也很好。

RMI >Httpinvoker >= Hessian >>Burlap >>web service

RMI不愧是JAVA的首选远程调用协议,非常高效稳定,特别是在大数据量的情况下,与其他通讯协议的差距尤为明显。

HttpInvoker使用java的序列化技术传输对象,与RMI在本质上是一致的。从效率上看,两者也相差无几,HttpInvoker与RMI的传输时间基本持平。

Hessian在传输少量对象时,比RMI还要快速高效,但传输数据结构复杂的对象或大量数据对象时,较RMI要慢20%左右。

Burlap仅在传输1条数据时速度尚可,通常情况下,它的毫时是RMI的3倍。

Web Service的效率低下是众所周知的,平均来看,Web Service的通讯毫时是RMI的10倍。

二、结果分析

1、直接调用

直接调用的所有毫时都接近0,这说明程序处理几乎没有花费时间,记录的全部时间都是远程调用耗费的。

2、RMI调用

与设想的一样,RMI理所当然是最快的,在几乎所有的情况下,它的毫时都是最少的。特别是在数据结构复杂,数据量大的情况下,与其他协议的差距尤为明显。

为了充分发挥RMI的性能,另外做了测试类,不使用Spring,用原始的RMI形式 (继承UnicastRemoteObject对象)提供服务并远程调用,与Spring对POJO包装成的RMI进行效率比较。结果显示:两者基本持 平,Spring提供的服务还稍快些。

初步认为,这是因为Spring的代理和缓存机制比较强大,节省了对象重新获取的时间。

3、Hessian调用

caucho公司的resin服务器号称是最快的服务器,在java领域有一定的知名 度。Hessian做为resin的组成部分,其设计也非常精简高效,实际运行情况也证明了这一点。平均来看,Hessian较RMI要慢20%左右,但 这只是在数据量特别大,数据结构很复杂的情况下才能体现出来,中等或少量数据时,Hessian并不比RMI慢。

Hessian的好处是精简高效,可以跨语言使用,而且协议规范公开,我们可以针对任意语言开发对其协议的实现。目前已有实现的语言有:java, c++, .net, python, ruby。还没有delphi的实现。

另外,Hessian与WEB服务器结合非常好,借助WEB服务器的成熟功能,在处理大 量用户并发访问时会有很大优势,在资源分配,线程排队,异常处理等方面都可以由成熟的WEB服务器保证。而RMI本身并不提供多线程的服务器。而 且,RMI需要开防火墙端口,Hessian不用。

4、Burlap调用

Burlap与Hessian都是caucho公司的开源产品,只不过Hessian采用二进制的方式,而Burlap采用xml的格式。

测试结果显示,Burlap在数据结构不复杂,数据量中等的情况下,效率还是可以接受的,但如果数据量大,效率会急剧下降。平均计算,Burlap的调用毫时是RMI的3倍。

我认为,其效率低有两方面的原因,一个是XML数据描述内容太多,同样的数据结构,其传输量要大很多;另一方面,众所周知,对xml的解析是比较费资源的,特别对于大数据量情况下更是如此。

5、HttpInvoker调用

HttpInvoker是SpringFramework提供的JAVA远程调用方法,使用java的序列化机制处理对象的传输。从测试结果看,其效率还是可以的,与RMI基本持平。

不过,它只能用于JAVA语言之间的通讯,而且,要求客户端和服务端都使用SPRING框架。

另外,HttpInvoker 并没有经过实践的检验,目前还没有找到应用该协议的项目。

6、web service调用

本次测试选用了apache的AXIS组件作为WEB SERVICE的实现,AXIS在WEB SERVICE领域相对成熟老牌。

为了仅测试数据传输和编码、解码的时间,客户端和服务端都使用了缓存,对象只需实例化一次。但是,测试结果显示,web service的效率还是要比其他通讯协议慢10倍。

如果考虑到多个引用指向同一对象的传输情况,web service要落后更多。因为RMI,Hessian等协议都可以传递引用,而web service有多少个引用,就要复制多少份对象实体。

Web service传输的冗余信息过多是其速度慢的原因之一,监控发现,同样的访问请求,描述相同的数据,web service返回的数据量是hessian协议的6.5倍。另外,WEB SERVICE的处理也很毫时,目前的xml解析器效率普遍不高,处理xml <->bean很毫资源。从测试结果看,异地调用比本地调用要快,也从侧面说明了其毫时主要用在编码和解码xml文件上。这比冗余信息更为严重,冗余信息占用的 只是网络带宽,而每次调用的资源耗费直接影响到服务器的负载能力。(MS的工程师曾说过,用WEB SERVICE不能负载100个以上的并发用户。)

测试过程中还发现,web service编码不甚方便,对非基本类型需要逐个注册序列化和反序列化类,很麻烦,生成stub更累,不如spring + RMI/hessian处理那么流畅简洁。而且,web service不支持集合类型,只能用数组,不方便。

ITjob学。到的

Jbuilder是一个可视化JAVA开发工具。它是在Java2平台上开发商业应用程式、资料库、发布程式的优秀工具。它支持J2EE,所以程式设计师可以快速的转换企业版Java应用程式。

基本介绍中文名 :JBuilder 类型 :JAVA开发工具 平台 :JAVA2 领域 :计算机 简介,特点,配置,快捷键,发展历程,使用问题, 简介 JBuilder是Borland公司开发的针对java的开发工具,使用JBuilder将可以快速,有效的开发各类java套用,它使用的JDK与sun公司标准的JDK不同,它经过了较多的修改,以便开发人员能够像开发Delphi套用那样开发java套用。JBuilder的核心有一部分采用了VCL技术,使得程式的条理非常清晰,就算是初学者,也能完整的看完整个代码。JBuilder另一个特点是简化了团队合作,它采用的网际网路工作室技术使不同地区,甚至不同国家的人联合开发一个项目成为了可能。 Borland公司的著名产品有: JBuilder、C++ Builder、Delphi、Turbo C等 特点 1.Jbuilder支持最新的Java技术,包括Applets、JSP/Servlets、JavaBean以及EJB (Enterprise JavaBeans)的套用。 2.用户可以自动地生成基于后端资料库表的EJB Java类,Jbuilder同时还简化了EJ B的自动部署功能.此外它还支持CORBA,相应的向导程式有助于用户全面地管理IDL(分布应用程式所必需的接口定义语言Interface Definition Language)和控制远程对象。 3.Jbuilder支持各种套用伺服器。Jbuilder与Inprise Application Server紧密集成,同时支持WebLogic Server,支持EJB 1.1和EJB 2.0,可以快速开发J2EE的电子商务套用。 4.Jbuilder能用Servlet和JSP开发和调试动态Web 套用。 5.利用Jbuilder可创建(没有专有代码和标记)纯Java2套用。由于Jbuilder是用纯J ava语言编写的,其代码不含任何专属代码和标记,它支持最新的Java标准。 6.Jbuilder拥有专业化的图形调试界面,支持远程调试和多执行绪调试,调试器支持各种JDK版本,包括J2ME/J2SE/J2EE。JBuilder环境开发程式方便,它是纯的Java 开发环境,适合企业的J2EE开发;缺点是往往一开始人们难于把握整个程式各部分之间的关系,对机器的硬体要求较高,比较吃记忆体,这时运行速度显得较慢。 配置 1、下载 jakarta-Struts-1.1.zip 包 jakarta-struts-1.1-src.zip包 2、解压 将jakarta-struts-1.1.zip包解压到C:\JBuilder9\thirdparty目录下 jakarta-struts-1.1-src.zip包解压到C:\JBuilder9 \extras目录下 JBuilder 3、启动 jbuilder9 4、配置Library (1)选择选单 tools\Configure Libraries (2)新建一个Library (3)在New Library Wizard对话框中, Name 输入:struts1.1, location可选:JBuilder, Library paths:add加入C:\JBuilder9\thirdparty\jakarta-struts-1.1\lib\struts.jar (4)确定创建Library (5)选中struts1.1,修改Library Settings Class:C:\JBuilder9\thirdparty\jakarta-struts-1.1\lib\struts.jar Source:C:\JBuilder9\extras\jakarta-struts-1.1-src\src\share Documentation:C:\JBuilder9\thirdparty\jakarta-struts-1.1\Webapps\struts-documentation.war\api Required Library:空 Framework: 在Framework下拉框中,选择struts,会自动出现6个taglib。 struts-bean struts- struts-logic struts-template struts-tiles struts-nested (6)点击OK,创建Library成功。 5、创建 struts工程。 (1)新建或者打开一个JBuilder工程 (2)新建一个WEB套用。按CTRL-N,选择WEB标签,选择Web Application,确定。 (3)在Web Application Wizard中,将出现Struts1.1(Struts1.1),选择打上勾, 输入Name确定,即创建好Struts1.1的工程。 6、 struts1.1工程创建完毕。 不用再做任何配置的修改,其后创建的Actionform和Action都是struts1.1的了。 快捷键 F 键的用法 F1: 帮助快捷 F3 查找下一个 F4: 运行多行 F5: 加入断点 F6: 查看改变调试时的变数、表达式 F7: 跟入当遇到方法时会运行方法内的代码 F8: 单步逐步运行代码 F9: 运行 F12: 代码面板和设计面板切换 工作区: (显隐) 项目面板:ctrl + Alt + p (Project) 设计面板: ctrl + Alt + c (content) 结构面板: ctrl + Alt + s (Structure) 信息面板: ctrl + Alt + M (Message) 状态面板: ctrl + Alt + Z 代码全萤幕 ctrl + alt + p/c/m/z/s 视图开关 ---在view--panels里 ctrl + alt + c ---代码视图 CodeInsight MemberInsight : ctrl + H 显示本类成员, 根据当前的代码提示可用的类成员或方法(说明) ParameterInsight : ctrl+shift+space 或 ctrl + shift + H 提示当前的方法需要使用的参数 ClassInsight : ctrl + alt + space 或 ctrl + alt + H ErrorInsight: alt+Enter Javadoc QuickHelp : ctrl + Q ---看一个选择的对象的文档帮助 查找 ctrl + F: 查找 F3: 查找下一个 ctrl + p: 路径查找 ----查找所有的java档案,要找所有档案用ctrl+shift+entry shift + F3: 反向查找下一个 ctrl + B 查找某一窗体,即某一个类档案 ctrl + F6 切换窗体 ctrl + e 增量式查找 ,根据输入的单词增量查找 ctrl + shift + h 参数查找 有点像ctrl+shift+space的功能 Ctry+'-' 搜寻包或类 ctrl+shift+G: 指定到类里的某一个方法。 ctrl+shift+entry: fine References : 查找所有包含选择的内容的地方,包括系统的档案 ctrl+F5 切换工程 编译 ctrl + F9 编译工程 ctrl + shift + F9 编译当前类 调试运行 F5: 加入断点 F6: 查看改变调试时的变数、表达式 F7: 跟入当遇到方法时会运行方法内的代码 F8: 单步逐步运行代码 F9: 运行 shift + F9 调试模式运行 ctrl + F4 运行到当前位置 ctrl + F2 结束程式 帮助 F1 Help : 游标处在某个关键字当中时,按f1可出来JDK的帮助 ctrl+ Q :看一个选择的对象的文档帮助 模板快捷代码 ctrl + J 显示模板 激活代码模组 如:for 和 while 结构--- 在想要输入代码的位置输入代码摸板名,然后按 ctrl + J(开发人员可以用主选单上的 Tools/Editor/Templates命令来查看代码摸板的名字) ctrl + shift + c 自动完成错误捕捉代码 选择后按下快捷键,自动加try..catch 代码跟踪 ctrl+enter: 在我们撰写程式的时候,我们经常会需要查找某个对象的定义,或者需要学习某个对象是如何设计的。我 们可以通过下面的方法查找到对象定义,不管这个对象定义是你建立的还是系统定义的: 选择一个对象,右击选择find Definition,也就是原始码跟踪,CTRL+ENTER或CTRL+滑鼠点击 寻找对象的引用(ctrl+shift+Enter/mouseClick):当前关键字追踪 Find References项在选择对象后点击右键,出现“Find References”,选择后将在信息视窗中显示出来 所有引用该对象的类,和此对象原始码的类。可以通过按CTRL+SHIFT+ENTER来实现。 书签设定 ctrl + + 数字(0-9) 设定/去除标签 ctrl + 数字(0-9) 返回标签位置 ctrl + alt + ->/ <- 返回最近访问点 关闭窗体 ctrl + F4 关闭当前类 ctrl + shift + F4 (显示选择)要关闭的类 发展历程 JBuilder从2006版开始使用Eclipse作为其核心开发,最新版本为JBuilder2008R2,支持最新的EJB3.0规范,以及JPA技术。Borland公司成立于 1983 年,总部设在美国加州的Scotts Valley,是领先全球的软体交付最最佳化(SDO)平台独立解决方案供应商,业务遍及全球,曾经是世界第三大软体公司。公司提供的软体和服务有助于人员、流程、技术的配合,以使软体的商业价值最大化。 Borland 使用问题 使用assert A:project\project properties\build\java, other compiler options, check "enable assert keyWord" 预设情况下jvm是不会理会assert的,所以若要jvm执行assert语句,必须在project properties\runtime configuration properties\VM parameters中加入-ea 在windows平台下,生成“.exe"档案,用JBuild8 A:在Wizards选单有一个Native Executable Builder,进 入,按照向导提示你可以建立一个native executable档案,不仅仅是.exe,还可以是各种平台下的。 jb8在中文环境下 游标 错位 JBuilder A:解决方法一::Editor Option----Color---Screen Element----Reserved word----Attributes---Bold,把“Bold”uncheck就可以了。字型呢最好改大一点,中文的支持是必须选择中文的宋体。网友提醒,还要uncheck Html tag的blod。 JBUILDER无法使用 TAB键 先把要缩入的源码选取, 再按Tab 或 Shift-Tab.缩入预设为 F2, 不是 Tab 如何安装JDBC driver A:首先,取得资料库的JDBC的驱动,如Oracle的叫 Class12.zip,解开了一般都会包含一个jar的包,把该包或者多个档案加入到JBuilder的Library中。在工程属***中指定使用该档案。以上完成的其实就是把该档案增加到工程的ClassPath中去 ,假如大家还不明白可以参看JBuilder的帮助档案 ,假如是用的是Borland的资料库组件可以参看JBuilder光碟中的文档。 可以在点选 JBuilder 选单 Tools-->Enterprise Setup-->Database drivers. 建立一个新的 Library 里面包含此 JDBC Driver 的 xxx.jar ,将您的 JDBC Driver xxx.jar 置于某个不含 Space 的路径 (例如 C:\JBuilder7\Lib\xxx.jar) 后按对话框中左下角 New 按钮,出现 New Library Wizard 对话框为该  JDBC Driver Library 命名,接着将C:\JBuilder7\Lib\xxx.jar加到Library Path 内.完成后按下 OK,结束 New Library Wizard 对话框.若该 JDBC Driver 有包含原始程式代码及 JavaDoc , 在Configure Libraries 对话框右方一并加入. 完成后重新激活 JBuilder.激活 Database Pilot 测试,这次红字就会变成正常的黑字了. 提醒: 一个2300万美元的交易  2008年5月7日,一条讯息出现在Borland公司官方网站的新闻中,Borland正式宣布将CodeGear子公司出售给Embarcadero(易博龙)技术公司。 CodeGear公司成立于2006年11月14日,是Borland的全资子公司,主要负责Borland的集成开发环境业务。 虽然是一个成立仅两年的年轻公司,但是它旗下的产品对于大多数程式开发人员却具有传奇一样的崇高地位,这些产品包括JBuilder、Java开发工具、Delphi与C++Builder,还有刚刚研发出的PHP与Ruby的IDE开发工具。

json-rpc是基于json的跨语言远程调用协议。比xml-rpc、webservice等基于文本的协议数据传输格小;相对hessian、java-rpc等二进制协议便于调试、实现、扩展,是很优秀的一种远程调用协议。眼下主流语言都已有json-rpc的实现框架,java语言中较好的json-rpc实现框架有jsonrpc4j、jpoxy、json-rpc。三者之中jsonrpc4j既可独立使用。又可与spring无缝集合,比较适合于基于spring的项目开发。

json-rpc协议很easy,发起远程调用时向服务端数据传输格式例如以下:

{ "method": "sayHello", "params": ["Hello JSON-RPC"], "id": 1}

参数说明:

method: 调用的方法名

params: 方法传入的参数。若无参数则传入 []

id : 调用标识符。用于标示一次远程调用过程

server其收到调用请求,处理方法调用,将方法效用结果效应给调用方;返回数据格式:

参数说明:

result: 方法返回值。若无返回值。则返回null。

若调用错误,返回null。

error :调用时错误,无错误返回null。

id : 调用标识符,与调用方传入的标识符一致。

以上就是json-rpc协议规范,很easy,小巧。便于各种语言实现。

2.1、server端Java调用演示样例

jsonrpc4jserver端java演示样例:

2.2、Javaclient调用演示样例

jsonrpc4j的Javaclient调用演示样例:

2.3、JavaScriptclient调用演示样例

基于jsonrpcjs的JavaScriptclient调用演示样例:

2.4、直接GET请求进行调用

无需不论什么client。仅仅需手工拼接参数进行远程调用,请求URL例如以下:

参数说明:

method : 方法名

params :调用参数。json的数组格式[], 将参数需先进行url编码,再进行base64编码

id : 调用标识符,随意值。

json-rpc是一种很轻量级的跨语言远程调用协议。实现及使用简单。

仅需几十行代码,就可以实现一个远程调用的client。方便语言扩展client的实现。

server端有php、java、python、ruby、.net等语言实现,是很不错的及轻量级的远程调用协议。