- cloudcone
-
* 回复内容中包含的链接未经审核,可能存在风险,暂不予完整展示!为了以编程方式启动RMI注册,你可以使用LocateRegistry.createRegistry(int port)方法。该方法返回类型注册的一个对象。当我们想在应用程序一端终止这个注册时,我们保存这个参考。就在我们启动我们的在JMXAgent.start()中的JMXConnectorServer之前,我们首先启动RMI注册,使用下列代码行:
registry = LocateRegistry.createRegistry(Constants.RMI_REGISTRY_PORT);
在应用程序一端,在JMXAgent.stop()中停止JMXConnectorServer之后,调用下列方法来终止该注册:
UnicastRemoteObject.unexportObject(registry,true);
http://www.w***.com/htmldata/2006-03-27/1143443474.html
- coco
-
public static void main(String[] args) {
loginFrame lf=new loginFrame();
lf.setVisible(true);
lf.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
}
}
class mainFrame extends JFrame implements ActionListener{
MenuBar myMenuBar=new M
什么是 rmi
RMI采用JRMP(Java Remote Method Protocol)通讯协议,是构建在TCP/IP协议上的一种远程调用方法。更详细请点击:http://www.hur.cn/web/program/java/JAVA06/200511/2377.html2023-07-21 17:45:172
让RMI程序能正确运行有哪些步骤?
为了让RMI程序能正确运行必须要包含以下几个步骤:1、编译所有的源文件。2、使用rmic生成stub。3、启动rmiregistry。4、启动RMI服务器。5、运行客户端程序。2023-07-21 17:45:231
RMI中的远程接口扮演了什么样的角色
RMI远程方法调用是一种计算机之间利用远程对象互相调用实现双方通讯的一种通讯机制。使用这种机制,某一台计算机上的对象可以调用另外一台计算机上的对象来获取远程数据。RMI是Enterprise JavaBeans的支柱,是建立分布式Java应用程序的方便途径。简单实例:1、首先为服务建立一个Model层,注意因为此对象需要现实进行远程传输,所以必须继承Serializable2、创建远程接口PersonService,注意远程接口需要继承Remote3、建立PersonServiceImpl实现远程接口,注意此为远程对象实现类,需要继承UnicastRemoteObject4、建立服务器端,在服务器端注册RMI通讯端口与通讯路径,然后通讯javac命令编译文件,通过java -server 命令注册服务。5、以下面代码为例,如果将项目建立于D:\RMIRemotingService文件夹上时,则先输入D:\RMIRemotingServicesrc>javac rmi/remotingservice/Program.java获取Program.class,然后输入D:\RMIRemotingServicesrc>javarmi/remotingservice/Program启动服务。6、最后建立客户端进行测试,注意客户调用的RMI路径必须服务器配置一致。2023-07-21 17:45:311
WEY P8防侧翻系统(RMI)是什么
车辆转弯时,RMI通过监测车辆的运动状态,判断是否有侧翻的风险。若有,RMI将对某个或多个车轮制动减速,以避免车辆发生侧翻事故。特别要注意的是:RMI只是辅助功能,并不能完全避免侧翻的风险,任何时候驾驶员都应对车辆的安全性负责。2023-07-21 17:45:401
RMI是干什么用的在JAVA里面
RMI是J2EE的网络机制,允许你编写分布式对象,使得对象的通信范围能够在内存中,跨Java虚拟机,跨物理设备 RMI-IIOP遵循了接口和实现的原则。你写的所有网络代码都是应用于接口,而不是实现。实际上,你必须使用RMI-IIOP中的范例,没有其它的选择。直接在你的对象实现上执行远程调用是不可能的,你只能在对象类的接口上单独进行这一操作。 所以我们在使用RMI-IIOP时,你必须建立一个客户接口,叫做remote interface。这个远程接口应该扩展java.rmi.Remote接口。 RMI应用程序通常包括两个独立的程序:服务器程序和客户机程序。典型的服务器应用程序将创建多个远程对象,使这些远程对象能够被引用,然后等待客户机调用这些远程对象的方法。而典型的客户机程序则从服务器中得到一个或多个远程对象的引用,然后调用远程对象的方法。RMI为服务器和客户机进行通信和信息传递提供了一种机制。 在与远程对象的通信过程中,RMI使用标准机制:stub和skeleton。远程对象的stub担当远程对象的客户本地代表或代理人角色。调用程序将调用本地stub的方法,而本地stub将负责执行对远程对象的方法调用。在RMI中,远程对象的stub与该远程对象所实现的远程接口集相同。调用stub的方法时将执行下列操作:(1) 初始化与包含远程对象的远程虚拟机的连接;(2) 对远程虚拟机的参数进行编组(写入并传输);(3) 等待方法调用结果;(4) 解编(读取)返回值或返回的异常;(5) 将值返回给调用程序。为了向调用程序展示比较简单的调用机制,stub将参数的序列化和网络级通信等细节隐藏了起来。在远程虚拟机中,每个远程对象都可以有相应的skeleton(在JDK1.2环境中无需使用skeleton)。Skeleton负责将调用分配给实际的远程对象实现。它在接收方法调用时执行下列操作:(1) 解编(读取)远程方法的参数;(2) 调用实际远程对象实现上的方法;(3) 将结果(返回值或异常)编组(写入并传输)给调用程序。stub和skeleton由rmic编译器生成。2023-07-21 17:45:501
java RMI是什么意思啊?
这种问题就自己百度了吧!2023-07-21 17:46:093
什么是 RMI / IIOP 协议?
RMI定义了一组远程接口,可以用于生成远程对象。客户机可以象调用本地对象的方法一样用相同的语法调用远程对象。RMI API提供的类和方法可以处理所有访问远程方法的基础通信和参数引用要求的串行化。 远程方法调用类似于Sun公司1985年提出的远程过程调用(RPC)特征。RPC也要求串行化参数和返回数值数据,但由于没有涉及对象,情况比较简单。Sun开发了外部数据表示(XDR)系统,支持数据串行化。RPC和RMI之间的一个重要差别是RPC用快速而不够可靠的UDP协议,RMI用低速而可靠的TCP/IP协议。 远程方法调用(RMI)和CORBA都是分布式计算技术,在进行分布式时各有其优缺点,为了有助于了解RMI的特点和用途,有必要讨论一下CORBA和RMI的区别。 CORBA(Common Object Request Broker Architecture)是OMG的Object Management Architecture(对象管理结构),它是面向对象的分布式系统建立所依据的标准。CORBA被设计成一个能供所有编程语言使用的一个开放性说明,就是说一个机器上的Java客户可以要求另一个用SmallTalk或C++的机器服务。正是由于这种语言的独立性使得CORBA这么灵活和吸引人。为了适应语言独立性,CORBA采用了非常通用的标准作为其接口。在不同的语言中,远程调用、签名和对象的引入有各自不同的定义,所以CORBA必须尽可能的中立和开放。正是这种通用性是CORBA的一个弱点。当开发人员都采用CORBA时,他们要用一种新的标准定义语言接口,它要求开发者学习新的编程接口,从而减小了远程模型的透明性。 RMI是为仅在Java对Java的分布式计算中而开发的。远程调用的标准是为了Java和应用Java的自然Java签名和调用而开发的,这使得RMI对Java的开发者相当透明而且易于实现。RMI用Java语言紧密集成从而同CORBA相比能够提供非常好的容错能力及对异常的处理。尽管Java的RMI标准不像CORBA那样语言独立,但Java本身是一个独立的平台,这就使RMI在跨平台的分布软件开发中是一个很好的选择。 IIOP 它是一个用于CORBA 2.0及兼容平台上的协议。这个协议的最初阶段是要建立以下几个组件部分:一个IIOP到HTTP的网关,使用这个网关可以让CORBA客户访问WWW资源;一个HTTP到IIOP的网关,通过这个网关可以访问CORBA资源;一个为IIOP和HTTP提供资源的服务器,一个能够将IIOP作为可识别协议的浏览器。2023-07-21 17:46:171
RMI和JNDI有什么区别
RMI是一个能够建立一个N层应用,扩展中间层,将属于不同应用的分布对象包容起来,使用跨过中间层来共享数据和逻辑,能真正实现分布式的解决方案。通过它能够在运行时,通过网络发现不同机器的服务程序,并对应用间的通信进行管理,能确保像本地一样使用远程对象。在RMI中使用rmiregistry时存在一定的问题,rmiregistry只是用作测试基于RMI的应用程序的一种方法,当停止并重新启动rmiregistry时,需要中心注册其中的所有对象,针对这种情况,一般会使用JNDI为远程对象使用一个命名和目录服务,使用LDAP来保存远程对象。RMI只是一种远程对象访问的接口规范,遵循此规范的对象可被远程访问,但是要使用rmi的服务注册程序注册之后才能够被远程调用。JNDi是Java命名和目录服务访问接口,通过JNDI,可以访问已经在命名和目录服务器中注册的服务对象,因此,可以把rmi对象注册在Ldap命名目录服务器中,然后使用JNDI对远程对象进行访问和调用。2023-07-21 17:46:241
通过Java RMI的定时GC触发,JVM垃圾回收就无法自动触发FULL GC了吗
除直接调用System.gc外,触发FullGC执行的情况有如下四种。1.旧生代空间不足旧生代空间只有在新生代对象转入及创建为大对象、大数组时才会出现不足的现象,当执行FullGC后空间仍然不足,则抛出如下错误:java.lang.OutOfMemoryError:Javaheapspace为避免以上两种状况引起的FullGC,调优时应尽量做到让对象在MinorGC阶段被回收、让对象在新生代多存活一段时间及不要创建过大的对象及数组。2.PermanetGeneration空间满PermanetGeneration中存放的为一些class的信息等,当系统中要加载的类、反射的类和调用的方法较多时,PermanetGeneration可能会被占满,在未配置为采用CMSGC的情况下会执行FullGC。如果经过FullGC仍然回收不了,那么JVM会抛出如下错误信息:java.lang.OutOfMemoryError:PermGenspace为避免PermGen占满造成FullGC现象,可采用的方法为增大PermGen空间或转为使用CMSGC。3.CMSGC时出现promotionfailed和concurrentmodefailure对于采用CMS进行旧生代GC的程序而言,尤其要注意GC日志中是否有promotionfailed和concurrentmodefailure两种状况,当这两种状况出现时可能会触发FullGC。promotionfailed是在进行MinorGC时,survivorspace放不下、对象只能放入旧生代,而此时旧生代也放不下造成的;concurrentmodefailure是在执行CMSGC的过程中同时有对象要放入旧生代,而此时旧生代空间不足造成的。应对措施为:增大survivorspace、旧生代空间或调低触发并发GC的比率,但在JDK5.0+、6.0+的版本中有可能会由于JDK的bug29导致CMS在remark完毕后很久才触发sweeping动作。对于这种状况,可通过设置-XX:CMSMaxAbortablePrecleanTime=5(单位为ms)来避免。4.统计得到的MinorGC晋升到旧生代的平均大小大于旧生代的剩余空间这是一个较为复杂的触发情况,Hotspot为了避免由于新生代对象晋升到旧生代导致旧生代空间不足的现象,在进行MinorGC时,做了一个判断,如果之前统计所得到的MinorGC晋升到旧生代的平均大小大于旧生代的剩余空间,那么就直接触发FullGC。例如程序第一次触发MinorGC后,有6MB的对象晋升到旧生代,那么当下一次MinorGC发生时,首先检查旧生代的剩余空间是否大于6MB,如果小于6MB,则执行FullGC。当新生代采用PSGC时,方式稍有不同,PSGC是在MinorGC后也会检查,例如上面的例子中第一次MinorGC后,PSGC会检查此时旧生代的剩余空间是否大于6MB,如小于,则触发对旧生代的回收。除了以上4种状况外,对于使用RMI来进行RPC或管理的SunJDK应用而言,默认情况下会一小时执行一次FullGC。可通过在启动时通过-java-Dsun.rmi.dgc.client.gcInterval=3600000来设置FullGC执行的间隔时间或通过-XX:+DisableExplicitGC来禁止RMI调用System.gc。2023-07-21 17:46:311
什么是关系映射反演方法
关系(relationship)、映射(mapping)、反演(inversion)方法,简称RMI方法,是一种重要的数学思想方法 ,是分析处理数学问题的一种普遍方法. RMI方法的基本思想:当解决问题甲有困难时,可以借助适当的映射,将问题甲及其关系结构R,转换成比 较容易解决的问题乙及其关系结构R[*],在关系结构R[*]中解出问题乙,然后把所得结果,通过逆映射反演到 R,从而求得问题甲的解. RMI方法的基本内容:设R表示一组原象的关系结构(或原象系统),其中包含着待确定的原象X,令M表示 一种映射,通过它的作用假定原象结构系统R被映成映象关系结构R[*],其中包含未知原象X的映象X[*],如果 有办法在R[*]中把X[*]确定下来,则通过逆映射即反演I=M[-1]也就相应地把X确定下来.用框图表示为: 利用RMI方法解决问题的步骤为: 关系─映射─定映─反演(得解). 运用RMI方法,关键在于选取“适当”的映射.即选取的映射M不仅是可定映的,而且还应是可逆映射. RMI方法在小学数学认知中最典型的体现就是数与形的互相转化所起到的化繁为易的作用.明确RMI思想方 法在小学数学中的渗透,不仅有助于培养学生的解题能力,而且还有助于组织教学. (一)运用RMI思想组织教学 就小学生接受知识的心理特点来讲,看到的东西要比听到的印象深刻,且容易记住.因此在教学中,运用 RMI思想方法,把抽象的数学转化为具体的形,从形中发现规律,再得出抽象的规律. 如乘法运算这一概念可用直线段来进行教学.以3×2为例,从0开始,用竖线划分出3个单位,划分点的位 置是3.从这点开始,再划分3个单位竖线标号落在点6上(图1). 因此,3+3=6,3×2=6.当然,还可以用同样 的步骤来表示2×3=6(图2).由此可进一步说明乘法的交换律. (二)运用RMI方法解题举例 尽管在小学数学中不出现“RMI方法”这一名称(甚至连“映射”这名称也不出现),但在整个小学阶段的 解题教学中,始终体现着RMI方法的运用.常见的可归纳为以下三种形式: 1.图形集(点集)到图形集(点集)的映射 在研究几何图形性质时,常常把某一图形看作为一已知的熟悉的图形,通过一定的几何变换(如对称、平 移、旋转、伸缩等)而得到的,几何变换就是一种图形集(点集)到图形集(点集)的映射. 其思维过程为: 例1、求图3中由两个四分之一圆弧构成的阴影部分的面积. 可把左边的长方形上阴影部分①平移到中间的长方形中无阴影部分②;把右边的长方形上阴影部分③ 平移到中间的长方形中无阴影部分④.即作从图形集(点集)①、③到图形集(点集)②、④的等积映射.这 样,得到所求阴影部分的面积,即等于中间一块长方形面积: 2×4=8. 2.实数集到图形集的映射 借助于正实数与几何图形(一般有线段图、矩形图、圆形图、韦恩图等)之间的映射,把代数(算术)问 题变换为几何问题,利用几何图形的直观性,完成对原问题的解答. 原思维过程为: 4 7 例2 一辆汽车从甲地开往乙地,先行了全程的-,剩下路程的─是 5 10 上坡路,其余的是下坡.已知下坡路为3公里,求甲乙两地距离. 分析:这题可借助于正实数与线段之间的一一对应关系(映射),运用RMI方法,把原问题中不明显的数量 关系转化为线段关系,如图4,然后根据所示的线段关系来反演出原问题中的数量关系,从而建立算式. 4 设以全程为单位"1"时,剩下的对应分数是1--;而3公里的对应分 5 4 7 分数为:(1--)×(1-─). 5 10 4 7 综合式:3÷[(1--)×(1-─)]=50(公里) 5 10 通过本例可看出,在小学应用题教学中,要强化把应用题中的数量关系“翻译”成图形(如线段)的练习 ,使学生明确图形能准确、明了地展示题中的数量关系,很快地列出算式. 3.实数集到实数集的映射 在正、反比例关系中,表示两个量之间的关系式,是实数集到实数集的一种映射.在解应用题时,数量之 间常通过转化代换的方法去解,也可理解为从实数集到实数集的映射. 其思维过程为: 例3 某工程先由甲单独做63天,再由乙单独做28天可完成.如果甲、乙合做,需48天完成.现甲先单独做 42天,然后再由乙来单独完成,那么,乙还需做多少天? 由已知,某工程甲做63天与乙做28天的工作量之和相当于甲、乙两人都做48天的工作量.由此可知, 甲做63-48=15天的工作量相当于 20 4 乙做48-28=20天的工作量,于是甲做1天的工作量就相当于乙─=-天的 15 3 4 工作量(即映射:甲做x天→乙做-x天). 3 现在甲做42天,然后再由乙来单独完成需几天的问题,与甲、乙合作共做48天比较: 48-42=6(天),这6 天甲做的工作量由乙去完成,乙 4 需6×-=8(天),因此乙还需做48+8=56(天). 3 综上所述,RMI方法应用极广,用它来处理问题,常能将问题从未知领域向已知领域转化,收到变难为易, 化繁为简的效果,它对于提高学生的思维能力是十分有效的.因而,在小学数学教学中应引起足够的重视.2023-07-21 17:46:392
java RMI问题
你先PING一下172.30.34.59这台电脑吧,你们连接都没有通啊2023-07-21 17:47:003
中间件有多种类型,Java的RMI FJB 属于()中间件。
【答案】:B通常将中间件分为数据库访问中间件、远程过程 调用中间件、面向消息中间件、事务中间件、分布式对象中间件等。(1)数据库访问中间件:通过一个抽象层访问数据库,从而允许使用相同或相似的 代码访问不同的数据库资源。典型技术如Windows平台的ODBC和Java平台的JDBC等。(2)远程过程调用中间件(Remote Procedure Call,RPC):是一种分布式应用程序 的处理方法。一个应用程序可以使用RPC来“远程”执行一个位于不同地址空间内的过 程,从效果上看和执行本地调用相同。一个RPC应用分为服务器和客户两个部分。服务器提供一个或多个远程操作过程; 客户向服务器发出远程调用。服务器和客户可以位于同一台计算机,也可以位于不同的 计算机,甚至可以运行在不同的操作系统之上。客户和服务器之间的网络通讯和数据转 换通过代理程序(Stub与Skeleton)完成,从而屏蔽了不同的操作系统和网络协议。(3)面向消息中间件(Message-OrientedMiddleware,MOM):利用高效可靠的消息 传递机制进行平台无关的数据传递,并可基于数据通信进行分布系统的集成。通过提供 消息传递和消息队列模型,可在分布环境下扩展进程间的通信,并支持多种通讯协议、 语言、应用程序、硬件和软件平台。典型产品如IBM的MQSeries。(4)分布式对象中间件:是建立对象之间客户/服务器关系的中间件,结合了对象技 术与分布式计算技术。该技术提供了一个通信框:架,可以在异构分布计算环境中透明_ 传递对象请求。典型产品如OMG的CORBA、Java的RMI/FJB、Microsoft的DCOM[等。(5)事务中间件:也称事务处理监控器(Transaction Processing Monitor, TPM),提供特大规模事务处理的可靠运行环境。TPM位于客户和服务器之间,完成事务管理与 调、负载平衡、失效恢复等任务,以提高系统的整体性能。典型产品如IBM/BEA的 Tuxedo结合对象技术的对象事务监控器(object Transaction Monitor, OTM)如支持 EJB的JavaEE应用服务器等。2023-07-21 17:47:071
rmi服务怎么关闭?
Namimg.unbind()不行吗?javadoc如下:static void unbind(String name) 销毁与远程对象关联的指定名称的绑定。 而且楼主你为什么要关闭RMI服务呢?把服务器关掉RMI不就停止了吗?2023-07-21 17:47:152
运行RMI应用时,可不可以不手工启动名字服务rmiregistry,而是从程序中启动之?
可以. java.rmi包中提供了类java.rmi.registry.LocateRegistry,用于获取名字服务或创建名字服务.调用LocateRegistry.createRegistry(int port)方法可以在某一特定端口创建名字服务,从而用户无需再手工启动rmiregistry.此外,LocateRegistry.getRegistry(String host,int port)方法可用于获取名字服务.2023-07-21 17:47:411
rmi是多线程处理还是单线程
我猜想这是服务器自己决定的,比如它有负载均衡和流量限制能力。像一般 HTTP 的服务器,它都是使用线程池,是多线程,但有池也就有了并发上限。你可以在 debug 模式中运行一个 RMI java 程序,然后看是不是有一堆的 connect worker 之类的名字的线程。当请求进来的 TCP 监听器会查看是否有闲置的 worker 线程,如果有就交给它处理,如果没有而且未达到池程池中线程的数量上限就创建一个 worker 线程放入池中,然后交给它去处理,处理完请求之后这个worker 线程会释放回线程池,达到上限的话就等直到有闲置的释放出来或者报告超时。因为 RMI 访问是个同步的调用,不可能先压入堆栈等待处理,只要有能力处理服务器就应该立即处理,如果没能力那就连第一步取数据的过程都不要处理,直接阻塞客户端的连接直到有 worker 线程闲置时。我想http 的线程池类似RMI的吧。都是远程客户端访问。像 IBM websphere, Sybase Jaguar 之类的服务器都是有 CORBA/ORB 服务器的,都是使用线程池,原理类似于 RMI。2023-07-21 17:47:501
java的远程调试是基于什么协议
可以是http协议,和socket协议2023-07-21 17:47:572
Java远程方法调用(1)
概述 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可将属性(类实现程序)从客户机移动到服务器 或者从服务器移到客户机 例如 您可以定义一个检查雇员开支报告的接口 以便察看雇员是否遵守了公司目前实行的政策 在开支报告创建后 客户机就会从服务器端获得实现该接口的对象 如果政策发生变化 服务器端就会开始返回使用了新政策的该接口的另一个实现程序 您不必在用户系统上安装任何新的软件就能在客户端检查限制条件 从而向用户提供烁?快的反馈 并降低服务器的工作量 这样就能具备最大的灵活性 因为政策改变时只需要您编写一个新的Java类 并将其在服务器主机上安装一次即可 设计方式 对象传递功能使您可以在分布式计算中充分利用面向对象技术的强大功能 如二层和三层结构系统 如果您能够传递属性 那么您就可以在您的解决方案中使用面向对象的设计方式 所有面向对象的设计方式无不依靠不同的属性来发挥功能 如果不能传递完整的对象 包括实现和类型 就会失去设计方式上所提供的优点 安 全 RMI使用Java内置的安全机制保证下载执行程序时用户系统的安全 RMI使用专门为保护系统免遭恶意小应用程序侵害而设计的安全管理程序 可保护您的系统和网络免遭潜在的恶意下载程序的破坏 在情况严重时 服务器可拒绝下载任何执行程序 便于编写和使用 RMI使得Java远程服务程序和访问这些服务程序的Java客户程序的编写工作变得轻松 简单 远程接口实际上就是Java接口 服务程序大约用三行指令宣布本身是服务程序 其它方面则与任何其它Java对象类似 这种简单方法便于快速编写完整的分布式对象系统的服务程序 并快速地制做软件的原型和早期版本 以便于进行测试和评估 因为RMI程序编写简单 所以维护也简单 可连接现有/原有的系统 RMI可通过Java的本机方法接口JNI与现有系统进行进行交互 利用RMI和JNI 您就能用Java语言编写客户端程序 还能使用现有的服务器端程序 在使用RMI/JNI与现有服务器连接时 您可以有选择地用Java重新编写服务程序的任何部分 并使新的程序充分发挥Java的功能 类似地 RMI可利用JDBC 在不修改使用数据库的现有非Java源代码的前提下与现有关系数据库进行交互 编写一次 到处运行 RMI是Java 编写一次 到处运行 方法的一部分 任何基于RMI的系统均可 %地移植到任何Java虚拟机上 RMI/JDBC系统也不例外 如果使用RMI/JNI与现有系统进行交互工作 则采用JNI编写的代码可与任何Java虚拟机进行编译 运行 分布式垃圾收集 RMI采用其分布式垃圾收集功能收集不再被网络中任何客户程序所引用的远程服务对象 与Java 虚拟机内部的垃圾收集类似 分布式垃圾收集功能允许用户根据自己的需要定义服务器对象 并且明确这些对象在不再被客户机引用时会被删除 并行计算 RMI采用多线程处理方法 可使您的服务器利用这些Java线程更好地并行处理客户端的请求 Java分布式计算解决方案 RMI从JDK 开始就是Java平台的核心部分 因此 它存在于任何一台 Java虚拟机中 所有RMI系统均采用相同的公开协议 所以 所有Java 系统均可直接相互对话 而不必事先对协议进行转换 lishixinzhi/Article/program/Java/hx/201311/264692023-07-21 17:48:041
rmi远程调用出现异常
你改动的时候把端口号丢了。。。rmi://192.168.4.128:(这里)/Server 在“这里修改加上你的端口号”2023-07-21 17:48:111
Java RMI调用远程程序抛出异常
背景要求:定时监控远程主机上mongodb数据库内存使用的情况,当内存使用过大时暂停逻辑处理线程后启动内存空间的释放处理线程,释放完成后再启动逻辑处理线程。操作系统:CentOS 64bit (Linux)步骤(代码省略):1.创建Socket远程服务器2.创建客户端 配置: #查找对象stub端口 RMI_PORT=9902 #服务端口 RMI_SERV_RMI_PORT=9903 #注册服务地址端口要和查找对象stub端口一致 RMI_URL=rmi://192.168.0.118:9902/MongoServer #绑定IP RMI_IP=192.168.0.118 #检查内存shell RMI_MEMQUERY_COMMAND=sh /home/test/BI/smartshow14/MongoDBRMIServer/memquery.sh #释放内存shell RMI_MEMFREE_COMMAND=sh /home/test/BI/smartshow14/MongoDBRMIServer/memclear.sh #释放内存容量阀值,单位M RMI_MEM_CAPACITY_LIMIT=30003.启动服务器客户端线程通过 rmi://192.168.0.118:9902/MongoServer 访问时出现异常:--定时扫描MONGODB内存线程--:开始运行!java.rmi.UnmarshalException: error unmarshalling return; nested exception is: java.lang.ClassNotFoundException: com.linkage.iface.IMongoDBScan (no security manager: RMI class loader disabled) at sun.rmi.registry.RegistryImpl_Stub.lookup(Unknown Source) at java.rmi.Naming.lookup(Naming.java:84) at com.linkage.querytool.QueryRMICaller.ramCapacityScan(QueryRMICaller.java:87) at com.linkage.querytool.MongoDBARMScanThread$TimerWorkTask.run(MongoDBARMScanThread.java:94) at java.util.TimerThread.mainLoop(Timer.java:512) at java.util.TimerThread.run(Timer.java:462)Caused by: java.lang.ClassNotFoundException: com.linkage.iface.IMongoDBScan (no security manager: RMI class loader disabled) at sun.rmi.server.LoaderHandler.loadProxyClass(LoaderHandler.java:535) at java.rmi.server.RMIClassLoader$2.loadProxyClass(RMIClassLoader.java:628) at java.rmi.server.RMIClassLoader.loadProxyClass(RMIClassLoader.java:294) at sun.rmi.server.MarshalInputStream.resolveProxyClass(MarshalInputStream.java:238) at java.io.ObjectInputStream.readProxyDesc(ObjectInputStream.java:1530) at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1492) at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1731) at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1328) at java.io.ObjectInputStream.readObject(ObjectInputStream.java:350) ... 6 more--定时扫描MONGODB内存线程--:处理结束!=======================================================================================================--定时扫描MONGODB内存线程--:开始运行!java.security.AccessControlException: access denied (java.net.SocketPermission 192.168.0.118:9902 connect,resolve) at java.security.AccessControlContext.checkPermission(AccessControlContext.java:374) at java.security.AccessController.checkPermission(AccessController.java:546) at java.lang.SecurityManager.checkPermission(SecurityManager.java:532) at java.lang.SecurityManager.checkConnect(SecurityManager.java:1034) at java.net.Socket.connect(Socket.java:524) at java.net.Socket.connect(Socket.java:478) at java.net.Socket.<init>(Socket.java:375) at java.net.Socket.<init>(Socket.java:189) at sun.rmi.transport.proxy.RMIDirectSocketFactory.createSocket(RMIDirectSocketFactory.java:22) at sun.rmi.transport.proxy.RMIMasterSocketFactory.createSocket(RMIMasterSocketFactory.java:128) at sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:595) at sun.rmi.transport.tcp.TCPChannel.createConnection(TCPChannel.java:198) at sun.rmi.transport.tcp.TCPChannel.newConnection(TCPChannel.java:184) at sun.rmi.server.UnicastRef.newCall(UnicastRef.java:322) at sun.rmi.registry.RegistryImpl_Stub.lookup(Unknown Source) at java.rmi.Naming.lookup(Naming.java:84) at com.linkage.querytool.QueryRMICaller.ramCapacityScan(QueryRMICaller.java:89) at com.linkage.querytool.MongoDBARMScanThread$TimerWorkTask.run(MongoDBARMScanThread.java:94) at java.util.TimerThread.mainLoop(Timer.java:512) at java.util.TimerThread.run(Timer.java:462)--定时扫描MONGODB内存线程--:处理结束!============================================================================================================--定时扫描MONGODB内存线程--:开始运行!java.security.AccessControlException: access denied (java.lang.RuntimePermission createSecurityManager) at java.security.AccessControlContext.checkPermission(AccessControlContext.java:374) at java.security.AccessController.checkPermission(AccessController.java:546) at java.lang.SecurityManager.checkPermission(SecurityManager.java:532) at java.lang.SecurityManager.<init>(SecurityManager.java:282) at java.rmi.RMISecurityManager.<init>(RMISecurityManager.java:45) at com.linkage.querytool.QueryRMICaller.ramCapacityScan(QueryRMICaller.java:88) at com.linkage.querytool.MongoDBARMScanThread$TimerWorkTask.run(MongoDBARMScanThread.java:94) at java.util.TimerThread.mainLoop(Timer.java:512) at java.util.TimerThread.run(Timer.java:462)--定时扫描MONGODB内存线程--:处理结束!==========================================================================================================以上异常都有可能出现,通过以下方式可解除问题:1.在客户端程序前打开安全管理器:try { System.setSecurityManager(new java.rmi.RMISecurityManager()); mds = (IMongoDBScan) Naming.lookup(urlStr);} catch (MalformedURLException e) { //..........} 2.修改/usr/java/jdk1.6.0_21/jre/lib/security/java.policy后重启 grant { permission java.security.AllPermission; }2023-07-21 17:48:301
java 用rmi 远程连接access 数据库,但总报错,请高人指点。
另一端缺少类了?2023-07-21 17:48:403
如何启动rmi注册服务
jb7+weblogic6.x配置方法如下:Win 2000 Temp、Tmp 的配置因为我们生成的 ejb 相关代码要进行一系列的编译,那么所生成的临时文件就要有个地方放啊,但 Win2000中的 Temp、Tmp 目录却偏偏有空格 如%USERPROFILE%Local SettingsTemp,接下来我们来配置一下:1) 右击 《我的电脑》 选属性,在弹出的对话框中选 《高级》 ,再选 《环境变量》 按钮,2) 修改 《Administrator 的用户变量》和《系统变量》中的 TEMP、TEMP、TMPDIR 选项,单击每一个选项,然后点《编辑》(右图),把每个 变量名为 TEMP、TEMP、TMPDIR 的值都改为 c:WINNT emp ,当然这不是必须的,只是我建议你这么做。其实也没什么难的,若改完,则Win2000环境这么应该没什么问题了。WebLogic 6.X 部分一、JDBC Connection Pool 的配置 以Mysql 小型数据库为例在进行此项配置之前,先将欲使用的 数据库JDBC 驱动 Jar 文件放到D:eawlserver6.1libjdbc 目录下(建议这样做,没有jdbc目录就建一个呗),然后编辑D:eawlserver6.1configmydomain 下的 startWebLogic.cmd 文件,在 classpath 中加入数据库的JDBC驱动文件,如红字部分::runWebLogicecho onset PATH=.in;.inoci817_8;d:oracleora81in;%PATH%set CLASSPATH=.libcr_wls60f.jar;.libweblogic_sp.jar;.libweblogic.jar;.libjdbcmysql.jar这样 Weblogic 启动时才会加载欲使用的数据库JDBC驱动,配置也才会正常,否则会报错。1)在Weblogic控制台中依次展开Services JDBC Connection Pools2)单击 Configure a new JDBC Connection Pool...3)填入每一项参数,结果如下:url: jdbc:mysql://127.0.0.1:3306/testdriver classname:org.gjt.mm.mysql.Driverproperties(key=value):user=root4) 别忘了点一下 Apply 即应用一下:)5) Connections 签下的 初始容量、最大容量、容量增长等可根据自已需要配置6) 还有至关重要的最后一步,我们做的以上配置工作还没有真正的应用到 Weblogic 上,所以还差一步, 选 Targets 签,选 Servers 签,选 Available (可用)中的 myserver ,然后点"-->" ,再点 Apply 应用一下。 这样我们所做的工作才会真正有效, Weblogic 也才会认识我们配置的 JDBC Connection Pool二、配置数据源1)在Weblogic控制台中依次展开Services JDBC Tx Data Sources2)单击 Configure a new JDBC Tx Data Source...3)填入每一项参数,结果如下:jndi name: MysqlDataSorucePoolName:MysqlPoolrow prefetch size :48stream chunk size: 2564) 别忘了点一下 Apply 即应用一下:)5) 同样,选 Targets 签,选 Servers 签,选 Available (可用)中的 myserver ,然后点"-->" ,再点 Apply 应用一下。 这样我们所做的工作才会真正有效, Weblogic 也才会认识我们配置的 DataSource。JBuilder 7 的相关配置一、数据库驱动的加载同 weblogic 一样,在进行此项配置之前,先将欲使用的 数据库JDBC 驱动 Jar 文件放到 D:JBuilder7libjdbc 目录下(建议这样做,没有jdbc目录就建一个呗)1) 开启 JBuilder 7,单击 Tools EnterPrise Setup .......2) 在弹出窗口中选择 Database Drivers 签3) 再点 Add 按钮,弹出新窗口(可能你的与图上的略有不同)4) 再单击 New ... 按钮,弹出新窗口,并改变 Name: 的默认值为 mysql (只要有意义,起个什么名都成)5) 单击 Add... 按钮来查找并添加数据库的 JDBC 驱动,当然了,我们到 D:JBuilder7libjdbc 下去找,选 mysql.jar ,注意,不要把mysql.jar 展开,象图那样选中再按 OK 就行了。提示:可以配合 Shift 和 Ctrl 键同时选多个 .jar 文件。6) 结果如下图,如果有多个需要添加的 .jar 文件,还可点 Add... 按钮继续添加。7) OK 退出.8) 再OK ,则 mysql JDBC 驱动就已经加入了。9) 再一次的 Ok ,JBuilder 提示要重起后上述配置才会生效,确定并重启 JBuilder。二、EJB 2.0 和 应用服务器的配置,以 WebLogic 6.X为例在进行此项配置之前要安装 Borland Enterprise Servler 5.02 ,IAS 4.5 也成,它俩是一回事,当然了我是有新的不用旧的,安装过程略,因为安装它很 easy ! 基本是一路回车,我把我的安装在 D:BorlandEnterpriseServer 下了。1) 开启 JBuilder 7,单击 Tools EnterPrise Setup .......2) 选择 CORBA 签,在 Configuration 下的下拉列表框,选择 VisiBroker 3) 选择 Edit... ,弹出 Edit Confiuration 窗口 点击path for orb tools 4) 单击 Path for ORB tools: 旁边的 ... 浏览按钮,弹出 Select Directory 窗口,选择 D:BorlandEnterpriseServer5in 并 OK。5) 再 两遍 OK ,JBuilder 又要求你重启,没办法,照它说的做,重启 JBuilder 。6) 重启后,还要到 Tools EnterPrise Setup ....... ,选 CORBA 项,选 Edit ,在弹出窗口中选 Library for projects: 旁边的 ... 按钮7) 在弹出的新窗口的 User Home 中你会发现多了一个选项 Borland Enterprise Server 5.0.2+ Client 即 选择图中所示 黑亮的选项,然后 三遍 OK 退出。 8) 再选择 Project Default Project Properties 项9) 在弹了对话框中选 Server 签,如图,点击 ... 按钮,10) 在弹出的新对话框中,选择 WebLogic Application Server 6.x +,然后复选 Enable server ,见图中红框。11) 复选 Enable server 后,其它各项可选或可填,点击 ... 按钮, 选择 Home directory ; 选择 Working directory ; 为你机器所装 Weblogic 的位置。12) 点击 Class 签内的Add 按钮,如上图,将 D:eawlserver6.1libcr_wls60f.jar 文件添加进来。如上图红线。 再用 Move Up 按钮,将 D:eawlserver6.1libcr_wls60f.jar 文件移至最项端,因为一般后加的 .jar 文件在最下边。 这一步也比较重要,因为在JBuilder 环境下可以直接启动 Weblogic ,那它就要首先检测 license 是否合法,即 cr_wls60f.jar文件 是否存在。13) 再选择 Custom 签,按如下红线所示配置,可能您装的 Weblogic 目录位置与我的有不同,但大概意思是一样的。 配置完后,点击 OK 按钮退出 domain name :mydomain server name: myserver version:6.1 Service Pack1(d:/bea/wlserver6.1)14) 再在如图窗口中的 Single server for all services in project 下拉列表框中选择 WebLogic Application Server 6.x+ 如图所示,然后 OK 退出。--骆驼祥子整理的2023-07-21 17:48:481
警告: RMI TCP Accept-1099: accept loop for ServerSocket[addr=0.0.0.0/0.0.0.0,por t=0,localport
ServerSocket 不能打开远程的Socket服务端接口java.net.SocketException: select failed 选择失败2023-07-21 17:48:561
在J2EE构架中使用到了JNDI JDBC RMI-IIOP技术,请完整拼写出它们的英文全名并简述这些技术的作用
JNDI:(Java Naming and Directory Interface,Java命名和目录接口)是SUN公司提供的一种标准的Java命名系统接口,JNDI提供统一的客户端API,通过不同的访问提供者接口JNDI SPI的实现,由管理者将JNDI API映射为特定的命名服务和目录系统,使得Java应用程序可以和这些命名服务和目录服务之间进行交互。目录服务是一种命名服务,在这种服务里,对象不但有名称,还有属性。JDBC:(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序。RMI以Java为核心,可与采用本机方法与现有系统相连接。这就是说,RMI可采用自然、直接和功能全面的方式为您提供分布式计算技术,而这种技术可帮助您以不断递增和无缝的方式为整个系统添加Java功能。IIOP,Internet Inter-ORB Protocol(互联网内部对象请求代理协议),它是一个用于CORBA 2.0及兼容平台上的协议。用来在CORBA对象请求代理之间交流的协议。Java中使得程序可以和其他语言的CORBA实现实现互操作性的协议。2023-07-21 17:49:051
请问飞机的这两个仪表分别表什么意思?
左边的仪表称之 Radio Magnetic Indicator 简称 RMI 中译 无线电磁指示器它的正12点位置,就是飞机的地磁方向,指针是低频ADF指示器2023-07-21 17:49:141
Java的RMI/FJB属于什么中间件?
1、Java RMI,即 远程方法调用(Remote Method Invocation),一种用于实现远程过程调用(RPC)(Remote procedure call)的Java API, 能直接传输序列化后的Java对象和分布式垃圾收集。它的实现依赖于Java虚拟机(JVM),因此它仅支持从一个JVM到另一个JVM的调用。2、应该是EJB吧,它是早与Spring之前的一个 EJB (Enterprise Java Beans) 是基于分布式事务处理的企业级应用程序的组件。Sun公司发布的文档中对EJB的定义是:EJB是用于开发和部署多层结构的、分布式的、面向对象的Java应用系统的跨平台的构件体系结构。如满意,请采纳!2023-07-21 17:49:212
rmi 访问 web程序暴露的一个接口:java.security.AccessControlException: access denied
用 JDK /bin/policytool.exe 创建一个 AllPermission 权限,然后另存为一个 java.policy 文件中,然后在启动程序的命令行加上参数 -Djava.security.policy=java.policy的完整路径,然后再在代码中启动 rmi 程序的 main 方法中先来个 System.setSecurityManager(new RMISecurityManager());等你的程序能跑起来之后,再来考虑要不要把权限从 all 权限降低到更小的范围内。RMI 因为在加载 stub 之类的类文件时可能在后台访问远程服务器,因此需要明确的授权,让服务器和客户端的使用者明确地知晓背后可能发生的网络数据传递,这就是安全的原则。我们是通过明确的指定 security policy 来实现的。2023-07-21 17:49:291
用rmi系统会提示什么让你确认?
用rmi系统会提示什么让你确认?2023-07-21 17:49:5115
什么是RMI
RMI 是 Ray manufacturing industry的缩写,瑞茂光学的英文简写2023-07-21 17:50:333
一个简单的RMI例子,不明白怎么错
RMI远程方法调用是一种计算机之间利用远程对象互相调用实现双方通讯的一种通讯机制。使用这种机制,某一台计算机上的对象可以调用另外一台计算机上的对象来获取远程数据。RMI是Enterprise JavaBeans的支柱,是建立分布式Java应用程序的方便途径。简单实例:1、首先为服务建立一个Model层,注意因为此对象需要现实进行远程传输,所以必须继承Serializable2、创建远程接口PersonService,注意远程接口需要继承Remote3、建立PersonServiceImpl实现远程接口,注意此为远程对象实现类,需要继承UnicastRemoteObject4、建立服务器端,在服务器端注册RMI通讯端口与通讯路径,然后通讯javac命令编译文件,通过java -server 命令注册服务。5、以下面代码为例,如果将项目建立于D:\RMIRemotingService文件夹上时,则先输入D:\RMIRemotingServicesrc>javac rmi/remotingservice/Program.java获取Program.class,然后输入D:\RMIRemotingServicesrc>javarmi/remotingservice/Program启动服务。6、最后建立客户端进行测试,注意客户调用的RMI路径必须服务器配置一致。2023-07-21 17:50:401
请问corba和RMI有什么区别啊
RMI定义了一组远程接口,可以用于生成远程对象。客户机可以象调用本地对象的方法一样用相同的语法调用远程对象。RMI API提供的类和方法可以处理所有访问远程方法的基础通信和参数引用要求的串行化。 远程方法调用类似于Sun公司1985年提出的远程过程调用(RPC)特征。RPC也要求串行化参数和返回数值数据,但由于没有涉及对象,情况比较简单。Sun开发了外部数据表示(XDR)系统,支持数据串行化。RPC和RMI之间的一个重要差别是RPC用快速而不够可靠的UDP协议,RMI用低速而可靠的TCP/IP协议。 远程方法调用(RMI)和CORBA都是分布式计算技术,在进行分布式时各有其优缺点,为了有助于了解RMI的特点和用途,有必要讨论一下CORBA和RMI的区别。 CORBA(Common Object Request Broker Architecture)是OMG的Object Management Architecture(对象管理结构),它是面向对象的分布式系统建立所依据的标准。CORBA被设计成一个能供所有编程语言使用的一个开放性说明,就是说一个机器上的Java客户可以要求另一个用SmallTalk或C++的机器服务。正是由于这种语言的独立性使得CORBA这么灵活和吸引人。为了适应语言独立性,CORBA采用了非常通用的标准作为其接口。在不同的语言中,远程调用、签名和对象的引入有各自不同的定义,所以CORBA必须尽可能的中立和开放。正是这种通用性是CORBA的一个弱点。当开发人员都采用CORBA时,他们要用一种新的标准定义语言接口,它要求开发者学习新的编程接口,从而减小了远程模型的透明性。 RMI是为仅在Java对Java的分布式计算中而开发的。远程调用的标准是为了Java和应用Java的自然Java签名和调用而开发的,这使得RMI对Java的开发者相当透明而且易于实现。RMI用Java语言紧密集成从而同CORBA相比能够提供非常好的容错能力及对异常的处理。尽管Java的RMI标准不像CORBA那样语言独立,但Java本身是一个独立的平台,这就使RMI在跨平台的分布软件开发中是一个很好的选择。 IIOP 它是一个用于CORBA 2.0及兼容平台上的协议。这个协议的最初阶段是要建立以下几个组件部分:一个IIOP到HTTP的网关,使用这个网关可以让CORBA客户访问WWW资源;一个HTTP到IIOP的网关,通过这个网关可以访问CORBA资源;一个为IIOP和HTTP提供资源的服务器,一个能够将IIOP作为可识别协议的浏览器。2023-07-21 17:50:591
哪位大神知道,怎么关闭Spring的RMI服务
spring的rmi是RmiServiceExporter提供的一个服务。就是通过绑定一个url,比如绑定在 rmi://ip:1199/xx,客户端用这个url来链接服务,你说的关闭是什么意思?停止这个服务,还是?停止的话,你关闭这个端口就行了。2023-07-21 17:51:201
RMI和JNDI有什么区别
RMI是一个能够建立一个N层应用,扩展中间层,将属于不同应用的分布对象包容起来,使用跨过中间层来共享数据和逻辑,能真正实现分布式的解决方案。通过它能够在运行时,通过网络发现不同机器的服务程序,并对应用间的通信进行管理,能确保像本地一样使用远程对象。在RMI中使用rmiregistry时存在一定的问题,rmiregistry只是用作测试基于RMI的应用程序的一种方法,当停止并重新启动rmiregistry时,需要中心注册其中的所有对象,针对这种情况,一般会使用JNDI为远程对象使用一个命名和目录服务,使用LDAP来保存远程对象。RMI只是一种远程对象访问的接口规范,遵循此规范的对象可被远程访问,但是要使用rmi的服务注册程序注册之后才能够被远程调用。JNDi是Java命名和目录服务访问接口,通过JNDI,可以访问已经在命名和目录服务器中注册的服务对象,因此,可以把rmi对象注册在Ldap命名目录服务器中,然后使用JNDI对远程对象进行访问和调用。2023-07-21 17:51:391
测试spring RMI,抛异常,如下。
HelloImpl是不是extends UnicastRemoteObject了?如果是的话去掉再试试2023-07-21 17:52:241
cs结构的客户端与服务端的通讯协议一般是怎样的
RMI是java语言本身提供的远程通讯协议,稳定高效,是EJB的基础.但它只能用于JAVA程序之间的通讯.Hessian和Burlap是caucho公司提供的开源协议,基于HTTP传输,服务端不用开防火墙端口.协议的规范公开,可以用于任意语言.Httpinvoker是SpringFramework提供的远程通讯协议,只能用于JAVA程序间的通讯,且服务端和客户端必须使用SpringFramework.Web service是连接异构系统或异构语言的首选协议,它使用SOAP形式通讯,可以用于任何语言,目前的许多开发工具对其的支持也很好.测试结果显示,几种协议的通讯效率依次为:RMI > Httpinvoker >= Hessian >> Burlap >> web serviceRMI不愧是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处理那么流畅简洁.2023-07-21 17:52:341
请教一个关于java rmi远程调用 传递自定义对象的问题
RMI(Remote Method Invocation)远程方法调用是一种计算机之间利用远程对象互相调用实现双方通讯的一种通讯机制。使用这种机制,某一台计算机上的对象可以调用另外一台计算机上的对象来获取远程数据。RMI是Enterprise JavaBeans的支柱,是建立分布式Java应用程序的方便途径。在过去,TCP/IP套接字通讯是远程通讯的主要手段,但此开发方式没有使用面向对象的方式实现开发,在开发一个如此的通讯机制时往往令程序员感觉到乏味,对此RPC(Remote Procedure Call)应运而生,它使程序员更容易地调用远程程序,但在面对复杂的信息传讯时,RPC依然未能很好的支持,而且RPC未能做到面向对象调用的开发模式。针对RPC服务遗留的问题,RMI出现在世人面前,它被设计成一种面向对象的通讯方式,允许程序员使用远程对象来实现通信,并且支持多线程的服务,这是一次远程通讯的革命,为远程通信开辟新的里程碑。 RMI的开发步骤 先创建远程接口及声明远程方法,注意这是实现双方通讯的接口,需要继承Remote 开发一个类来实现远程接口及远程方法,值得注意的是实现类需要继承UnicastRemoteObject 通过javac命令编译文件,通过java -server 命令注册服务,启动远程对象 最后客户端查找远程对象,并调用远程方法 简单实例 首先为服务建立一个Model层,注意因为此对象需要现实进行远程传输,所以必须继承Serializable 代码 创建远程接口PersonService,注意远程接口需要继承Remote 代码 建立PersonServiceImpl实现远程接口,注意此为远程对象实现类,需要继承UnicastRemoteObject 代码 建立服务器端,在服务器端注册RMI通讯端口与通讯路径,然后通讯javac命令编译文件,通过java -server 命令注册服务。以下面代码为例,如果阁下将项目建立于D:\RMIRemotingService文件夹上时,则先输入D:\RMIRemotingServicesrc>javac rmi/remotingservice/Program.java获取Program.class(如何阁下使用的MyEclipse等开发工具,可跳过此步,直接在*/bin文件夹中直接调用已经生成的Program.class),然后输入D:\RMIRemotingServicesrc>java rmi/remotingservice/Program启动服务。 代码 最后建立客户端进行测试,注意客户调用的RMI路径必须服务器配置一致 代码 常见错误 在命令提示符调用java命令时,显示并无此命令。这是因为未在“环境变量”中绑定JAVA的JDK命令造成的,你首先单击“计算机右键”->“属性”->“高级”->“环境变量”。在系统变量Path设置中加载为JDK的路径 .;D:Program FilesGenuitecCommoninarycom.sun.java.jdk.win32.x86_1.6.0.013in。然后在ClassPath加载服务器端的Program.class地址 .;D:\RMIRemotingServicein 在调用javac命令时出现“javac 找不到文件 ..... ”此错误,可能是因为阁下输入的文件路径出现错误造成,注意不要把D:\RMIRemotingServicesrc>javac rmi/remotingservice/Program.java写错为D:\RMIRemotingServicesrc>javac rmi.remotingservice.Program.java 在调用D:\RMIRemotingServicein>java rmi/remotingservice/Program命令时出现“Exception in thread "main" java.lang.NoClassEdfoundError”错误,第一这可能是阁下把Program错写为Program.class,注意java命令不需要加后缀名。第二可能是阁下把“java rmi/remotingservice/Program”错写为“java rmi emotingserviceProgram"。2023-07-21 17:52:401
Activation.main: 警告: sun.rmi.activation.execPolicy 系统 属性未被指定且
端口占用,重启netbeans,查看端口1098是哪个程序在用。2023-07-21 17:53:101
在linux系统下,输入jstack pid,出现如下错误,请问如何解决?
pid是 process id也就是进程id得用进程的ID2023-07-21 17:53:171
android里不能继承java.rmi.Remote吗
解释的不是很专业 就是java里规定得是:单继承,多实现。 指的就是只能继承一个父类,可以实现多个接口 通俗点说:单继承就好比是一个人只能有一个亲生父亲 而不可能有两个 继承就是使子类具有父类的 属性,和方法2023-07-21 17:53:241
java远程调用接口的原理和范例,谢谢
请参考 http://zhidao.baidu.com/question/458410920.html和http://zhidao.baidu.com/question/229357602.html和http://zhidao.baidu.com/question/169082054.html2023-07-21 17:53:342
rmi调用时socket异常
还是分包的方式,将数据分开来传递吧2023-07-21 17:53:411
什么是关系映射反演方法
关系(relation)映射(mapping)反演(inversion)方法(简称为RMI方法)是我国学者徐治利先生在60年代研究组合数学的时候提出的一种数学方法论。尽管这种方法论已被世界广泛认同,但仍为大多数学习数学的人所不知。在此简略的做一番介绍,望能给学习数学的读者作以方法上的参考。本篇文章纯粹是介绍性文章,故不会对此问题做深入的研究,读者如果感兴趣,想要了解更多,可以去查看徐治利先生的《数学方法论选讲》(徐利治著)《徐治利数学方法论十二讲》《徐治利谈数学方法论》《关系映射反演原则及应用》等以及一些其他关于数学方法论的书籍。2023-07-21 17:54:022
在java RMI服务器端是否可以写多个接口,从而注册多个不同的远程对象呢
你想实现几个接口都是可以的,只要符合远程接口的规范类似下面的代码这样写啊远程接口实例import java.rmi.Remote; import java.rmi.RemoteException; public interface Hello extends Remote { String sayHello() throws RemoteException; } 它定义了一个方法,sayHello,实现向调用者返回一个字符串Server类import java.rmi.registry.Resistry; import java.rmi.registry.LocateRegistry; import java.rmi.RemoteException; import java.rmi.server.UnicastRemoteObject; public class Server implements Hello { public Server(){} public String sayHello() { return “Hello,World!”; } public static void main(String args[]) { Try{ Server obj=new Server (); Hello stub=(Hello)UnicastRemoteObject.explortObject(obj,0); //Bind the remote object" s stub in the registry Registry registry=LocateRegistry.getRegistry(); Registry.bind(“Hello”,stub); System.err.println(“Server ready”); }catch(Exception e) { System.err.println(“Server exception:”+e.toString()); e.printStackTrace(); } } }2023-07-21 17:54:091
java windows项目 到linux下 rmi异常
学习下2023-07-21 17:54:174
JAVA RMI无法远程调用
java.lang.ClassNotFoundException: server.SayHello (no security manager: RMI class loader disabled)缺少jar包,异常显示是缺少server.SayHello这个方法,确认新项目中是不是少了jar包。2023-07-21 17:54:241
通过Java RMI的定时GC触发,JVM垃圾回收就无法自动触发FULL GC了吗
除直接调用System.gc外,触发FullGC执行的情况有如下四种。1.旧生代空间不足旧生代空间只有在新生代对象转入及创建为大对象、大数组时才会出现不足的现象,当执行FullGC后空间仍然不足,则抛出如下错误:java.lang.OutOfMemoryError:Javaheapspace为避免以上两种状况引起的FullGC,调优时应尽量做到让对象在MinorGC阶段被回收、让对象在新生代多存活一段时间及不要创建过大的对象及数组。2.PermanetGeneration空间满PermanetGeneration中存放的为一些class的信息等,当系统中要加载的类、反射的类和调用的方法较多时,PermanetGeneration可能会被占满,在未配置为采用CMSGC的情况下会执行FullGC。如果经过FullGC仍然回收不了,那么JVM会抛出如下错误信息:java.lang.OutOfMemoryError:PermGenspace为避免PermGen占满造成FullGC现象,可采用的方法为增大PermGen空间或转为使用CMSGC。3.CMSGC时出现promotionfailed和concurrentmodefailure对于采用CMS进行旧生代GC的程序而言,尤其要注意GC日志中是否有promotionfailed和concurrentmodefailure两种状况,当这两种状况出现时可能会触发FullGC。promotionfailed是在进行MinorGC时,survivorspace放不下、对象只能放入旧生代,而此时旧生代也放不下造成的;concurrentmodefailure是在执行CMSGC的过程中同时有对象要放入旧生代,而此时旧生代空间不足造成的。应对措施为:增大survivorspace、旧生代空间或调低触发并发GC的比率,但在JDK5.0+、6.0+的版本中有可能会由于JDK的bug29导致CMS在remark完毕后很久才触发sweeping动作。对于这种状况,可通过设置-XX:CMSMaxAbortablePrecleanTime=5(单位为ms)来避免。4.统计得到的MinorGC晋升到旧生代的平均大小大于旧生代的剩余空间这是一个较为复杂的触发情况,Hotspot为了避免由于新生代对象晋升到旧生代导致旧生代空间不足的现象,在进行MinorGC时,做了一个判断,如果之前统计所得到的MinorGC晋升到旧生代的平均大小大于旧生代的剩余空间,那么就直接触发FullGC。例如程序第一次触发MinorGC后,有6MB的对象晋升到旧生代,那么当下一次MinorGC发生时,首先检查旧生代的剩余空间是否大于6MB,如果小于6MB,则执行FullGC。当新生代采用PSGC时,方式稍有不同,PSGC是在MinorGC后也会检查,例如上面的例子中第一次MinorGC后,PSGC会检查此时旧生代的剩余空间是否大于6MB,如小于,则触发对旧生代的回收。除了以上4种状况外,对于使用RMI来进行RPC或管理的SunJDK应用而言,默认情况下会一小时执行一次FullGC。可通过在启动时通过-java-Dsun.rmi.dgc.client.gcInterval=3600000来设置FullGC执行的间隔时间或通过-XX:+DisableExplicitGC来禁止RMI调用System.gc。2023-07-21 17:54:311
求救!java rmi 启动出错
首先在server端需要一个接口,继承自java.rmi.Remotepublic interface Hello extends Remote { public String say() throws RemoteException;}其次实现这个接口并继承java.rmi.server.UnicastRemoteObjectpublic class SayHello extends UnicastRemoteObject implements Hello{ protected SayHello() throws RemoteException{ super(); } public String say() throws RemoteException { return "Hello"; }}接着注册服务,绑定端口public class Reg { public static void main(String[] args) throws RemoteException,MalformedURLException{ LocateRegistry.createRegistry(1099); SayHello sh = new SayHello(); Naming.rebind("rmi://localhost:1099/sh", sh); System.out.println("注册完毕"); }}然后在客户端public class Client { public static void main(String[] args) throws RemoteException,MalformedURLException,NotBoundException{ Hello h = (Hello)Naming.lookup("rmi://localhost:1099/sh"); System.out.println(h.say()); }}即可 jdk1.5及以上版本已经不需要生成存根和骨架了也不用去start rmicregistry什么了 只要先运行那个Reg类,再运行Client就OK了2023-07-21 17:54:381
RMI中怎么会自动把IP从内网映射到外网啊??
169.254.150.56 不是外网出口,是计算机本身的保留地址。 也就是你的计算机对自身的映射。2023-07-21 17:54:461
Activation.main: 警告: sun.rmi.activation.execPolicy 系统 属性未被指定且
端口占用,重启netbeans,查看端口1098是哪个程序在用。2023-07-21 17:55:461
RMI-IIOP的简介
RMI以Java为核心,可与采用本机方法与现有系统相连接。这就是说,RMI可采用自然、直接和功能全面的方式为您提供分布式计算技术,而这种技术可帮助您以不断递增和无缝的方式为整个系统添加Java功能。IIOP,Internet Inter-ORB Protocol(互联网内部对象请求代理协议),它是一个用于CORBA 2.0及兼容平台上的协议。用来在CORBA对象请求代理之间交流的协议。Java中使得程序可以和其他语言的CORBA实现实现互操作性的协议。RMI-IIOP出现以前,只有RMI和CORBA两种选择来进行分布式程序设计,二者之间不能协作。RMI-IIOP综合了RMI 和CORBA的优点,克服了他们的缺点,使得程序员能更方便的编写分布式程序设计,实现分布式计算。首先,RMI-IIOP综合了RMI的简单性和CORBA的多语言性(兼容性),其次RMI-IIOP克服了RMI只能 用于Java的缺点和CORBA的复杂性(可以不用掌握IDL)。2023-07-21 17:55:531
什么技术会用到SSL?还有RMI是干什么用的
用来对你的名字和密码加密传输的.主要是商务用.2023-07-21 17:56:062