首页> 中国专利> 支持面向对象编程语言环境中对对象的延迟引用的系统和方法

支持面向对象编程语言环境中对对象的延迟引用的系统和方法

摘要

一种能够支持面向对象编程语言环境中的延迟引用的系统和方法。所述面向对象编程语言环境能够包括能够提供对将在未来时间可用的对象的延迟引用的接口。此外,在收到来自调用器基于延迟引用的获取对象的请求之后,所述接口能够在所述对象可用时,将所述对象返回给调用器,或者在所述对象目前不可用和/或当所述对象将永不可用时,能够向调用器说明。

著录项

  • 公开/公告号CN104137067A

    专利类型发明专利

  • 公开/公告日2014-11-05

    原文格式PDF

  • 申请/专利权人 甲骨文国际公司;

    申请/专利号CN201380011370.9

  • 发明设计人 B·奥利弗;

    申请日2013-05-02

  • 分类号G06F9/44(20060101);

  • 代理机构中国国际贸易促进委员会专利商标事务所;

  • 代理人袁玥

  • 地址 美国加利福尼亚

  • 入库时间 2023-12-17 02:19:08

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2017-05-24

    授权

    授权

  • 2014-12-10

    实质审查的生效 IPC(主分类):G06F9/44 申请日:20130502

    实质审查的生效

  • 2014-11-05

    公开

    公开

说明书

版权声明

本专利文献中的一部分公开内容包含受版权保护的素材。版权所有 人不反对任何人影印再现专利文献或专利公开,因为专利文献或专利公 开出现在可公开获得的美国专利商标局文件或档案中,不过保留其它方 面的所有版权。

技术领域

本发明主要涉及计算机系统和软件,更具体地,涉及支持面向对象 编程语言环境。

背景技术

面向对象编程(OOP)可用于设计基于对象的应用程序和计算机程 序,所述对象通常是类的实例。OOP技术可包括诸如数据抽象、封装、 消息收发、模块化、多态性和继承之类的特征。可具有截然不同的任务 或职责的各个对象能够接收消息、处理数据,和把消息发送给其它对象。 另外,这些对象可紧密地与各种动作或方法关联。这是本发明的实施例 意图致力于的大致范围。

发明内容

这里描述的是一种能够支持面向对象编程语言环境中的延迟引用的 系统和方法。面向对象编程语言环境可包括能够提供对将在未来某个时 间可用的对象的延迟引用的接口。此外,在收到来自调用器基于延迟引 用的获取对象的请求之后,所述接口可在所述对象可用时,将所述对象 返回给调用器,或者在所述对象目前不可用和/或当所述对象将永不可用 时,能够向调用器说明。

另外,这里描述的是一种用于支持在一个或多个微处理器上运行的 面向对象编程语言环境中的延迟引用的系统。所述系统包括用于提供对 将在未来某个时间可用的对象的延迟引用的装置,和用于在收到来自调 用器基于延迟引用的获取对象的请求之后,进行下述之一的装置:当所 述对象可用时,将所述对象返回给调用器,和当所述对象目前不可用和/ 或当所述对象将永不可用时,向调用器说明。

此外,这里描述的是一种支持面向对象编程语言环境中的延迟引用 的系统。所述系统包括接口,所述接口被配置成提供对将在未来某个时 间可用的对象的延迟引用,和调用器,所述调用器被配置成基于延迟引 用向所述接口发送请求,以获取对象。在收到来自调用器的请求之后, 所述接口还被配置成进行下述之一:当所述对象可用时,把所述对象返 回给调用器,和当所述对象目前不可用和/或当所述对象永不可用时,向 调用器说明。

附图说明

图1表示按照本发明的多个实施例,支持面向对象编程(OOP)环 境中的延迟引用的示例。

图2表示按照本发明的实施例,用于定义OOP环境中的延迟类型的 示例性接口的示例。

图3表示按照本发明的一个实施例,用于从服务器获得管理豆(bean) 信息的示例性软件伪代码的示例。

图4图解说明按照本发明的实施例,用于支持OOP环境中的延迟引 用的示例性流程图。

图5图解说明按照本发明的实施例,用于支持OOP环境中的延迟引 用的示例性系统。

