《用于嵌入过程通信的虚拟通道.pdf》由会员分享,可在线阅读,更多相关《用于嵌入过程通信的虚拟通道.pdf(25页珍藏版)》请在专利查询网上搜索。
1、10申请公布号CN104094234A43申请公布日20141008CN104094234A21申请号201280069251422申请日2012122161/581,46320111229US13/657,77820121022US13/657,77420121022US13/657,77520121022USG06F9/5420060171申请人甲骨文国际公司地址美国加利福尼亚72发明人N珀雷WB基尔戈雷AR奈拉图鲁HB翁TJ法拉尔D赞德曼C普鲁莫DR马丁D特雷尔74专利代理机构中国国际贸易促进委员会专利商标事务所11038代理人边海梅54发明名称用于嵌入过程通信的虚拟通道57摘要为移动设。
2、备创建的原生应用程序能够嵌入非原生JAVA代码,它可以由也被嵌入为原生应用程序内的库的JAVA虚拟机执行。企业应用程序可以扩展为由移动设备使用。应用程序的商业逻辑可以构建仅仅一次,然后在企业应用程序和移动设备应用程序中都使用。30优先权数据85PCT国际申请进入国家阶段日2014080786PCT国际申请的申请数据PCT/US2012/0714452012122187PCT国际申请的公布数据WO2013/101770EN2013070451INTCL权利要求书2页说明书15页附图7页19中华人民共和国国家知识产权局12发明专利申请权利要求书2页说明书15页附图7页10申请公布号CN104094。
3、234ACN104094234A1/2页21一种方法,包括由计算设备建立通信通道,以便利由所述计算设备执行的原生实体与由所述计算设备执行的JAVA实体之间的通信,其中,所述原生实体被配置为在所述计算设备的操作系统上运行;以及由所述计算设备使用所述通信通道启用所述原生实体与所述JAVA实体之间的一条或多条消息的通信。2根据权利要求1的方法,其中,所述计算设备是移动计算设备。3根据权利要求1的方法,其中所述原生实体在第一地址空间中执行;以及所述JAVA实体在与所述第一地址空间分离的第二地址空间中执行。4根据权利要求3的方法,进一步包括由所述计算设备执行原生应用程序;以及其中,所述第一地址空间和所述。
4、第二地址空间在所述原生应用程序的地址空间之内。5根据权利要求1的方法,进一步包括为所述JAVA实体内的多个对象中的每个对象建立单独的通信通道;其中,对于所述多个对象中的每个特定对象,该特定对象与所述原生实体之间的通信仅仅通过为该特定对象建立的通信通道进行;以及防止所述多个对象中的全部其他对象使用为所述特定对象建立的通信通道。6根据权利要求1的方法,进一步包括在所述原生实体内保持高速缓存;以及响应检测到属于某特定JAVA对象的数据已经被写入所述高速缓存中,经由所述通信通道向在所述JAVA实体内的所述特定JAVA对象传播由所述写入所造成的数据改变。7一种系统,包括。存储器;以及处理器,耦接到所述存。
5、储器;其中,所述处理器被配置为建立通信通道,以便利由所述系统执行的原生实体与由所述系统执行的JAVA实体之间的通信,其中,所述原生实体被配置为在所述处理器的操作系统上运行;以及使用所述通信通道启用所述原生实体与所述JAVA实体之间的一条或多条消息的通信。8根据权利要求7的系统,其中,所述系统是移动计算设备。9根据权利要求7的系统,其中所述原生实体在第一地址空间中执行;以及所述JAVA实体在与所述第一地址空间分离的第二地址空间中执行。10根据权利要求9的系统,其中,所述处理器被配置为执行原生应用程序;以及其中,所述第一地址空间和所述第二地址空间在所述原生应用程序的地址空间之内。11根据权利要求7。
6、的系统,其中,所述处理器被配置为为所述JAVA实体内的多个对象中的每个对象建立单独的通信通道;权利要求书CN104094234A2/2页3其中,对于所述多个对象中的每个特定对象,该特定对象与所述原生实体之间的通信仅仅通过为该特定对象建立的通信通道进行;以及防止所述多个对象中的全部其他对象使用为所述特定对象建立的通信通道。12根据权利要求7的系统,其中,所述处理器被配置为在所述原生实体内保持高速缓存;以及响应检测到属于某特定JAVA对象的数据已经被写入所述高速缓存中,经由所述通信通道向在所述JAVA实体内的所述特定JAVA对象传播由所述写入所造成的数据改变。13一种非暂时性计算机可读存储介质,存。
7、储着多条指令,所述指令在被一个或多个处理器执行时,使所述一个或多个处理器执行的步骤包括由计算设备建立通信通道,以便利由所述计算设备执行的原生实体与由所述计算设备执行的JAVA实体之间的通信,其中,所述原生实体被配置为在所述计算设备的操作系统上运行;以及由所述计算设备使用所述通信通道启用所述原生实体与所述JAVA实体之间的一条或多条消息的通信。14根据权利要求13的非暂时性计算机可读存储介质,其中,所述计算设备是移动计算设备。15根据权利要求13的非暂时性计算机可读存储介质,其中所述原生实体在第一地址空间中执行;以及所述JAVA实体在与所述第一地址空间分离的第二地址空间中执行。16根据权利要求1。
8、5的非暂时性计算机可读存储介质,其中,所述步骤进一步包括由所述计算设备执行原生应用程序;以及其中,所述第一地址空间和所述第二地址空间在所述原生应用程序的地址空间之内。17根据权利要求13的非暂时性计算机可读存储介质,其中,所述步骤进一步包括为所述JAVA实体内的多个对象中的每个对象建立单独的通信通道;其中,对于所述多个对象中的每个特定对象,该特定对象与所述原生实体之间的通信仅仅通过为该特定对象建立的通信通道进行;以及防止所述多个对象中的全部其他对象使用为所述特定对象建立的通信通道。18根据权利要求13的非暂时性计算机可读存储介质,其中,所述步骤进一步包括在所述原生实体内保持高速缓存;以及响应检。
9、测到属于某特定JAVA对象的数据已经被写入所述高速缓存中,经由所述通信通道向在所述JAVA实体内的所述特定JAVA对象传播由所述写入所造成的数据改变。权利要求书CN104094234A1/15页4用于嵌入过程通信的虚拟通道0001相关申请的交叉引用0002根据35USC119,本申请要求2011年12月29日提交的标题为“ENABLINGJAVAFUNCTIONALITYINMOBILEAPPLICATIONS”的美国临时专利申请序列号61/581,463的优先权,其全部内容在此引用作为参考。背景技术0003很多时间为构建企业应用程序付出了努力。开发这样的应用程序可以涉及多个用户界面的规格说明。
10、以及根据用户与这些用户界面的元件交互所调用的对应商业逻辑。近来,移动设备比如智能电话已经变得如此流行以至于变为人们日常最有可能使用的首要计算设备。遗憾的是,为企业情形开发的应用程序往往无法简单地对接到移动设备环境。盼望使其企业应用程序可用于移动设备的应用程序开发人员有时面临的障碍之一是企业应用程序有可能深深地依赖于JAVA编程语言的可能性,而移动设备或许无论如何也无法解释在该语言中规定的命令。移动设备往往不配置着JAVA虚拟机。因此,经常使应用程序开发人员沮丧的是发现当创建为在移动设备上执行的应用程序时他们很大程度上必须从头开始,即使在用于该应用程序的商业逻辑的实质部分在基于JAVA的企业应用。
11、程序内或许已经存在的情形中。附图说明0004图1是展示了根据本发明实施例的灵活运行时间架构的实例的框图;0005图2描绘了根据本发明实施例的VM通道如何可以帮助原生实体与JAVA实体之间的消息流动的实例;0006图3描绘了根据本发明实施例的VM通道的状态图;0007图4A和图4B描绘了根据本发明实施例的用于创建VM通道、注册VM通道的监听程序和删除VM通道的控制消息时序图;0008图5是根据本发明实施例的展示了可以使用的系统环境的若干组件的简化框图;以及0009图6是根据本发明的实施例的可以使用的计算机系统的简化框图。具体实施方式0010在以下说明中,为了讲解,阐述了若干具体细节,以便提供对本。
12、发明实施例的彻底理解。不过,显而易见没有这些具体细节也可以实践本发明。0011综述0012公开了能够为移动设备建立应用程序的环境。更具体地说,公开了能够建立用于移动设备原生应用程序的环境。正如本文所用,“原生”意味着编写应用程序源代码所用的编程语言对应于所述移动设备的操作系统或平台。因此,在具有IOS平台的移动设备上,有可能以OBJECTIVEC编程语言编写原生应用程序。在具有安卓平台的移动设备上,有可能说明书CN104094234A2/15页5以JAVA编程语言编写原生应用程序。从移动设备的用户角度,原生应用程序由移动设备下载并在移动设备上执行。0013使用本文介绍的技术,企业应用程序可以扩。
13、展为由移动设备使用。应用程序的商业逻辑可以构建仅仅一次,然后在企业应用程序和移动设备应用程序中都使用。0014容器0015本发明的若干实施例可以涉及“容器”,它以移动设备平台对应的原生编程代码编写。容器包含允许原生应用程序与移动设备的操作系统交互所需要的一切组件。这些组件允许原生应用程序执行典型的应用程序将需要能够执行的一切种类的操作。这样的操作可以包括监听事件、对事件起反应、控制系统资源以及显示用户界面。容器还可以提供安全特征。0016正如以上讨论,公开了能够为移动设备建立原生应用程序的环境。为不同的移动设备平台可以构建不同的环境。例如,一个环境可以以OBJECTIVEC编程语言构建,而另一。
14、个环境可以以JAVA编程语言构建。理想情况下,避免了应用程序开发人员不得不担心构建环境时已经使用的编程语言的细节。所以,为原生应用程序提供环境的容器是为了应用程序开发人员产生的。0017嵌入式JAVA虚拟机0018在本发明的一个实施例中,JAVA虚拟机JVM被嵌入在容器内。JVM可以作为库或作为从属过程被嵌入。JVM允许原生应用程序执行JAVA编程语言的商业逻辑。即使原生应用程序不是以JAVA编程语言编写也可以是这种情况。在容器内,JVM可以解释或以其他方式练习,原生应用程序的基于JAVA的商业逻辑。0019网络视图0020在本发明的一个实施例中,原生应用程序的用户界面利用了容器内的网络视图组。
15、件。这允许原生应用程序使用超文本标记语言HTML50产生用户界面。这样的用户界面可以由在移动设备上执行的浏览器应用程序查看。容器内的连接组件把网络视图组件与嵌入的JVM连接,使得用户界面与JVM之间无缝的交互。这些连接组件代表原生应用程序应对全部界面到逻辑的桥接。网络视图组件与JVM之间的通信既可以是向前的也可以是向后的,在于信息可以在连接组件上从网络视图组件流向JVM以及从JVM流向网络视图组件。这样的通信允许数据改变发生并传播到RIPPLETHROUGH原生应用程序的其他方面。0021模块化元件0022在本发明的一个实施例中,以上讨论的环境允许构建原生应用程序的模块化元件。这些模块化元件的。
16、每一个都被称为原生应用程序的“功能部件FEATURE”。每个功能部件在概念上都可以被想象为微型沙箱,其使功能部件的数据和操作与其他功能部件的数据和操作隔离,从而防止一个功能部件非故意地污染另一个功能部件。假设存在功能部件“A”和“B”,在功能部件“A”内执行的任何操作都保持在功能部件“A”之内,使得与功能部件“B”没有相互作用,除了在“应用程序范围”层次上一定的被允许的事例中之外。因此,应用程序开发人员能够取得预先构建的功能部件并使用它们作为若干构件块以构建完整的应用程序。应用程序的每个功能部件都受到保护,不受该应用程序的若干功能部件的每一个的影响,从而提供了整体安全性,同时实现了若干组件之间。
17、的连接。0023用户界面说明书CN104094234A3/15页60024在本发明的一个实施例中,原生应用程序的用户界面类似于在成熟的ORACLE应用程序开发框架中发现的用户界面。在本发明的一个实施例中,用户界面由开发人员在开发环境中构建。在这个实施例中,开发人员把若干用户界面组件从一组用户界面组件中拖放到正被构建的用户界面之中。这些组件可以被一起拖放,以便把这些组件在功能上彼此连接。在本发明的一个实施例中,使用说明性语言把用户界面元件绑定到基本商业逻辑和实施这样的逻辑的商业对象。在本发明的一个实施例中,ORACLE应用程序开发框架ADF的移动扩充AMX层实现了这种说明性风格的绑定。关于ORA。
18、CLEADF的进一步信息可以在“ORACLEADF11GPRIMERINTRODUCTIONTOTHEBUILDINGBLOCKSOFAFUSIONWEBAPPLICATION”2007年4月发表在因特网上中找到,其全部内容在此引用作为参考。0025在本发明的一个实施例中,实现把用户界面元件绑定到商业对象的绑定层可以被分为两个不同的部分。绑定层的一个部分被包含在以上讨论的网络视图组件内部的JAVASCRIPT环境之内,而绑定层的另一个部分被包含在以上讨论的容器内嵌入的库之内。正如以上讨论,在本发明的一个实施例中,这个库表示嵌入式JVM。在本发明的一个实施例中,用户界面元件与商业对象之间的一切绑。
19、定都在这个多部分绑定层内执行。0026在本发明的一个实施例中,JAVA对象作为库在从属线程内执行。在主线程中的用户界面可以与这些JAVA对象交互。以上面讨论方式的执行绑定和交互使得绑定和交互对于应用程序开发人员是无缝的。0027灵活的运行时间架构0028图1是展示了根据本发明实施例的灵活运行时间架构100的实例的框图。架构100包括移动设备102和服务器104。移动设备102包括容器106、设备服务108和本地数据110。容器106包括设备原生视图112、网络视图114、JVM116和PHONEGAP118。容器106另外包括证书管理、单点登录SSO和访问控制120。网络视图114包括HTML。
20、5JAVASCRIPT122以及服务器HTML124。HTML5JAVASCRIPT122包括ADF移动可扩充标记语言XML视图126、ADF控制器128和本地HTML130。JVM116包括受管BEAN132和ADF数据模型134。在本发明的一个实施例中,网络视图114与JVM116通过一条或多条虚拟机通道136通信。设备服务108与设备原生视图112、PHONEGAP118和JVM116以通信方式耦接。JVM116还与本地数据110以通信方式耦接。PHONEGAP118还与HTML5JAVASCRIPT122以通信方式耦接。PHONEGAP118可以经由开源项目实现。0029服务器140包。
21、括ADF移动140、ADF面向富客户端RC142、第三方统一资源定位器URL144和网络服务SOAPREST146。SOAP表示简单对象访问协议。REST表示表述性状态转移。服务器组件140至144与服务器HTML124通过容器组件120以通信方式耦接。同样,网络服务SOAPREST146与JVM116通过容器组件120以通信方式耦接。0030在本发明的一个实施例中,容器116是用移动设备102的平台所对应的原生编程语言编写的程序代码。容器106是原生应用程序在其中执行的外壳SHELL。容器106应对与移动设备102的操作系统的交互。容器106监听事件。本质上,容器106构成了在移动设备102。
22、上执行的原生应用程序的主体。例如,在移动设备102上执行的电话应用程序典型情况下需要能够执行一定的操作集以便与移动设备102的操作系统恰当地交互。容器106使应用程序能够执行这样的操作。在本发明的一个实施例中,容器106包含多个子系统。容器106把这些子系统包括和连接在一起。这些子系统可以包括例如图1展示的子系说明书CN104094234A4/15页7统112120。以下更详细地讨论这些子系统中的某些。0031在本发明的一个实施例中,设备原生视图112包括对于移动设备102是原生的视图,比如用户界面。设备原生视图112的存在使在移动设备102上执行的应用程序能够访问移动设备102的这样的原生用。
23、户界面。0032在本发明的一个实施例中,网络视图114管理着在移动设备102上执行的应用程序的HTML50组件。网络视图114使这样的应用程序能够访问可以在移动设备102外部的系统。这些外部系统可以通过例如远程URL访问。网络视图114管理着由应用程序可以使用的本地HTML130。网络视图114还管理着ADF移动XML视图126,它实现了以说明性方式规定的应用程序的程序结构。根据某实施例,说明性组件合并了多个ADF组件的功能。ADF组件可以无限制地包括布局组件、表和树的组件、值列表LOV组件、输入组件、导航组件、输出组件、询问组件、数据可视化组件等。根据某实施例,说明性组件不具有商业逻辑并且不。
24、是数据绑定的。说明性组件的开发人员能够隐藏该组件的若干属性,以便防止消费者改变这些属性。网络视图114还包括ADF控制器128,它在一个实施例中管理着应用程序开发人员在任务流程中定义的用户交互和应用程序流程。由应用程序开发人员规定的任务流程定义了应用程序的任务。任务的定义可以包括为了允许用户为了完成该任务而交互的商业逻辑和网页。在一个实施例中,ADF控制器128实现了在应用程序执行期间原生应用程序若干网页之间的转换;ADF控制器128处理用户输入、应对出错并判断应用程序执行期间的任何给定点处应用程序的用户应当看到哪些网页。0033在本发明的一个实施例中,证书管理、SSO和访问控制120代表原生。
25、应用程序执行安全功能。组件120的存在减轻了应用程序开发人员把这样的安全功能定制编码到原生应用程序中的负担。在原生应用程序尝试访问要求在授权访问之前发生登录的移动设备102的外部资源的情况下,组件120可以向应用程序提供这样的登录能力。这样的登录可以是单租户也可以是多租户。这样的登录可以使用HTTPS协议或者可以为非安全的。在一个实施例中,原生应用程序与外部资源衔接的全部安全事务处理都通过组件120。网页存取、网络服务调用以及REST调用都是可以作为这样的安全事务处理的一部分而执行的操作类型。组件120向原生应用程序提供了对潜在恶意外部资源的防护。0034在本发明的一个实施例中,JVM116被。
26、实施为嵌入式JAVA库。在本发明的一个实施例中,在JVM116内执行应用程序开发人员编写的JAVA代码。JVM116是在容器106内执行这样的JAVA代码的单独线程和子系统。0035在本发明的实施例中,JVM116包括受管BEAN132和ADF模型134。在一个实施例中,ADF模型134实施数据访问和商业逻辑。ADF模型134可以包括数据绑定的设施,它把应用程序的视图层连接到应用程序的数据和商业服务层。视图层典型情况下包括具有用户界面组件的网页。数据绑定的设施可以调用由受管BEAN132实施的商业服务。受管BEAN132是JAVA可重用的软件组件。受管BEAN132是以JAVA编程语言编写的并。
27、符合特定惯例的类。受管BEAN132可以用于把许多单独的JAVA对象封装成单个对象BEAN,所以能够把这多个JAVA对象作为单个BEAN对象而不是作为多个个体JAVA对象分发到原生应用程序的不同部分。0036在本发明的一个实施例中,本地数据110是数据库,其包含该原生应用程序在移动设备102上可以本地读取、更新和/或存储的数据。这样的数据可以为加密的也可以为说明书CN104094234A5/15页8不加密的。在本发明的一个实施例中,容器106提供允许原生应用程序以面向数据库的方式访问本地数据110的数据库连接服务。0037在本发明的一个实施例中,设备服务108包括典型情况下与移动设备102一起。
28、运送到达的其他应用程序和服务以及功能部件。这样的服务可以包括例如日历服务、电话服务、照相机服务、全球定位系统GPS服务等。在本发明的一个实施例中,容器106使得设备服务108可以通过数据控制设施由原生应用程序使用。如果原生应用程序正在使用的服务是电话服务,那么原生应用程序就可以通过PHONEGAP118访问该电话服务。为了本文的讨论,设备服务108和本地数据110都被视为外部资源,即使它们驻留在移动设备102上,因为这些资源不包含在容器106之内。0038为了本文讨论,由服务器104提供的资源也被视为外部资源,因为这样的资源对于容器106以及移动设备102是外部的。例如,服务器104可以是企业。
29、服务器。移动设备102可以通过一个或多个网络,典型情况下,包括一个或多个无线网络和因特网来访问服务器104。在移动设备102上执行的原生应用程序可以从服务器104上驻留的资源请求远程网页。在这样的情况下,容器106的组件120可以判断在远程网页内指定的可执行代码的哪些部分被允许在移动设备102上执行。如果这样的可执行代码的一定的部分被认为有安全风险,组件120可以防止这些部分在移动设备102上执行。由原生应用程序采用的远程网页可以包括诸如ADF移动140、ADF面向RC142和第三方UEL144的资源。ADF移动140包括原生应用程序可以利用的一组控制。这样的控制可以显示在网络视图114之内。。
30、ADF面向RC142无限制地包括布局组件、表和树的组件、值列表LOV组件、输入组件、导航组件、输出组件、询问组件、数据可视化组件等。0039作为补充或替代,原生应用程序可以对服务器104上的网络服务146进行SOAP或REST调用,以便从服务器104获得数据。尽管原生应用程序可以使用网络服务146作为获取和存储应用程序数据的主渠道,但是作为补充原生应用程序可以在移动设备102上本地高速缓存这样的数据。例如,原生应用程序可以把这样的数据存储在本地数据110之内,以及/或者原生应用程序可以把这样的数据保留在分配给容器106的随机存取存储器之内。0040嵌入JVM、运行时间库和应用程序代码作为原生应。
31、用程序中的从属环境0041本文介绍的技术使JVM、运行时间库和应用程序代码能够作为从属环境被嵌入到原生应用程序内。这种嵌入使JAVA代码能够作为原生应用程序它可能尚未以JAVA编写的一部分被执行。在本发明的一个实施例中,JVM116以及运行时间库和JAVA应用程序代码被嵌入在原生应用程序之中,使原生应用程序也可能执行JAVA代码,即使在移动设备102上没有另外驻留的独立的JAVA运行时间环境情况下。0042嵌入式JVM116提供了把JAVA程序的执行嵌入到原生应用程序之中的方法。这允许例如用户界面由原生应用程序呈现同时商业逻辑或其他代码在JAVA环境内执行。在本发明的一个实施例中,在由JVM1。
32、16创建和管理的若干线程内JAVA代码与应用程序的原生部分独立且异步地执行。把JVM116嵌入到原生应用程序之内使得原生应用程序对JAVA代码的使用有可能不要求该原生应用程序依赖于原生应用程序外部的任何JAVA运行时间环境。在由于技术或商业原因,这样的独立外部JAVA运行时间环境不可用或被禁止的情况下,这样的益处尤为可贵。因为JVM116被嵌入到原生应用程序之内,所以原生应用程序外部的实体根本不必知晓JVM116存在;原生应用程序可以与外部资源交互,仿佛JVM116根说明书CN104094234A6/15页9本不存在。0043根据本发明的实施例,实际JAVA代码以如下方式被嵌入在原生应用程序它。
33、有可能不是以JAVA编写的内部应用程序的原生代码和JAVA代码能够交互并彼此合作。这种方式可以与仅仅使用原生代码实施JAVA程序的功能的方式形成对照。0044在本发明的一个实施例中,容器106包括以下组件到移动设备102的原生操作系统的端口CVMJVM、CDC。基础简档PROLE、安全可选包以及JSR169JDBC运行时间库。JVM和运行时间库被包装为与原生应用程序链接的原生库。本发明的若干实施例包括使得JVM116能够由原生应用程序的代码执行的原生应用程序编程接口API。这种API提供了把若干运行时间参数和初始JAVA类都传递到JVM116的能力。在应用程序开发人员创建原生应用程序之时,运行。
34、时间库的若干部分可以被置于ROM以便增加运行时间性能和减少启动时间。应用程序开发人员能够使用标准的JAVA工具调试其JAVA代码,即使JAVA代码被嵌入到原生应用程序中。应用程序开发人员也可以得到这种能力,无论应用程序开发人员是否正使用原生调试器。0045在本发明的一个实施例中,容器106包括一条或多条虚拟机通道136。在本发明的一个实施例中,响应JAVA代码第一次需要被原生应用程序使用,容器106根据在该原生应用程序内嵌入的库,创建JVM116及其子系统。因此,在本发明的一个实施例中,JVM116及其子系统的创建以缓慢方式执行被推迟到其执行变得需要时。例如,JVM116及其子系统的创建可以是。
35、响应原生应用程序对JAVA命令的调用。作为替代,JVM及其子系统的创建可以是响应原生应用程序对JAVA绑定的引用。0046在一个实施例中,绑定的JAVASCRIPT部分检测到该绑定需要在JAVA子系统内被访问。响应检测到这种情况,JAVASCRIPT部分经由PHONEGAP118做出引用调用。容器106截取PHONEGAP命令。响应截取到PHONEGAP命令,容器106判断JVM116及其子系统是否仍然处于执行形式。响应JVM116及其子系统不处于执行形式的判断,容器106根据在该原生应用程序中嵌入的库创建JVM116及其子系统。容器106可以执行线程派生指令FORK以便创建JVM116及其子。
36、系统。在本发明的一个实施例中,除了创建JVM116及其子系统外,容器106还建立了至少一条虚拟机通道136。这种虚拟机通道形成了容器106与JVM116的子系统之间的通信连接。更具体地说,在一个实施例中,虚拟机通道形成了容器106与JVM116的子系统内被称为功能部件环境管理器的微服务器之间的连接。这种功能部件环境管理器具有对JVM116的子系统内的全部绑定和资源的控制。0047在本发明的一个实施例中,为JVM116的子系统内的每个单独功能部件都另外创建了虚拟机通道136的单独通道。每条这样的虚拟机通道都是网络视图114与该虚拟机通道与之相连的JVM116的子系统内特定功能部件之间的对等通信通。
37、道。虚拟机通道136的创建在若干平行实体之间创建了配对在网络视图114与虚拟机通道与之相连的的功能部件之间。因此,网络视图114可以使用消息传送系统经由每个功能部件自己的虚拟机通道与该功能部件交互。0048此后,每当原生应用程序请求在JVM116的子系统内驻留的JAVA对象的属性时,该JAVA对象的虚拟机通道用于对于应用程序开发人员透明地检索该属性。这个属性对于应用程序开发人员透明地被放置在原生应用程序的存储器地址空间中由其使用。原生应用程序然后可以经由正常的存储器存取操作从它自己的存储器地址空间访问该属性。说明书CN104094234A7/15页100049在一个实施例中,为了提高系统的速度。
38、,尽可能避免原生应用程序在JVM116的子系统中的引用。为了有助于避免这样的引用,在一个实施例中,用以上讨论的方式从JVM116的子系统获得的数据被高速缓存在JVM116的子系统之外的、原生应用程序的存储器地址空间中。在一个实施例中,经由不要求应用程序开发人员知晓或涉及、容器106自动实施的后台通道通信,实现了高速缓存相干性。0050除了使用以上介绍的技术读取JAVA对象的若干属性之外,原生应用程序还能够使用下面介绍的若干技术以便设置这些JAVA对象的若干属性。在一个实施例中,经由在网络视图114内保留的透写高速缓存实现这些JAVA对象的若干属性的设置。响应网络视图114检测到已经把某个值写入。
39、到透写高速缓存,网络视图114使用虚拟机通道136中适当的一条通道使被写入值传播到该值属于其属性的适合JAVA对象。因此,在JVM116的子系统内的JAVA对象的属性从透写高速缓存被更新。0051在本发明的一个实施例中,JVM116的子系统包括确认机构,它在允许若干值被赋予JAVA对象之前判断类型是否适合。例如,响应检测到正在进行把字符串类型的值赋予浮点类型属性的尝试,确认机构可以检测出所尝试的赋值是无效的。响应检测出所尝试的赋值是无效的,确认机构阻止该赋值并发出原生应用程序被设计为应对的异常事件。此外,确认机构使相关的透写高速缓存条目反映出在尝试无效赋值前该条目包含的值。作为替代,对JAVA。
40、对象属性的有效改变被传播到网络视图114,然后它可以刷新原生应用程序对移动设备102的用户的呈现,以便在与用户界面相关时反映出该变化。0052在本发明的一个实施例中,原生应用程序的网络视图114尝试调用JVM116的子系统内JAVA对象的方法。网络视图114通过对PHONEGAP118做出调用而尝试调用这种方法。容器106截取PHONEGAP命令。响应截取到PHONEGAP命令,容器106把该命令放置在虚拟机通道136中与该方法调用所属的JAVA对象相连的一条通道中。JVM116的子系统的组件然后调用与适合的JAVA对象相关的方法。0053在某些情况下,这样的方法调用可能属于在服务器104上而。
41、不是移动设备102上驻留的资源。响应检测到该方法调用属于这样的外部资源,容器106使REST网络服务调用对服务器104上网络服务146中适合的服务做出。服务器104处理在该调用内做出的请求并向容器106返回响应。容器106响应式地使该响应内包含的数据传播到JVM116的子系统内的相关JAVA对象。以类似于以上介绍的方式,执行了绑定更新并且更新后的值被传播到网络视图114,它可以相应地刷新用户界面。0054在本发明的一个实施例中,每当从容器106对服务器104做出REST调用时,该调用都经过组件120。组件120响应式地判断该调用是否需要安全措施,以及需要时,需要的安全措施种类。组件120可以检。
42、测出在做出REST调用时要使用的安全协议类型。如果该调用请求的是单登录功能,那么组件120可以判断该登录的适合证书是否驻留在移动设备102上。组件120可以把这些证书嵌入在调用之内然后再把该调用向前发送到服务器104。0055在本发明的一个实施例中,取决于从网络服务146收到的响应的内容,网络视图114可以判断某些或全部内容应当被存储在移动设备102上驻留的多个储存库REPOSITORY中。例如,响应网络服务响应指定了联系人列表的判断,网络视图114可以判断在列表内的若干联系人应当被放置在移动设备102的联系人列表之内;这个联系人列表可以在原生应用程序外部并与之无关。响应这样的判断,网络视图1。
43、14以及更具体说明书CN104094234A108/15页11地说,ADF控制器128可以使指定该内容的命令被发送到PHONEGAP118。响应收到命令,PHONEGAP118可以与设备服务108对接并使适合的服务如联系人列表服务接收和处理由该命令指定的内容。在例如联系人列表服务的情况下,这种处理可以涉及把先前从服务器104的网络服务应答中收到的若干联系人存储在由设备服务108内联系人列表服务所保持的联系人列表之内。0056在一个实施例中,容器106使用JAVA数据库连接JDBC和数据库驱动器,把数据存储到本地数据110中以及从其检索数据。容器106与本地数据110之间的通信可以是加密的或者不。
44、加密的。原生应用程序可以使用本地数据110作为数据库,以管理原生应用程序的状态数据。本地数据110内的数据可以用于设置JVM116的子系统内JAVA对象的若干属性。随后,原生应用程序的用户可以经由网络视图114呈现的用户界面访问这些JAVA对象的若干属性。同样,从本地数据110检索的数据可以被高速缓存在容器106之内,以便避免容器106与容器106外资源之间的更昂贵事务处理。0057创建功能部件并装配成移动应用程序的规范机制0058在本发明的一个实施例中,向用户比如应用程序开发人员提供创建更小的应用程序功能部件的规范机制。如本文所用,功能部件是呈现与商业逻辑的结合。规范机制使得这些更小的功能部。
45、件能够被装配成单个移动应用程序同时保持清晰的分离状态。为了预防任何个体功能部件被破坏或篡改,在一个实施例中,每个功能部件都在单独的沙箱中,使它对同一移动应用程序的其他功能部件的直接暴露被限制或完全消除。在本发明的一个实施例中,移动应用程序的呈现与该移动应用程序的商业逻辑分离,这是通过把它们的每一个都放置在与其他应用程序层隔离的单独的、截然不同的应用程序层之中实现的。这些层的每一层都具有单独的代码、数据和生命周期。有益的是,本文公开的技术使多个脱节的功能部件能够以隔离方式混合在一起,使得更复杂的应用程序能够快速地开发。0059本文公开的技术使可以被视为迷你应用程序的多个应用程序功能部件能够被合并。
46、在一起成为单一应用程序。为了促进或限制功能部件数据的可见度,支持多个不同的应用程序作用域SCOPE、功能部件作用域和页面流作用域变量。使用本文公开的技术,开发人员能够判断哪个数据正被暴露于元数据驱动的应用程序的各个功能部件。0060为了能够把多个不同的应用程序功能部件装配成单一应用程序,本发明的实施例采用了规范机制。在一个实施例中,这种规范通过使用表达式语言实现。所用的表达式语言可以是例如标准的表达式语言。在本发明的一个实施例中,所用的表达式语言是JAVA统一表达式语言。0061JAVA统一表达式语言提供了简化JAVA服务器页面JSP中表达式的方法。它是简单的语言,用于访问隐含对象和JAVA类。
47、,并且以简练ELEGANT方式操纵若干集合。该语言提供了使用JSP脚本元件之外的运行时间表达式的能力。JAVA统一表达式语言提供了可插入的可扩展的解析器机制,以及从网页设置数据和调用若干方法的方式。关于JAVA统一表达式语言的补充细节能够在“THEJAVAEE5TUTORIAL”2010ORACLE中找到,在此引用作为参考。0062在本发明的一个实施例中,容器106包括以JAVASCRIPT构建的语法分析程序和求值程序以及以JAVA构建的语法分析程序和求值程序。这些语法分析程序和求值程序对移动应用程序使用的若干网页中包含的JAVA统一表达式语言的表达式进行语法分析和求说明书CN10409423。
48、4A119/15页12值。因为容器106包括JAVASCRIPT语法分析程序和求值程序,所以有可能在不采用JAVA引擎的情况下可以完成某些表达式的语法分析和求值,这能够产生执行速度的收益。一旦从JVM116的子系统一开始就已经获得了JAVA对象的若干属性,就可以把这些属性高速缓存并在稍后使用JAVASCRIPT访问。相反,在本发明的一个实施例中,使用JAVASCRIPT语法分析程序和求值程序已经被语法分析和求值的若干对象的属性被高速缓存在JVM116的子系统之内,所以此后JAVA语法分析程序和求值程序能够访问这些对象的属性,而无需JVM116的子系统外的引用。0063在本发明的一个实施例中,在。
49、容器106内发生的每个数据改变事件都使得同一数据的两个镜像副本被修改JVM116的子系统JAVA层内的一个副本和网络视图114JAVASCRIPT层内的一个副本。因此,在本发明的一个实施例中,对网络视图114或JVM116内数据的改变被自动地推送到网络视图114和JVM116中的另一个。0064根据本发明的实施例,保持功能部件之间的隔离是通过把每个对象的数据以及任何高速缓存中驻留的该数据放入沙箱来实现的。因此,在本发明的一个实施例中,预防JVM116的子系统中的每个JAVA对象访问在该子系统中任何其他JAVA对象的数据,并且作为补充,预防每个这样的JAVA对象访问任何其他JAVA对象的高速缓存数据如在网络视图114中。此外,在本发明的一个实施例中,子系统116中的每个JAVA对象都具有虚拟机通道136中不与其他JAVA对象共享的它自己的一条通道。在本发明的一个实施例中,JAVA对象与该JAVA对象在网络视图114中的模拟ANALOGUE之间的通信通过分配给该JAVA对象及其在网络视图114中的模拟的特定虚拟机通道排他地进行。0065在本发明的一个实施例中,每个单独的应用程序功能部件都以排他地分配给该应用程序功能部件而不包括其他功能部件的单独的JAVA类加载器加载。系统类加载器加载应用程序作用域的全部类。不过,每个功能部件可以包含它自己的类加载器,它是系统类加载器的子组件。因为每。