首页> 中国专利> 在托管应用程序进程中引发异步行为变化的方法和系统

在托管应用程序进程中引发异步行为变化的方法和系统

摘要

本文介绍了一种在托管应用程序进程中引发异步行为变化的方法和系统。执行一个应用程序管理器进程。执行一个托管应用程序进程。执行至少一个应用程序,其被提供为在托管代码平台控制下的面向对象程序代码。托管应用程序进程与应用程序管理器进程逻辑地进行通信。识别一个或多个对应于应通知对象的构造器,所述应通知对象被提供为面向对象程序代码。每个构造器在托管应用程序进程中的列表中保持对实例化应通知对象的跟踪。将变化请求广播到托管应用程序进程。对每个识别的构造器所跟踪的应通知对象进行遍历以在所述托管应用程序进程中实现行为变化。

著录项

  • 公开/公告号CN1797346A

    专利类型发明专利

  • 公开/公告日2006-07-05

    原文格式PDF

  • 申请/专利权人 太阳微系统公司;

    申请/专利号CN200410102419.4

  • 发明设计人 N·弗雷斯科;

    申请日2004-12-22

  • 分类号G06F9/46(20060101);G06F9/44(20060101);

  • 代理机构11245 北京纪凯知识产权代理有限公司;

  • 代理人赵蓉民

  • 地址 美国加利福尼亚州

  • 入库时间 2023-12-17 17:25:12

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2007-10-17

    授权

    授权

  • 2006-08-30

    实质审查的生效

    实质审查的生效

  • 2006-07-05

    公开

    公开

说明书

技术领域

本发明一般涉及异步行为变化,特别是涉及一种在托管应用程序进程中引发异步行为变化的方法和系统。

背景技术

在微处理器设计和组件集成中,近来的发展已经使广泛的设备能够提供日益复杂的功能和“软”特征。软特征包括对设备的运行进行增强和定制的软件应用程序。这些设备包括标准的计算设备,例如桌面计算机和便携式计算机,可移动的计算设备例如个人数据助理,以及消费设备例如蜂窝电话、消息呼机、游戏控制台和机顶盒(STB)。现在,大多数设备包括一个操作系统以支持软特征和其他的扩展。

由这些可软件升级的设备提供的增强功能也已经造成了某些用户期望。通常,用户并不了解技术,并且不能容忍由体系结构难题引起的性能折衷,例如缓慢的或者不一致的应用程序性能。同样地,用户通常期望能够访问大量的独立的应用程序,这些应用程序在系统级是通过多任务来实现的。普遍可用的软件应用程序通过跨多个平台的一致性和增强呈现来保证了用户的良好感受。然而,对于软件开发者而言,为异构的计算平台开发软件应用程序必然伴有增加的开发费用和持续的支持以及对每个所支持的体系结构的升级承诺。

托管代码平台通过引出机器无关和体系结构中立的操作环境,为寻求多平台支持的软件开发者提供了一个解决方案。托管代码平台包括和用户应用程序一样由操作系统执行的编程语言编译器和解释器,但是它们提供了兼容应用程序可在其中运行的虚拟运行时环境。例如,用Java编程语言编写的应用程序和Java虚拟机(JVM)结合时,可以在独立于机器特定的环境和配置设置的异构计算机系统上执行。在P.van der Linden,“Just Java”,Ch.1,Sun Microsystems,Inc.(2d ed.1997)中对Java编程语言的概述进行了描述,在此将该文献中所公开的内容通过引用的形式并入。JVM是整个Java运行环境的关键组件,可将其移植到所有的计算设备,包括存储受限的消费设备。

托管代码平台一般被设计为用于单个应用程序实例的单调执行。托管代码平台和一个应用程序实例的组合形成了应用程序进程。因此,可以执行多个应用程序进程以模拟多个独立应用程序的多任务行为。每个“多任务”的应用程序在一个单独的托管代码平台下执行,该托管代码平台提供分离的虚拟运行时环境。而每个托管代码平台又在底层操作系统的控制下在单独的进程空间中执行。可以使用操作系统提供的工具实现对托管代码平台的有限控制,例如进程间通信(IPC)和相关机制例如信号处理器,但是通常这类工具并不能用于控制在托管代码平台下执行的应用程序。