图6图解说明表示按照本发明的实施例的特征的功能方框图。

具体实施方式

这里描述的是能够支持面向对象编程(OOP)环境中的延迟引用的 系统和方法。

引用对象可封装对另一个对象的引用,或者说所指对象,以致引用 本身能够如所指对象一样被检查和操作。延迟引用表示可以还不存在, 可以不可用,或者将只在未来某个时刻变得可用的所指对象。

图1表示按照本发明的多个实施例,支持OOP环境中的延迟引用的 示例。如图1中所示,OOP环境100,例如JAVA编程环境,能够提供 对未来对象103的延迟引用101。延迟引用101能够基于接口110,接口 110可定义OOP环境100中的延迟类型。未来对象103可以是将在未来 某个时间可用的对象,例如,服务器、成员、连接、Mbean、值和条件。

在OOP环境100中,调用器102可发送请求,例如get方法,以基 于延迟引用101获得未来对象103。在get方法被调用之前,可不开始解 析所指对象,或者未来对象102的计算。另一方面,立即发生延迟引用 101向调用器102的返回。

按照本发明的多个实施例,调用器102可在包括公知的硬件元件, 比如处理器、存储器和通信接口的通用计算机上实现。当处理器执行软 件程序的指令时,实现调用器102。

在收到来自调用器102的请求之后,OOP环境100可向调用器102 提供未来对象103目前不可用的指示。作为替代地,一旦未来对象103 变得可用,OOP环境就可把未来对象103返回给调用器102。

按照本发明的多个实施例,在等待未来对象102变得可用的期间, OOP环境可避免阻塞调用器102用于请求未来对象102的调用线程104。 这种异步模型是有益的,因为调用线程104能够负责其它重要的任务。

此外,OOP环境100可利用一个或多个帮助器120来扩展延迟引用 101的功能。另外,OOP环境100允许把另一个延迟引用嵌套在延迟引 用101中。

按照本发明的多个实施例,OOP环境可提供能够表示已被请求的异 步操作的结果的未来类定义,例如,Java Future类。

通过利用未来对象102的延迟引用101,OOP环境能够避免与JAVA  Future类相关的各种问题。例如,对值进行解析的计算可在未来类被创 建时开始。此外,未来类可能迫使调用线程等待。例如,JAVA Future 类可以提供在值被产生之前必须阻塞调用线程以始终等待的Future.get ()方法,或者阻塞调用线程规定时间量的Future.get(time)方法。这 两种方法都迫使开发者编写非异步的阻塞算法。

按照本发明的各个实施例,延迟引用102可作为软件包的一部分, 比如作为甲骨文一致孵化器(Oracle Coherence Incubator Common)中 的com.oracle.tools.deferred包的一部分被启动,或者在用于更广阔用途 的独立jar中被启动。

另外,OOP环境100可提供当延迟对象变得可用时,通知应用的机 制。这允许开发者定义一个或多个延迟引用,以及当底层对象变得可用 时要被通知的回调。从而,当对象不再“延迟”时,底层的面向对象编程 语言可通知应用开发者。

图2表示按照本发明的实施例,用于定义OOP环境中的延迟类型的 示例性接口的示例。如图2中所示,可以使用或实现接口Deferred,以 提供对将在未来某个时间可用的对象的延迟引用(第1行)。接口Deferred 包括可返回延迟引用的get()方法(第3行),和能够在所指对象并未 实际存在的情况下,确定所指对象的类的getDeferredclass()方法(第 5行)。

当调用器调用get()方法时,面向对象编程语言环境可以在等待未 来对象变得可用的期间,避免阻塞调用线程。不同于等待产生结果值的 JAVA Future类,接口Deferred中的get()方法立即返回对未来对象 的引用。

此外,如果对象目前不可用,那么OOP环境可以返回NULL值或 抛出运行时异常。另外,如果对象可以永不可用,那么面向对象编程语 言环境可以抛出对象不可用异常(例如,ObjectNotAvailableException)。

按照本发明的多个实施例,OOP环境可以提供不同类型的延迟帮助 器,以用于扩展延迟引用的功能。

