在数据处理网络中与远程对象进行通信制造技术

技术编号:2845951 阅读:165 留言:0更新日期:2012-04-11 18:40
一种用于在数据处理系统中调用远程对象的方法和计算机程序产品,包括响应于执行远程对象调用而生成包含远程对象及其自变量的串行化字节流。将该串行化字节流发送给包含该对象的服务器。响应于接收到包含由该远程对象产生的结果的第二串行化字节流以及确定在该第二字节流中存在找不到对其的任何引用的第二远程对象,使用第二串行化字节流中包含的信息来确定该第二远程对象的类类型。如果事先不存在与该第二远程对象的类类型兼容的代理,则在客户端上自动地生成并编译这种代理,或者如果已经存在这种代理,则在运行时加载这种代理以便调用该第二远程对象。

【技术实现步骤摘要】
【国外来华专利技术】
本专利技术涉及数据处理网络领域,并且更特别地涉及在其中本地地调用远程对象的数据处理网络的领域。
技术介绍
Java(Sun微系统公司的商标)远程方法调用(RMI)使得程序员能够创建分布式的Java应用程序,在这些应用程序中可以从通常位于不同的主机系统上的其他Java虚拟机(Java Virtual Machine)中调用远程Java对象。在Sun微系统公司的“Java Remote MethodInvocation Specification”(Java远程方法调用规范)(修订版1.9)(http://java.sun.com/j2se/1.4.2/docs/guide/rmi/spec/rmi-title.html)中更加详细地描述了Java RMI。“远程对象”(remote object)定义为可以实现java.rmi.remote接口的对象。然而,出于本公开的目的,可以将远程对象考虑为不加载到试图对其进行调用的JVM(Java虚拟机)中的对象。一旦通过使用由RMI提供的命名服务查找远程对象或通过接收作为自变量或返回值的引用而获得了对远程对象的引用,基于Java的程序就可以对该远程对象进行调用。客户端可以调用服务器中的远程对象,并且该服务器还可以是其他远程对象的客户端。RMI使用对象串行化(object serialization)来对用于远程对象调用的自变量进行列集(marshal)和散集(unmarshal)。“对象串行化”指的是向未经处理的字节流写入整个对象或从未经处理的字节流中读取整个对象的能力。对象串行化使得能够将Java对象和原语(primitive)编码到字节流中,这些字节流适合于流式传送到某些类型的网络、流式传送到文件系统或更一般地流式传送到传输介质或存储设备。参考图1,其中示出了传统的Java远程对象调用的概念表示。在所示出的实施例中,在客户端计算机101上编译Java源代码文件(.java文件)102,以创建可以由包括Java虚拟机(JVM)的Java运行时环境(JRE)执行的Java字节代码(.class文件)110。JRE和JVM在Java编程领域中是公知的。在执行客户端应用程序(即.class文件110)之前,将RMI编译器(RMIC)114用于创建stub文件118以及tie文件或skeleton文件122。(在一个基于因特网ORB间协议(IIOP)的实施例中创建tie文件,而在一个基于Java远程方法协议(JRMP)的实施例中创建skeleton文件)。stub文件118是用于远程对象的代理。stub文件118负责将关于远程对象的方法调用转发给驻留了实际远程对象实现的服务器。tie文件122是服务器端的与stub文件118相似的文件。tie文件122用于将对象和参数返回给客户端的应用程序。class文件110包含对远程对象130的引用,该引用实际上是对stub 118的引用。当class 110对远程对象130进行调用时,stub 118是用以将该远程对象调用转发给驻留了该远程对象的服务器的class文件。stub 118通过对远程对象调用参数进行串行化并经由使用常规TCP/IP(传输控制协议/网际协议)的网络发送该串行化字节流来执行这种功能。tie文件122在远程对象服务器端执行相似的功能。参考图2,其中示出了常规的Java RMI运行时序列的概念表示。在所示出的例子中,由相应的JVM(未示出)执行的.class文件110包含对远程对象130的调用。当执行对远程对象130的调用时,通过stub文件118来实现远程调用。更具体而言,将对远程对象130(包括该远程对象所需的任意参数和对象)的调用传送(用参考标号202表示)给stub文件118。stub文件118负责对该远程对象调用以及该调用的自变量进行串行化,并负责将串行化字节流发送(参考标号204)给服务器端的JVM(未示出),该远程对象在该JVM下执行。在所示出的示例中,Java应用程序文件110和远程对象130驻留在不同的机器上,其中将Java应用程序文件110示出为驻留在“客户端”计算机201上并且将远程对象示出为驻留在“服务器端”计算机203上。在这种配置中,客户端201与服务器端203之间的串行化字节流传送优选地使用诸如TCP/IP之类的常规网络协议栈来实现。在服务器端203上,tie文件122接收由stub文件118发送的串行化字节流,并对相应的自变量进行解串行化(de-serialize)和散集以重构远程对象调用的对象以及参数。将解串行化的对象和/或参数提交(参考标号206)给远程对象130用于执行。远程对象130随后使用接收到的对象和/或参数执行服务器端203并产生一组结果参数和/或对象,将这组结果参数和/或对象返回(参考标号208)给tie文件122。tie文件122对自变量进行串行化,并将串行化的数据发回(参考标号210)客户端201。stub文件118随后负责对该串行化的对象和参数进行散集,然后将非串行化的数据返回(参考标号212)给客户端应用程序。在某些情况下,在客户端系统上不存在用于特定远程对象的stub,并且生成了“ClassNotFoundException”(没有找到类的异常)。例如,当客户端应用程序不具有对远程对象的直接引用,而是作为替代从例如Java命名和目录服务(JNDI)之类的命名服务中检索到对远程对象的引用时,这种情况就可能发生。在这种情况下,由于在编译时不能预见调用会将哪个远程对象返回给命名服务,程序员不能保证会存在适当的stub。在另一个例子中,对第一远程对象的客户端调用向客户端返回对第二远程对象的引用(作为由第一远程对象发起的调用中的一个参数或作为对客户端远程对象调用的返回值)。在这种情况中,从服务器端返回的远程对象的名称在编译时是不可知的,并且在系统上不存在适当的stub。希望通过实现一种用于创建“缺失”的(missing)stub类文件以适应客户设备需要进行的远程对象调用的方法和系统来消除这种错误源。如果可以在运行时动态地操作所实现的解决方案以改善运行时性能并减少不期望的重编译量,则将是更加令人期待的。
技术实现思路
一种用于在数据处理系统中调用远程对象的方法和计算机程序产品,包括响应于执行远程对象调用,生成包含该远程对象及其自变量的串行化字节流。将该串行化字节流发送到包含该对象的服务器。响应于接收到包含由该远程对象产生的结果的第二串行化字节流以及确定在第二字节流中存在找不到对应的任何引用的第二远程对象,使用第二串行化字节流中包含的信息来确定该第二远程对象的类类型。与该第二远程对象的类类型兼容的代理用于调用该第二远程对象。针对该第二远程对象使用代理可以包括确定是否存在与该第二远程对象类类型兼容的代理,并且如果存在与该第二远程对象类类型兼容的代理,则在运行时加载该代理。响应于确定不存在与该第二远程对象类兼容的代理,在运行时生成适当的代理并将其用于调用该第二远程对象。确定是否存在兼容的代理可以包括确定是否存在用于该第二远程对象类类型的代理,并且如果不存在用于该第二远程对象类类型的代理,则确定与该第二远程对象兼容的最相关的类类型,并随后确定是否存在用于该最相本文档来自技高网
...

【技术保护点】
一种在数据处理系统中执行远程过程的方法,包括:响应于远程对象调用,生成包含所述远程对象及其自变量的串行化字节流;将所述串行化字节流发送到包含所述对象的服务器;响应于接收到包含由所述远程对象产生的结果的第二串行化字节流 以及确定存在找不到对应的任何引用的第二远程对象,使用所述第二串行化字节流中包含的信息来确定所述第二远程对象的类类型;以及使用与所述第二远程对象的类类型兼容的代理来调用所述第二远程对象。

【技术特征摘要】
【国外来华专利技术】US 2004-1-12 10/755,8211.一种在数据处理系统中执行远程过程的方法,包括响应于远程对象调用,生成包含所述远程对象及其自变量的串行化字节流;将所述串行化字节流发送到包含所述对象的服务器;响应于接收到包含由所述远程对象产生的结果的第二串行化字节流以及确定存在找不到对应的任何引用的第二远程对象,使用所述第二串行化字节流中包含的信息来确定所述第二远程对象的类类型;以及使用与所述第二远程对象的类类型兼容的代理来调用所述第二远程对象。2.根据权利要求1所述的方法,其中针对所述第二远程对象使用所述代理包括确定是否存在与所述第二远程对象的类类型兼容的代理,以及如果存在与所述第二远程对象的类类型兼容的代理,则在运行时加载所述代理。3.根据权利要求2所述的方法,还包括响应于确定不存在与所述第二远程对象的类兼容的代理,在运行时生成适当的代理,并使用所述生成的代理来调用所述第二远程对象。4.根据权利要求3所述的方法,其中在运行时生成适当的代理包括在运行时调用Java RMI编译器。5.根据权利要求2所述的方法,其中确定是否存在兼容的代理包括确定是否存在用于所述第二远程对象类类型的代理,以及如果不存在用于所述第二远程对象类类型的代理,则确定与所述第二远程对象兼容的最相关类类型并确定是否存在用于所述最相关的兼容类类型的代理。6.根据权利要求1所述的方法,其中所述代理包括Java stub文件。7.根据权利要求1所述的方法,其中使用所述串行化字节流中包含的信息来确定所述第二远程对象的类类型包括使用所述串行化字节流中的typeID信息。8.根据权利要求7所述的方法,还包括使用所述对象的继承和接口来确定所述第二远程对象的类类型。9.一种用于执行远程过程的计算机程序产品,所述计算机程序产品包括一组存储在计算机可读介质上的计算机可执行指令,所述计算机程序产品包括存储在客户端系统上、用于确定是否存在从服务器端的系统接收的远程对象引用的计算机代码装置;用于确定是否在所述客户端系统上识别了所述远程对象引用的计算机代码装置;响应于确定没有识别所述远程对象引用,用于在运行时确定或生成用于所述远程对象的代理的计算机代码装置;以及用于使用所述代理从所述客户端系统调用所述远程对象的计算机代码装置。10.根据权利要求9所述的计算机程序产品,其中所述用于确定是否识别了所述远程对象引用的代码装置包括用于确定所述远程对象引用的类类型的代码装置。11.根据权利要求10所述的计算机程序产品,其中所述用于确定或生...

【专利技术属性】
技术研发人员:斯科特布劳斯萨德刘英埃杜瓦多斯普林
申请(专利权)人:国际商业机器公司
类型:发明
国别省市:US[美国]

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1