应用程序控制不可用有几个原因。首先,每个应用程序可以源自不同的源并且可以使用不同的应用程序模型、编程语言和运行假设来编程。同样,每个应用程序在托管代码平台提供的虚拟运行时环境内是隔离的,而且必须使用在运行时环境内运行的扩展库函数把进程间控制明确地编入应用程序中。这种程序扩展通常很慢,并且潜在地引入兼容性和互操作性的问题。而且,在简单性、健壮性和效率方面,隔离的应用程序执行通常优于协作的应用程序执行。

尽管如此,通常还是使用一个应用程序管理器来基于用户请求对执行于某种设备(尤其是消费设备)上的多个应用程序进程提供最小程度的中央控制。但是,所述控制一般限于提供对应用程序的启动和终止的大粒度控制。由于应用程序控制工具不可用,因而也就不支持对应用程序级的行为特征的细粒度控制。例如,应用程序属性或者用户界面的外观和感觉可能需要由运行时环境动态改变,或者需要确保一致的外观和用户体验。但是,应用程序间控制工具的缺乏阻碍了这种运行时改变的进行。

因此,需要一种提供对隔离的应用程序进程的动态中央控制的方法。优选地,这种方法会影响每个应用程序进程的异步变化而不会影响分离的应用程序的执行。而且,这种方法会进一步提供灵活的机制以传达行为变化,而在无显式协作的情况下使每个应用程序进程继续进行。

发明内容

应用程序管理器和托管代码平台在应用程序框架中执行,该框架支持多个独立的隔离用户应用程序的产生。托管代码平台包括一个运行时系统进程例如虚拟机,以解释定义兼容应用程序的机器可移植(machine-portable)代码。每个执行应用程序和运行时系统进程对构成一个托管应用程序进程。该应用程序管理器通过一个实现进程间通信(IPC)机制的监听器例如专用控制线程异步地访问该运行时系统。该监听器的一个实例驻留在每个托管应用程序进程的地址空间中。应用程序管理器通过“句柄”可以访问该监听器。例如,TCP/IP可以被用作应用程序管理器和托管应用程序进程之间的IPC机制,而该句柄被指定为TCP端口号。运行时系统进程上下文包括一组应通知对象(notifiable object),其被用于把行为变化透明地强加于在运行时系统进程中执行的应用程序。合适的托管代码平台和托管应用程序进程的一个例子是Java运行环境和Java虚拟机(JVM)体系结构,其由加利福尼亚州帕洛阿尔托的太阳微系统公司特许授权。

一个实施例提供了一种在托管应用程序进程中引发异步行为变化的方法和系统。执行一个应用程序管理器进程。执行一个托管应用程序进程。执行至少一个应用程序,该应用程序被提供为在托管代码平台控制下的面向对象程序代码。所述托管应用程序进程与所述应用程序管理器进程逻辑地进行通信。识别与应通知对象的类相对应的一个或多个构造器。执行时,每个这样的构造器把所关心的新构造的应通知对象放在列表上。将变化请求广播到托管应用程序进程。由构造器透明跟踪的应通知对象被遍历以在所述的托管应用程序进程中实现行为变化。

对于在作为托管应用程序进程一部分的运行时系统进程中执行的非协作的应用程序,行为变化被透明地执行。利用所述监听器和被透明地跟踪的应通知对象,可以通过在托管应用程序进程上执行的应用程序管理器实现行为变化,其独立于且不需要分离的执行应用程序的显式协作。

对于本领域的技术人员,根据下面的详细描述,本发明的其他实施例将变得更加清楚,其中通过对预计用来实现本发明的最佳模式进行图解说明的方式描述了本发明的实施例。正如将实现的,本发明能够有其他的、不同的实施例,并且在各个明显的方面,它具有若干细节可以修改,但所有的这些都不偏离本发明的精神和范围。因此,附图和详细描述将被认为是示意性的而非限制性的。

附图说明

图1是一个功能框图,作为例子示出了在多种异构设备上实现的运行时环境。