例如,下面所示的延迟帮助器可以确保调用器为对象变得可用而等 待一段时间,或者在一段时间之后重试。

Deferred<T>deferred=…

Deferred<T>ensured=new Ensured(deferred,timeout);

在OOP环境中,确保的Deferred类型可利用为Deferred类型中的 对象变得可用而等待一段时间的延迟实现(包装)。这里,可以确保任何 Deferred类型。确保的Deferred类型允许嵌套的Deferred类型,而不需 要嵌套的超时。

此外,Deferred类型不实现阻塞语义,而只有Ensured类型才实现 阻塞语义。确保的Deferred允许具有可定制语义的“等待”,而Deferred 类型可以决不阻塞调用线程。例如,当认为所指对象永不可用时,Deferred 类型可抛出(运行时)ObjectNotAvailableExceptions。

如下所示,OOP环境可通过等待最大(默认)时间期,解析延迟值, 或者在默认时间期之后重试。

public<T>T ensure(Deferred<T>deferred);

另外,面向对象编程语言环境允许调用器指定明确的最大超时。

public<T>T ensure(Deferred<T>deferred,long duration, TimeUnit unit);

按照本发明的实施例,OOP环境可支持基于延迟帮助器的概念的延 迟方法调用。

例如,如下所示,可以创建接口和/或对象的记录动态代理。

public<T>T invoking(T t);

从而,OOP环境可获得Deferred类型的“记录”动态代理deferred。

public<T>T invoking(Deferred<T>deferred);

另外,OOP环境可以获得如下所示的表示最后记录的调用的 Deferred类型。

public<T>Deferred<T>eventually(T t);

最后,OOP环境可获得表示最后记录的对list.size的调用的延迟类 型Deferred<Integer>。

Deferred<Integer>defSize=eventually(invoking(list).size());

从而,涉及对象的最后记录的动态代理的值可作为延迟值被返回给 调用器,例如,延迟整数可代表在未来某个时间的列表的大小。另外, 延迟引用可被嵌套在另一个延迟引用中。

另外,如下所示,OOP环境可支持方法链接。

Deferred<Boolean>defHasElements=eventually(invoking(list).getE  numeration().hasElements());

另外,面向对象编程语言环境可支持调用延迟类型的延迟方法。

Deferred<Integer>defSize=eventually(invoking(defClusterMBean).g  etSize());

在分布式数据环境中,延迟引用能够是有益的。例如,代替利用多 个尝试块,通过简单地调用以下语句,以确保分布式数据环境中的虚拟 机和Mbean服务器可用,简单的试验就可确保群集达到一定大小。

assertthat(eventually(invoking(defClusterMbean).getSize()),is(4))

此外,OOP环境可提供各种其它延迟帮助器。例如,可以存在能够 高速缓存成功的get()请求的结果的延迟帮助器。

public<T>Deferred<T>cached(Deferred<T>deferred);

并且,延迟帮助器可把值T转换成Deferred<T>。

public<T>Deferred<T>deferred(T t);

另外,OOP环境可获得延迟类型的Java Future表示。

public<T>Future<T>future(Deferred<T>deferred);

例子

图3表示按照本发明的实施例,从服务器获得管理豆信息的示例性 软件伪代码的示例。如图3中所示,在根据对象的名称objectName取回 相关的管理豆(bean)信息,例如,MBeanInfo实例(第6行)之前, 调用器可建立与服务器,例如,JMX MBeanServer实例的连接(第5行)。

在从服务器获得管理豆(bean)信息之前,OOP环境可能需要确保 各种条件被满足。例如,在能够创建JMX MBeanServer之前,可能需 要启动JMX MBeanServer实例运行于其上的虚拟机,例如,JAVA虚拟 机(JVM)。此外,例如MbeanServerConnection的服务器连接可能需 要对于已登记的MBean可用。另外,面向对象编程语言环境还可能需要 处理各种其它异常,比如IOException、InstanceNotFoundException、 ClassCastException。

按照本发明的多个实施例,面向对象编程语言环境可利用如下所示 的尝试块来确保这些条件可被满足。

利用尝试块的以上方法可能导致不同的问题,例如,线程应休眠多 长时间,和如何允许尝试块更早地失败或成功。另外,当存在过多的重 试循环时,代码会变得过于复杂和难以理解。