图2是一个框图,示出了一种根据本发明的在一个托管应用程序进程中引发异步行为变化的系统。

图3A~图3C是功能框图,作为例子示出了在一个应用程序管理器和多个托管应用程序进程之间的异步控制和数据交换。

图4是一个流程图,示出了一种根据本发明的在一个托管应用程序进程中引发异步行为变化的方法。

图5是一个流程图,示出了用于执行一个托管应用程序进程的例程,所述托管应用程序进程用于图4的方法中。

图6是一个流程图,作为例子示出了用于处理一个被引发的异步行为变化的例程,所述变化用于图5的例程中。

具体实施方式

发明概述

图1是一个功能框图10,作为例子示出了在多种异构设备11上实现的运行时环境(RTE)14、22、24、26。每个异构设备11提供了一个在运行时环境14、22、24、26中执行的托管代码平台,例如Java运行环境。一个或多个的应用程序(App)27可以在运行时环境14、22、24、26中执行,且每个执行应用程序27和运行时环境14、22、24、26对构成一个托管应用程序进程28,下面参照图2对其进行进一步的描述。异构设备11包括(非排除性地)一个客户计算机系统13,例如桌面或者便携式计算机系统。每个客户13可操作地连接到存储设备15并保存一组类16和类库17,其分别定义了代码模块及这些模块的可共享的集合,其中所述代码模块指定了数据结构和操作数据的方法集。异构设备11还包括可移动的计算设备(包括个人数据助理21)和消费设备(例如移动电话23和机顶盒(STB)25)。最后,服务器18可操作地连接到存储设备19,其中保存了全局共享的类库20。每个异构设备11可以通过网络12接口,网络12包括传统的硬连线网络配置和无线网络配置。其他类型的异构设备11和各种网络配置、布局和拓扑是可能的。

每个异构设备11包括一个操作系统,其管理资源、提供对外围设备的访问、分配存储资源,并控制程序的执行和终止。在一个实施例中,每个操作系统都支持一种进程克隆机制,其通过克隆所能指定的进程的存储空间来创建多个独立的隔离的用户应用程序,正如下列普通转让的待审美国专利申请中所描述的:申请日2003年12月22日、名称“System And Method for Dynamic Preloading Of Classes ThroughMemory Space Cloning Of A Master Runtime System Process”、序列号10/745023;申请日2003年12月22日、名称“System And Method forProviding Precompiled Code Through Memory Space Cloning Of A MasterRuntime System Process”、序列号10/745020;申请日2003年12月22日、名称“System And Method for Eliminating Static InitializationOverhead By Memory Space Cloning Of A Master Runtime SystemProcess”、序列号10/745021;这些申请所公开的内容在此通过引用并入。适合在本发明中使用的进程克隆机制的一个例子是由Unix和Linux操作系统提供的fork()系统调用,例如在M.J.Bach,“The Design Of TheUnix Operating System”,Ch.7,Bell Tele.Labs.,Inc.(1986)中所描述的,其在此通过引用并入。调用fork()系统调用的进程被称为父进程,而新创建的进程被称为子进程。操作系统为子进程分配一个单独的进程标识符,子进程作为单独的进程执行。操作系统通过把父进程的存储空间复制到子进程的存储空间,也创建了父进程的上下文的逻辑拷贝。在fork()系统调用的一个写时拷贝的变体中,操作系统只把引用复制到存储空间,而且实际上推迟复制单个的存储空间段直到,并且如果,子进程试图修改父进程上下文的引用数据。写时拷贝的fork()系统调用比非写时拷贝的fork()系统调用更快,并隐式地在父进程和子进程之间共享任何没有被写入的数据。

引发异步行为变化的系统

图2是一个框图,其示出了根据本发明的、用于在托管应用程序进程34中引发异步行为变化的系统30。系统30包括一个运行时环境,其执行一个应用程序管理器31和一个或多个托管应用程序进程32。托管应用程序进程32包括一个托管代码平台(例如Java虚拟机),其解释机器可移植代码,该代码定义了兼容应用程序和一个或多个执行应用程序33。存储设备39永久地存储单独的类40和类库42,其形成整个核心托管代码平台。作为示例,现参照Java运行环境来描述该系统,虽然也可以使用其他形式的托管代码平台,它们执行的应用程序优选使用面向对象的编程语言(例如Java编程语言)编写。