利用如在图2中定义的确保延迟类型,可如下创建 DeferredJMXConnector实例。

Deferred<JMXConnector>defJMXConnector=new  DeferredJMXConnector(jmxConnectionURL,env)

从而,可以创建延迟MBeanInfo。

Deferred<MBeanInfo>defMBeanInfo=new DeferredMBeanInfo (defJMXConnector,objectName)

从而,用于从服务器获得管理豆信息的代码可被简单地实现成:

MBeanInfo info=ensure(defMbeanInfo);

或者

MBeanInfo info=ensure(defMbeanInfo,2,TimeUnit.MINUTES)。

如上所示,利用确保延迟类型,确保延迟类型可把“等待”逻辑隔离 成把延迟类型作为参数的确保方法。此外,确保延迟类型允许嵌套的延 迟类型,而没有嵌套的超时。

在如下所示的例子中,OOP环境可以声明服务正在进行中。

assertThat(eventually(invoking(CacheFactory.getService(“some-ser  vice”).isRunning()),is(true));

另外,OOP环境可声明两个命名的高速缓冲存储器,cacheA和 cacheB相等。

NamedCache cacheA=…;

NamedCache cacheB=…;

assertThat(eventually(cacheA),is(equalTo(cacheB)));

图4图解说明按照本发明的实施例,用于支持OOP环境中的延迟引 用的示例性流程图。如图4中所示,在步骤401,OOP环境可提供对将 在未来某个时间可用的对象的延迟引用。此外,在步骤402,在收到来自 调用器基于延迟引用的获取对象的请求之后,当所述对象可用时,OOP 环境可把所述对象返回给调用器,或者当所述对象目前不可用和/或当所 述对象永不可用时,可向调用器说明相应情况。

图5图解说明按照本发明的实施例,用于支持OOP环境中的延迟引 用的示例性系统。如图5中所示,系统500被表示成包含接口510和调 用器502。调用器502可基于延迟引用向接口510发送获取对象的请求。 接口510可提供对将在未来某个时间可用的对象的延迟引用,并且在收 到来自调用器的请求之后,所述接口可进行下述之一:当所述对象可用 时,把所述对象返回给调用器,和当所述对象目前不可用和/或当所述对 象将永不可用时,向调用器说明。

在等待对象变得可用的期间,接口510能够避免阻塞调用器502基 于延迟引用的用于请求对象的调用线程。接口510还能够在对象变得可 用之前,向调用器502告知对象与哪个类关联。接口510还能够在对象 目前不可用时,抛出运行时异常或者返回NULL值。如果对象将永不可 用,接口510还能够抛出对象不可用异常。接口510可允许把延迟引用 嵌套在另一个延迟引用中。

系统510还可包括帮助器520。帮助器520能够确保调用器502为对 象变得可用而等待最大一段时间。帮助器520还能够根据与对象相关的 类定义,创建对对象的延迟引用。帮助器520还能够获得对象的记录动 态代理,并利用对象的记录动态代理,提供最后记录的调用的延迟表示。

按照一个实施例,公开了一种用于支持在一个或多个微处理器上运 行的面向对象编程语言环境中的延迟引用的系统。所述系统包括用于提 供对将在未来某个时间可用的对象的延迟引用的装置,和用于在收到来 自调用器基于延迟引用的获取对象的请求之后,进行下述之一的装置: 当所述对象可用时,把所述对象返回给调用器,和当所述对象目前不可 用和/或当所述对象将永不可用时,向调用器说明。

优选地,所述系统还包括用于在等待对象变得可用的期间,用于避 免阻塞调用器基于延迟引用用于请求对象的调用线程的装置。

优选地,所述系统还包括用于在对象变得可用之前,向调用器告知 对象与哪个类关联的装置。

优选地,所述系统还包括用于当对象目前不可用时,抛出运行时异 常或者返回NULL值的装置。

优选地,所述系统还包括用于如果对象将永不可用,抛出对象不可 用异常的装置。

优选地,所述系统还包括用于确保调用器为对象变得可用而等待最 大一段时间期的装置。

优选地,所述系统还包括用于根据与对象相关的类定义,创建对对 象的延迟引用的装置。

优选地,所述系统还包括用于将延迟引用嵌套在另一个延迟引用中 的装置。

优选地,所述系统还包括用于获得对象的记录动态代理的装置,和 用于利用对象的记录动态代理来提供最后记录的调用的延迟表示的装 置。

优选地,所述系统还包括用于提供当延迟对象变得可用时,通知应 用的机制的装置。

按照一个实施例,公开了一种用于支持面向对象编程语言环境中的 延迟引用的系统。所述系统包括接口,所述接口被配置成提供对将在未 来某个时间可用的对象的延迟引用,和调用器,所述调用器被配置成基 于延迟引用向所述接口发送获取对象的请求。在收到来自调用器的请求 之后,所述接口还被配置成进行下述之一:当所述对象可用时,把所述 对象返回给调用器,和在当所述对象目前不可用和当所述对象将永不可 用时中至少一种情况下,向调用器说明。

优选地,所述接口能够在等待对象变得可用的期间,避免阻塞调用 器基于延迟引用用于请求对象的调用线程。

优选地,所述接口能够在对象变得可用之前,向调用器告知对象与 哪个类关联。

优选地,在对象目前不可用时,所述接口能够抛出运行时异常或者 返回NULL值。

优选地,如果对象将永不可用,所述接口能够抛出对象不可用异常。

优选地,所述系统还包括能够确保调用器为对象变得可用而等待最 大一段时间的帮助器。

优选地,所述系统还包括能够根据与对象相关的类定义,创建对对 象的延迟引用的帮助器。

优选地,所述接口允许把延迟引用嵌套在另一个延迟引用中。

优选地,所述系统还包括能够获得对象的记录动态代理,并利用对 象的记录动态代理,提供最后记录的调用的延迟表示的帮助器。

图6图解说明表示本发明的特征的功能方框图。本发明的特征可被 实现成用于支持面向对象编程语言环境中的延迟引用的系统600。系统 600包括一个或多个微处理器610,和运行于所述一个或多个微处理器 610上的接口110。所述一个或多个微处理器610包括:提供单元620, 所述提供单元620被配置成提供对将在未来某个时间可用的对象的延迟 引用;和执行单元630,所述执行单元630被配置成在收到来自调用器基 于所述延迟引用的获取对象的请求之后,执行下述之一:当所述对象可 用时,把所述对象返回给调用器,和当所述对象目前不可用和/或当所述 对象将永不可用时,向调用器说明。执行单元630包括返回单元631和 说明单元632。返回单元631被配置成当所述对象可用时,把所述对象返 回给调用器。说明单元632被配置成在当所述对象目前不可用时和当所 述对象将永不可用时中至少一种情况下,向调用器说明。

通过利用按照本公开的教导编程的一个或多个常规的通用或专用数 字计算机、计算装置、机器、或微处理器,包括一个或多个微处理器、 存储器和/或计算机可读存储介质,可以便利地实现本发明。有经验的程 序员能够根据本公开的教导容易地编写适当的软件编码,这对软件领域 的技术人员来说是显而易见的。

在一些实施例中,本发明包括计算机程序产品,所述计算机程序产 品是其上/其中保存有可用于对计算机编程,以执行本发明的任意处理的 指令的存储介质或者计算机可读介质。所述存储介质可包括(但不限于) 任意种类的盘(包括软盘、光盘、DVD、CD-ROM、微驱动器和磁光盘)、 ROM、RAM、EPROM、EEPROM、DRAM、VRAM、闪存装置、磁 卡或光卡、纳米系统(包括分子存储器IC)、或者任何种类的适合于保 存指令和/或数据的介质或装置。

出于举例和说明的目的,提供了本发明的上述说明。上述说明并不 是详尽的,也不旨在将本发明局限于公开的具体形式。对本领域的技术 人员来说,许多修改和变化是明显的。选择和说明实施例是为了最好地 解释本发明的原理及其实际应用,从而使本领域的其他技术人员能够理 解本发明的多个实施例和适合于预期的特定应用的各种修改。本发明的 范围由以下权利要求及其等同物限定。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号