应用程序管理器31提供一个用户界面,用户通过该用户界面可选择和执行单独的应用程序。运行时,应用程序管理器31和托管应用程序进程32通过监听器34通信地接口。应用程序管理器31通过监听器34和一个或多个应通知对象35的组合间接地在应用程序33中引发行为变化,应通知对象35在托管应用程序进程上下文中实例化,并且由它们的构造器在列表中透明地跟踪。

监听器34从应用程序管理器31中提供一个逻辑信道,通过该逻辑信道,行为变化可以在消息(“Msg”)38中被异步广播到一个或多个的托管应用程序进程32。应用程序管理器31在应用程序启动列表44中记录所启动的托管应用程序进程32。当发起一个行为变化时,应用程序管理器31遍历应用程序启动列表44,并把相同的消息38发送给所有创建的托管应用程序进程32的监听器34。消息38识别该变化请求的性质,例如改变应用程序属性或者用户界面的外观和感觉。其他类型的变化请求也是可能的。

应用程序管理器31通过在监听器34上定义的句柄36访问每个托管应用程序进程32。应用程序管理器31在监听器句柄列表45中记录监听器句柄36。监听器34驻留在托管应用程序进程32的地址空间内并包括一个专用的控制线程,直到应用程序管理器31请求一个变化时才激活该线程,如下面参照图5进一步描述的。在所描述的实施例中,监听器34是通过IPC机制(例如TCP)提供的,并且包括一个被定义为套接字(例如TCP套接字)的句柄36,其可被指定为托管应用程序进程32上的专用端口号。

应通知对象35在托管应用程序进程32的托管代码平台的上下文中实例化。应通知对象35的构造器41、43在类40中定义,而类定义在类库42中。托管应用程序进程32使用应通知对象35类型的构造器41、43,以把每个实例化的应通知对象35放入托管应用程序进程32的本地列表46中。在类40、42中设计这些构造器41、43以包括实现这种跟踪的必要功能。类40、42继续满足编程模型的期望,而且补充额外的跟踪和变化功能。例如,应用程序33经常使用某些公知的库,而且定义这些库所需的源代码的实现一般被指定为系统类,而不是应用程序类。因此,可以编写这些库,既提供期望的功能,又包括在列表46中跟踪应通知对象35的功能,从而允许行为变化相对于应用程序执行透明地发生。在另一个的实施例中,每个类40、42也定义一个析构器或完成器(finalizer),其能够为垃圾回收检测应通知对象35的资格(eligibility)。然后,析构器方法能够把应通知对象35从各自的跟踪列表中移出,因为应通知对象35将被垃圾回收器回收。

为了发起一个行为变化,应用程序管理器31发送一个消息38,该消息识别实现行为变化所需的应通知对象35的类型。然后,监听器34遍历在本地列表46中所跟踪的识别类型的已分配的应通知对象35,并代表应用程序管理器31透明地实现该行为变化。

异步控制和数据交换

图3A~图3C是功能框图60、80、90,作为例子示出了一个应用程序管理器(App Mgr)62和多个托管应用程序进程(MAP)63、65、67之间的异步控制和数据交换。应用程序管理器62和托管应用程序进程63、65、67全都执行与运行时环境61内。参见图3A,每个托管应用程序进程63、65、67使用对应于应通知对象类型的构造器69来把应通知对象跟踪进一个本地列表。

然后参见图3B,应用程序管理器62经由异步“广播”71将消息38传送给每个托管应用程序进程63、65、67,以开始引发行为变化,其被在每个托管应用程序进程63、65、67中实现的监听器(“L”)64、66、68接收。广播71有两个功能。第一,广播71通知每个托管应用程序进程63、65、67:应用程序管理器62正在请求一个行为变化。第二,广播71识别所请求的行为变化类型。作为示例,这些变化可能会影响每个托管应用程序进程63、65、67的属性或外观以及感觉特征。其他类型的变化也是可能的。

最后参见图3C,单独的托管应用程序进程63、65、67实现了所请求的行为变化。每个托管应用程序进程63、65、67采取的动作类型取决于定义每个应通知对象69的代码。监听器64、66、68负责在每个托管应用程序进程63、65、67的相应地址空间中查找每组被跟踪的应通知对象并遍历应通知对象以实现行为变化。其他类型的动作是可能的。

引发异步行为变化的方法

图4是一个流程图,示出了根据本发明的、在一个托管的应用程序进程中引发异步行为变化的方法90。方法100被描述成一系列的进程操作或步骤,例如其可由图2的运行时环境31或者其他组件来执行。

初始时,装载应用程序管理器31(框91)。当开始一个被引发的行为变化时,应用程序管理器31识别实现行为变化所需的应通知对象35的类型(框92)。然后,应用程序管理器31通过分别定义在每个托管应用程序进程32上的句柄36调用所有已创建的托管应用程序进程32的监听器34(框93)。然后,描述行为变化的消息38被广播到托管应用程序进程32(框94)。处理无限地继续下去直到应用程序管理器31被终止时为止。

执行托管应用程序进程的例程

图5是一个流程图,其示出了用于执行托管应用程序进程32的例程100,托管应用程序进程32在图4的方法90中使用。这个例程的一个目的是发起一个异步行为变化以响应从应用程序管理器31中收到的变化请求。

初始时,由托管应用程序进程32的托管代码平台执行应用程序33(框101)。创建句柄36,并在监听句柄36的托管应用程序进程32中启动一个专用的控制线程(框102)。该控制线程立即进入不活动的休眠模式(框103)。当从应用程序管理器31接收到变化请求时(框104),该控制线程被唤醒(框105)并处理一个被引发的行为变化(框106),如下面参照图6进一步描述的。处理无限地继续下去直到应用程序管理器31被终止时为止。

处理变化的例程

图6是一个流程图,作为例子示出了例程110,其用于处理一个被引发的异步行为变化,该变化在图5的例程100中使用。这个例程的一个目的是通过执行应通知对象110、111在托管应用程序进程102上实现行为变化。当监听器34从应用程序管理器31中收到消息38的广播时,监听器34触发该执行。然后,监听器34负责在托管应用程序进程32的相应地址空间中查找每组应通知对象35,并遍历应通知对象35以实现该行为变化。

初始时,识别所请求的行为变化的类型(框111)。在一个实施例中,通过识别(框113)和通知一个或多个的注册属性变化监听器(框114),可以实现托管应用程序进程32的属性变化(框112)。

在另一个实施例中,可以实现托管应用程序进程32的用户界面的外观和感觉特征的变化(框116)。如果所请求的变化识别了一个有效的外观和感觉类(框117),那么外观和感觉行为变化是必要的。托管应用程序进程32遍历(框118~120)每个注册的顶级用户界面组件并发送外观和感觉变化消息(框119)。然后以适于使用的工具包的方式实现这个变化。例如,这个变化可以被排队以暂时推迟执行或者可以被立即执行。在实现变化之后,该例程返回。

作为例子,如果由应用程序管理器31发送的消息38包括“PROPERTY_CHANGE propertyName=value”,那么监听器34识别那些为<propertyName>注册的属性变化监听器并使用propertyChanged()调用通知每个属性变化监听器。

作为另一个例子,如果由应用程序管理器31发送的消息38包括“LANDF_CHANGE lookAndFellClassName”,那么监听器34确定<lookAndFellClassName>是有效的并且不同于当前的外观和感觉。如果改变是必要的,那么监听器34遍历所有注册的顶级用户界面组件并发送外观和感觉变化消息。行为变化的其他类型是可能的。

虽然已经参照本发明的实施例具体地示出和描述了本发明,但本领域的技术人员将明白,在不脱离本发明的精神和范围的情况下可以进行形式和细节上的前述变化和其他变化。

去获取专利,查看全文>

相似文献

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

客服邮箱:kefu@zhangqiaokeyan.com

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

  • 服务号