用于嵌入过程通信的虚拟通道.pdf

上传人:111****11 文档编号:177615 上传时间:2018-01-31 格式:PDF 页数:25 大小:4.64MB
返回 下载 相关 举报
摘要
申请专利号:

CN201280069251.4

申请日:

2012.12.21

公开号:

CN104094234A

公开日:

2014.10.08

当前法律状态:

实审

有效性:

审中

法律详情:

实质审查的生效IPC(主分类):G06F 9/54申请日:20121221|||公开

IPC分类号:

G06F9/54

主分类号:

G06F9/54

申请人:

甲骨文国际公司

发明人:

N·珀雷; W·B·基尔戈雷; A·R·奈拉图鲁; H·B·翁; T·J·法拉尔; D·赞德曼; C·普鲁莫; D·R·马丁; D·特雷尔

地址:

美国加利福尼亚

优先权:

2011.12.29 US 61/581,463; 2012.10.22 US 13/657,778; 2012.10.22 US 13/657,774; 2012.10.22 US 13/657,775

专利代理机构:

中国国际贸易促进委员会专利商标事务所 11038

代理人:

边海梅

PDF下载: PDF下载
内容摘要

为移动设备创建的原生应用程序能够嵌入非原生JAVA代码,它可以由也被嵌入为原生应用程序内的库的JAVA虚拟机执行。企业应用程序可以扩展为由移动设备使用。应用程序的商业逻辑可以构建仅仅一次,然后在企业应用程序和移动设备应用程序中都使用。

权利要求书

1.  一种方法,包括:
由计算设备建立通信通道,以便利由所述计算设备执行的原生实体与由所述计算设备执行的JAVA实体之间的通信,其中,所述原生实体被配置为在所述计算设备的操作系统上运行;以及
由所述计算设备使用所述通信通道启用所述原生实体与所述JAVA实体之间的一条或多条消息的通信。

2.
  根据权利要求1的方法,其中,所述计算设备是移动计算设备。

3.
  根据权利要求1的方法,其中:
所述原生实体在第一地址空间中执行;以及
所述JAVA实体在与所述第一地址空间分离的第二地址空间中执行。

4.
  根据权利要求3的方法,进一步包括:
由所述计算设备执行原生应用程序;以及
其中,所述第一地址空间和所述第二地址空间在所述原生应用程序的地址空间之内。

5.
  根据权利要求1的方法,进一步包括:
为所述JAVA实体内的多个对象中的每个对象建立单独的通信通道;
其中,对于所述多个对象中的每个特定对象,该特定对象与所述原生实体之间的通信仅仅通过为该特定对象建立的通信通道进行;以及
防止所述多个对象中的全部其他对象使用为所述特定对象建立的通信通道。

6.
  根据权利要求1的方法,进一步包括:
在所述原生实体内保持高速缓存;以及
响应检测到属于某特定JAVA对象的数据已经被写入所述高速 缓存中,经由所述通信通道向在所述JAVA实体内的所述特定JAVA对象传播由所述写入所造成的数据改变。

7.
  一种系统,包括。
存储器;以及
处理器,耦接到所述存储器;
其中,所述处理器被配置为:
建立通信通道,以便利由所述系统执行的原生实体与由所述系统执行的JAVA实体之间的通信,其中,所述原生实体被配置为在所述处理器的操作系统上运行;以及
使用所述通信通道启用所述原生实体与所述JAVA实体之间的一条或多条消息的通信。

8.
  根据权利要求7的系统,其中,所述系统是移动计算设备。

9.
  根据权利要求7的系统,其中:
所述原生实体在第一地址空间中执行;以及
所述JAVA实体在与所述第一地址空间分离的第二地址空间中执行。

10.
  根据权利要求9的系统,其中,所述处理器被配置为:
执行原生应用程序;以及
其中,所述第一地址空间和所述第二地址空间在所述原生应用程序的地址空间之内。

11.
  根据权利要求7的系统,其中,所述处理器被配置为:
为所述JAVA实体内的多个对象中的每个对象建立单独的通信通道;
其中,对于所述多个对象中的每个特定对象,该特定对象与所述原生实体之间的通信仅仅通过为该特定对象建立的通信通道进行;以及
防止所述多个对象中的全部其他对象使用为所述特定对象建立的通信通道。

12.
  根据权利要求7的系统,其中,所述处理器被配置为:
在所述原生实体内保持高速缓存;以及
响应检测到属于某特定JAVA对象的数据已经被写入所述高速缓存中,经由所述通信通道向在所述JAVA实体内的所述特定JAVA对象传播由所述写入所造成的数据改变。

13.
  一种非暂时性计算机可读存储介质,存储着多条指令,所述指令在被一个或多个处理器执行时,使所述一个或多个处理器执行的步骤包括:
由计算设备建立通信通道,以便利由所述计算设备执行的原生实体与由所述计算设备执行的JAVA实体之间的通信,其中,所述原生实体被配置为在所述计算设备的操作系统上运行;以及
由所述计算设备使用所述通信通道启用所述原生实体与所述JAVA实体之间的一条或多条消息的通信。

14.
  根据权利要求13的非暂时性计算机可读存储介质,其中,所述计算设备是移动计算设备。

15.
  根据权利要求13的非暂时性计算机可读存储介质,其中:
所述原生实体在第一地址空间中执行;以及
所述JAVA实体在与所述第一地址空间分离的第二地址空间中执行。

16.
  根据权利要求15的非暂时性计算机可读存储介质,其中,所述步骤进一步包括:
由所述计算设备执行原生应用程序;以及
其中,所述第一地址空间和所述第二地址空间在所述原生应用程序的地址空间之内。

17.
  根据权利要求13的非暂时性计算机可读存储介质,其中,所述步骤进一步包括:
为所述JAVA实体内的多个对象中的每个对象建立单独的通信通道;
其中,对于所述多个对象中的每个特定对象,该特定对象与所述原生实体之间的通信仅仅通过为该特定对象建立的通信通道进行;以 及
防止所述多个对象中的全部其他对象使用为所述特定对象建立的通信通道。

18.
  根据权利要求13的非暂时性计算机可读存储介质,其中,所述步骤进一步包括:
在所述原生实体内保持高速缓存;以及
响应检测到属于某特定JAVA对象的数据已经被写入所述高速缓存中,经由所述通信通道向在所述JAVA实体内的所述特定JAVA对象传播由所述写入所造成的数据改变。

说明书

用于嵌入过程通信的虚拟通道
相关申请的交叉引用
根据35U.S.C.§119,本申请要求2011年12月29日提交的标题为“ENABLING JAVA FUNCTIONALITY IN MOBILE APPLICATIONS”的美国临时专利申请序列号61/581,463的优先权,其全部内容在此引用作为参考。
背景技术
很多时间为构建企业应用程序付出了努力。开发这样的应用程序可以涉及多个用户界面的规格说明以及根据用户与这些用户界面的元件交互所调用的对应商业逻辑。近来,移动设备比如智能电话已经变得如此流行以至于变为人们日常最有可能使用的首要计算设备。遗憾的是,为企业情形开发的应用程序往往无法简单地对接到移动设备环境。盼望使其企业应用程序可用于移动设备的应用程序开发人员有时面临的障碍之一是企业应用程序有可能深深地依赖于JAVA编程语言的可能性,而移动设备或许无论如何也无法解释在该语言中规定的命令。移动设备往往不配置着JAVA虚拟机。因此,经常使应用程序开发人员沮丧的是发现当创建为在移动设备上执行的应用程序时他们很大程度上必须从头开始,即使在用于该应用程序的商业逻辑的实质部分在基于JAVA的企业应用程序内或许已经存在的情形中。
附图说明
图1是展示了根据本发明实施例的灵活运行时间架构的实例的框图;
图2描绘了根据本发明实施例的VM通道如何可以帮助原生实体与JAVA实体之间的消息流动的实例;
图3描绘了根据本发明实施例的VM通道的状态图;
图4A和图4B描绘了根据本发明实施例的用于创建VM通道、注册VM通道的监听程序和删除VM通道的控制消息时序图;
图5是根据本发明实施例的展示了可以使用的系统环境的若干组件的简化框图;以及
图6是根据本发明的实施例的可以使用的计算机系统的简化框图。
具体实施方式
在以下说明中,为了讲解,阐述了若干具体细节,以便提供对本发明实施例的彻底理解。不过,显而易见没有这些具体细节也可以实践本发明。
综述
公开了能够为移动设备建立应用程序的环境。更具体地说,公开了能够建立用于移动设备原生应用程序的环境。正如本文所用,“原生”意味着编写应用程序源代码所用的编程语言对应于所述移动设备的操作系统或平台。因此,在具有iOS平台的移动设备上,有可能以Objective C编程语言编写原生应用程序。在具有安卓平台的移动设备上,有可能以JAVA编程语言编写原生应用程序。从移动设备的用户角度,原生应用程序由移动设备下载并在移动设备上执行。
使用本文介绍的技术,企业应用程序可以扩展为由移动设备使用。应用程序的商业逻辑可以构建仅仅一次,然后在企业应用程序和移动设备应用程序中都使用。
容器
本发明的若干实施例可以涉及“容器”,它以移动设备平台对应的原生编程代码编写。容器包含允许原生应用程序与移动设备的操作系统交互所需要的一切组件。这些组件允许原生应用程序执行典型的 应用程序将需要能够执行的一切种类的操作。这样的操作可以包括监听事件、对事件起反应、控制系统资源以及显示用户界面。容器还可以提供安全特征。
正如以上讨论,公开了能够为移动设备建立原生应用程序的环境。为不同的移动设备平台可以构建不同的环境。例如,一个环境可以以Objective C编程语言构建,而另一个环境可以以JAVA编程语言构建。理想情况下,避免了应用程序开发人员不得不担心构建环境时已经使用的编程语言的细节。所以,为原生应用程序提供环境的容器是为了应用程序开发人员产生的。
嵌入式JAVA虚拟机
在本发明的一个实施例中,JAVA虚拟机(JVM)被嵌入在容器内。JVM可以作为库或作为从属过程被嵌入。JVM允许原生应用程序执行JAVA编程语言的商业逻辑。即使原生应用程序不是以JAVA编程语言编写也可以是这种情况。在容器内,JVM可以解释或以其他方式练习,原生应用程序的基于JAVA的商业逻辑。
网络视图
在本发明的一个实施例中,原生应用程序的用户界面利用了容器内的网络视图组件。这允许原生应用程序使用超文本标记语言(HTML)5.0产生用户界面。这样的用户界面可以由在移动设备上执行的浏览器应用程序查看。容器内的连接组件把网络视图组件与嵌入的JVM连接,使得用户界面与JVM之间无缝的交互。这些连接组件代表原生应用程序应对全部界面到逻辑的桥接。网络视图组件与JVM之间的通信既可以是向前的也可以是向后的,在于信息可以在连接组件上从网络视图组件流向JVM以及从JVM流向网络视图组件。这样的通信允许数据改变发生并传播到(ripple through)原生应用程序的其他方面。
模块化元件
在本发明的一个实施例中,以上讨论的环境允许构建原生应用程序的模块化元件。这些模块化元件的每一个都被称为原生应用程序的“功能部件(feature)”。每个功能部件在概念上都可以被想象为微型沙箱,其使功能部件的数据和操作与其他功能部件的数据和操作隔离,从而防止一个功能部件非故意地污染另一个功能部件。假设存在功能部件“A”和“B”,在功能部件“A”内执行的任何操作都保持在功能部件“A”之内,使得与功能部件“B”没有相互作用,除了在“应用程序范围”层次上一定的被允许的事例中之外。因此,应用程序开发人员能够取得预先构建的功能部件并使用它们作为若干构件块以构建完整的应用程序。应用程序的每个功能部件都受到保护,不受该应用程序的若干功能部件的每一个的影响,从而提供了整体安全性,同时实现了若干组件之间的连接。
用户界面
在本发明的一个实施例中,原生应用程序的用户界面类似于在成熟的Oracle应用程序开发框架中发现的用户界面。在本发明的一个实施例中,用户界面由开发人员在开发环境中构建。在这个实施例中,开发人员把若干用户界面组件从一组用户界面组件中拖放到正被构建的用户界面之中。这些组件可以被一起拖放,以便把这些组件在功能上彼此连接。在本发明的一个实施例中,使用说明性语言把用户界面元件绑定到基本商业逻辑和实施这样的逻辑的商业对象。在本发明的一个实施例中,Oracle应用程序开发框架(ADF)的移动扩充(AMX)层实现了这种说明性风格的绑定。关于Oracle ADF的进一步信息可以在“Oracle ADF 11g Primer:Introduction to the Building Blocks of a Fusion Web Application”(2007年4月发表在因特网上)中找到,其全部内容在此引用作为参考。
在本发明的一个实施例中,实现把用户界面元件绑定到商业对象的绑定层可以被分为两个不同的部分。绑定层的一个部分被包含在以 上讨论的网络视图组件内部的JAVAScript环境之内,而绑定层的另一个部分被包含在以上讨论的容器内嵌入的库之内。正如以上讨论,在本发明的一个实施例中,这个库表示嵌入式JVM。在本发明的一个实施例中,用户界面元件与商业对象之间的一切绑定都在这个多部分绑定层内执行。
在本发明的一个实施例中,JAVA对象作为库在从属线程内执行。在主线程中的用户界面可以与这些JAVA对象交互。以上面讨论方式的执行绑定和交互使得绑定和交互对于应用程序开发人员是无缝的。
灵活的运行时间架构
图1是展示了根据本发明实施例的灵活运行时间架构100的实例的框图。架构100包括移动设备102和服务器104。移动设备102包括容器106、设备服务108和本地数据110。容器106包括设备原生视图112、网络视图114、JVM 116和phone gap 118。容器106另外包括证书管理、单点登录(SSO)和访问控制120。网络视图114包括HTML5&JAVAScript 122以及服务器HTML 124。HTML5&JAVAScript 122包括ADF移动可扩充标记语言(XML)视图126、ADF控制器128和本地HTML 130。JVM 116包括受管bean132和ADF数据模型134。在本发明的一个实施例中,网络视图114与JVM116通过一条或多条虚拟机通道136通信。设备服务108与设备原生视图112、phone gap 118和JVM 116以通信方式耦接。JVM 116还与本地数据110以通信方式耦接。phone gap 118还与HTML5&JAVAScript 122以通信方式耦接。phone gap 118可以经由开源项目实现。
服务器140包括ADF移动140、ADF面向富客户端(RC)142、第三方统一资源定位器(URL)144和网络服务(SOAP&REST)146。SOAP表示简单对象访问协议。REST表示表述性状态转移。服务器组件140至144与服务器HTML 124通过容器组件120以通信方式耦 接。同样,网络服务(SOAP&REST)146与JVM 116通过容器组件120以通信方式耦接。
在本发明的一个实施例中,容器116是用移动设备102的平台所对应的原生编程语言编写的程序代码。容器106是原生应用程序在其中执行的外壳(shell)。容器106应对与移动设备102的操作系统的交互。容器106监听事件。本质上,容器106构成了在移动设备102上执行的原生应用程序的主体。例如,在移动设备102上执行的电话应用程序典型情况下需要能够执行一定的操作集以便与移动设备102的操作系统恰当地交互。容器106使应用程序能够执行这样的操作。在本发明的一个实施例中,容器106包含多个子系统。容器106把这些子系统包括和连接在一起。这些子系统可以包括例如图1展示的子系统112-120。以下更详细地讨论这些子系统中的某些。
在本发明的一个实施例中,设备原生视图112包括对于移动设备102是原生的视图,比如用户界面。设备原生视图112的存在使在移动设备102上执行的应用程序能够访问移动设备102的这样的原生用户界面。
在本发明的一个实施例中,网络视图114管理着在移动设备102上执行的应用程序的HTML 5.0组件。网络视图114使这样的应用程序能够访问可以在移动设备102外部的系统。这些外部系统可以通过例如远程URL访问。网络视图114管理着由应用程序可以使用的本地HTML 130。网络视图114还管理着ADF移动XML视图126,它实现了以说明性方式规定的应用程序的程序结构。根据某实施例,说明性组件合并了多个ADF组件的功能。ADF组件可以无限制地包括布局组件、表和树的组件、值列表(LOV)组件、输入组件、导航组件、输出组件、询问组件、数据可视化组件等。根据某实施例,说明性组件不具有商业逻辑并且不是数据绑定的。说明性组件的开发人员能够隐藏该组件的若干属性,以便防止消费者改变这些属性。网络视图114还包括ADF控制器128,它在一个实施例中管理着应用程序开发人员在任务流程中定义的用户交互和应用程序流程。由应用程序开 发人员规定的任务流程定义了应用程序的任务。任务的定义可以包括为了允许用户为了完成该任务而交互的商业逻辑和网页。在一个实施例中,ADF控制器128实现了在应用程序执行期间原生应用程序若干网页之间的转换;ADF控制器128处理用户输入、应对出错并判断应用程序执行期间的任何给定点处应用程序的用户应当看到哪些网页。
在本发明的一个实施例中,证书管理、SSO和访问控制120代表原生应用程序执行安全功能。组件120的存在减轻了应用程序开发人员把这样的安全功能定制编码到原生应用程序中的负担。在原生应用程序尝试访问要求在授权访问之前发生登录的(移动设备102的)外部资源的情况下,组件120可以向应用程序提供这样的登录能力。这样的登录可以是单租户也可以是多租户。这样的登录可以使用HTTPS协议或者可以为非安全的。在一个实施例中,原生应用程序与外部资源衔接的全部安全事务处理都通过组件120。网页存取、网络服务调用以及REST调用都是可以作为这样的安全事务处理的一部分而执行的操作类型。组件120向原生应用程序提供了对潜在恶意外部资源的防护。
在本发明的一个实施例中,JVM 116被实施为嵌入式JAVA库。在本发明的一个实施例中,在JVM 116内执行应用程序开发人员编写的JAVA代码。JVM 116是在容器106内执行这样的JAVA代码的单独线程和子系统。
在本发明的实施例中,JVM 116包括受管bean 132和ADF模型134。在一个实施例中,ADF模型134实施数据访问和商业逻辑。ADF模型134可以包括数据绑定的设施,它把应用程序的视图层连接到应用程序的数据和商业服务层。视图层典型情况下包括具有用户界面组件的网页。数据绑定的设施可以调用由受管bean 132实施的商业服务。受管bean 132是JAVA可重用的软件组件。受管bean 132是以JAVA编程语言编写的并符合特定惯例的类。受管bean 132可以用于把许多单独的JAVA对象封装成单个对象(bean),所以能够把这多个JAVA对象作为单个bean对象而不是作为多个个体JAVA对象分发到原生 应用程序的不同部分。
在本发明的一个实施例中,本地数据110是数据库,其包含该原生应用程序在移动设备102上可以本地读取、更新和/或存储的数据。这样的数据可以为加密的也可以为不加密的。在本发明的一个实施例中,容器106提供允许原生应用程序以面向数据库的方式访问本地数据110的数据库连接服务。
在本发明的一个实施例中,设备服务108包括典型情况下与移动设备102一起运送到达的其他应用程序和服务以及功能部件。这样的服务可以包括例如日历服务、电话服务、照相机服务、全球定位系统(GPS)服务等。在本发明的一个实施例中,容器106使得设备服务108可以通过数据控制设施由原生应用程序使用。如果原生应用程序正在使用的服务是电话服务,那么原生应用程序就可以通过phone gap118访问该电话服务。为了本文的讨论,设备服务108和本地数据110都被视为外部资源,即使它们驻留在移动设备102上,因为这些资源不包含在容器106之内。
为了本文讨论,由服务器104提供的资源也被视为外部资源,因为这样的资源对于容器106以及移动设备102是外部的。例如,服务器104可以是企业服务器。移动设备102可以通过一个或多个网络,典型情况下,包括一个或多个无线网络和因特网来访问服务器104。在移动设备102上执行的原生应用程序可以从服务器104上驻留的资源请求远程网页。在这样的情况下,容器106的组件120可以判断在远程网页内指定的可执行代码的哪些部分被允许在移动设备102上执行。如果这样的可执行代码的一定的部分被认为有安全风险,组件120可以防止这些部分在移动设备102上执行。由原生应用程序采用的远程网页可以包括诸如ADF移动140、ADF面向RC 142和第三方UEL144的资源。ADF移动140包括原生应用程序可以利用的一组控制。这样的控制可以显示在网络视图114之内。ADF面向RC 142无限制地包括布局组件、表和树的组件、值列表(LOV)组件、输入组件、导航组件、输出组件、询问组件、数据可视化组件等。
作为补充或替代,原生应用程序可以对服务器104上的网络服务146进行SOAP或REST调用,以便从服务器104获得数据。尽管原生应用程序可以使用网络服务146作为获取和存储应用程序数据的主渠道,但是作为补充原生应用程序可以在移动设备102上本地高速缓存这样的数据。例如,原生应用程序可以把这样的数据存储在本地数据110之内,以及/或者原生应用程序可以把这样的数据保留在分配给容器106的随机存取存储器之内。
嵌入JVM、运行时间库和应用程序代码作为原生应用程序中的从属环境
本文介绍的技术使JVM、运行时间库和应用程序代码能够作为从属环境被嵌入到原生应用程序内。这种嵌入使JAVA代码能够作为原生应用程序(它可能尚未以JAVA编写)的一部分被执行。在本发明的一个实施例中,JVM 116以及运行时间库和JAVA应用程序代码被嵌入在原生应用程序之中,使原生应用程序也可能执行JAVA代码,即使在移动设备102上没有另外驻留的独立的JAVA运行时间环境情况下。
嵌入式JVM 116提供了把JAVA程序的执行嵌入到原生应用程序之中的方法。这允许例如用户界面由原生应用程序呈现同时商业逻辑或其他代码在JAVA环境内执行。在本发明的一个实施例中,在由JVM 116创建和管理的若干线程内JAVA代码与应用程序的原生部分独立且异步地执行。把JVM 116嵌入到原生应用程序之内使得原生应用程序对JAVA代码的使用有可能不要求该原生应用程序依赖于原生应用程序外部的任何JAVA运行时间环境。在由于技术或商业原因,这样的独立外部JAVA运行时间环境不可用或被禁止的情况下,这样的益处尤为可贵。因为JVM 116被嵌入到原生应用程序之内,所以原生应用程序外部的实体根本不必知晓JVM 116存在;原生应用程序可以与外部资源交互,仿佛JVM 116根本不存在。
根据本发明的实施例,实际JAVA代码以如下方式被嵌入在原生 应用程序(它有可能不是以JAVA编写)的内部:应用程序的原生代码和JAVA代码能够交互并彼此合作。这种方式可以与仅仅使用原生代码实施JAVA程序的功能的方式形成对照。
在本发明的一个实施例中,容器106包括以下组件到移动设备102的原生操作系统的端口:CVM JVM、CDC。基础简档(profile)、安全可选包以及JSR-169(JDBC)运行时间库。JVM和运行时间库被包装为与原生应用程序链接的原生库。本发明的若干实施例包括使得JVM 116能够由原生应用程序的代码执行的原生应用程序编程接口(API)。这种API提供了把若干运行时间参数和初始JAVA类都传递到JVM 116的能力。在应用程序开发人员创建原生应用程序之时,运行时间库的若干部分可以被置于ROM以便增加运行时间性能和减少启动时间。应用程序开发人员能够使用标准的JAVA工具调试其JAVA代码,即使JAVA代码被嵌入到原生应用程序中。应用程序开发人员也可以得到这种能力,无论应用程序开发人员是否正使用原生调试器。
在本发明的一个实施例中,容器106包括一条或多条虚拟机通道136。在本发明的一个实施例中,响应JAVA代码第一次需要被原生应用程序使用,容器106根据在该原生应用程序内嵌入的库,创建JVM116及其子系统。因此,在本发明的一个实施例中,JVM 116及其子系统的创建以缓慢方式执行——被推迟到其执行变得需要时。例如,JVM 116及其子系统的创建可以是响应原生应用程序对JAVA命令的调用。作为替代,JVM及其子系统的创建可以是响应原生应用程序对JAVA绑定的引用。
在一个实施例中,绑定的JAVAScript部分检测到该绑定需要在JAVA子系统内被访问。响应检测到这种情况,JAVAScript部分经由phone gap 118做出引用调用。容器106截取phone gap命令。响应截取到phone gap命令,容器106判断JVM 116及其子系统是否仍然处于执行形式。响应JVM 116及其子系统不处于执行形式的判断,容器106根据在该原生应用程序中嵌入的库创建JVM 116及其子系统。容 器106可以执行线程派生指令(fork)以便创建JVM 116及其子系统。在本发明的一个实施例中,除了创建JVM 116及其子系统外,容器106还建立了至少一条虚拟机通道136。这种虚拟机通道形成了容器106与JVM 116的子系统之间的通信连接。更具体地说,在一个实施例中,虚拟机通道形成了容器106与JVM 116的子系统内被称为功能部件环境管理器的微服务器之间的连接。这种功能部件环境管理器具有对JVM 116的子系统内的全部绑定和资源的控制。
在本发明的一个实施例中,为JVM 116的子系统内的每个单独功能部件都另外创建了虚拟机通道136的单独通道。每条这样的虚拟机通道都是网络视图114与该虚拟机通道与之相连的(JVM 116的子系统内)特定功能部件之间的对等通信通道。虚拟机通道136的创建在若干平行实体之间创建了配对:在网络视图114与虚拟机通道与之相连的的功能部件之间。因此,网络视图114可以使用消息传送系统经由每个功能部件自己的虚拟机通道与该功能部件交互。
此后,每当原生应用程序请求在JVM 116的子系统内驻留的JAVA对象的属性时,该JAVA对象的虚拟机通道用于对于应用程序开发人员透明地检索该属性。这个属性对于应用程序开发人员透明地被放置在原生应用程序的存储器地址空间中由其使用。原生应用程序然后可以经由正常的存储器存取操作从它自己的存储器地址空间访问该属性。
在一个实施例中,为了提高系统的速度,尽可能避免原生应用程序在JVM 116的子系统中的引用。为了有助于避免这样的引用,在一个实施例中,用以上讨论的方式从JVM 116的子系统获得的数据被高速缓存在JVM 116的子系统之外的、原生应用程序的存储器地址空间中。在一个实施例中,经由不要求应用程序开发人员知晓或涉及、容器106自动实施的后台通道通信,实现了高速缓存相干性。
除了使用以上介绍的技术读取JAVA对象的若干属性之外,原生应用程序还能够使用下面介绍的若干技术以便设置这些JAVA对象的若干属性。在一个实施例中,经由在网络视图114内保留的透写高速 缓存实现这些JAVA对象的若干属性的设置。响应网络视图114检测到已经把某个值写入到透写高速缓存,网络视图114使用虚拟机通道136中适当的一条通道使被写入值传播到该值属于其属性的适合JAVA对象。因此,在JVM 116的子系统内的JAVA对象的属性从透写高速缓存被更新。
在本发明的一个实施例中,JVM 116的子系统包括确认机构,它在允许若干值被赋予JAVA对象之前判断类型是否适合。例如,响应检测到正在进行把字符串类型的值赋予浮点类型属性的尝试,确认机构可以检测出所尝试的赋值是无效的。响应检测出所尝试的赋值是无效的,确认机构阻止该赋值并发出原生应用程序被设计为应对的异常事件。此外,确认机构使相关的透写高速缓存条目反映出在尝试无效赋值前该条目包含的值。作为替代,对JAVA对象属性的有效改变被传播到网络视图114,然后它可以刷新原生应用程序对移动设备102的用户的呈现,以便在与用户界面相关时反映出该变化。
在本发明的一个实施例中,原生应用程序的网络视图114尝试调用JVM 116的子系统内JAVA对象的方法。网络视图114通过对phonegap 118做出调用而尝试调用这种方法。容器106截取phone gap命令。响应截取到phone gap命令,容器106把该命令放置在虚拟机通道136中与该方法调用所属的JAVA对象相连的一条通道中。JVM 116的子系统的组件然后调用与适合的JAVA对象相关的方法。
在某些情况下,这样的方法调用可能属于在服务器104上而不是移动设备102上驻留的资源。响应检测到该方法调用属于这样的外部资源,容器106使REST网络服务调用对服务器104上网络服务146中适合的服务做出。服务器104处理在该调用内做出的请求并向容器106返回响应。容器106响应式地使该响应内包含的数据传播到JVM116的子系统内的相关JAVA对象。以类似于以上介绍的方式,执行了绑定更新并且更新后的值被传播到网络视图114,它可以相应地刷新用户界面。
在本发明的一个实施例中,每当从容器106对服务器104做出 REST调用时,该调用都经过组件120。组件120响应式地判断该调用是否需要安全措施,以及需要时,需要的安全措施种类。组件120可以检测出在做出REST调用时要使用的安全协议类型。如果该调用请求的是单登录功能,那么组件120可以判断该登录的适合证书是否驻留在移动设备102上。组件120可以把这些证书嵌入在调用之内然后再把该调用向前发送到服务器104。
在本发明的一个实施例中,取决于从网络服务146收到的响应的内容,网络视图114可以判断某些或全部内容应当被存储在移动设备102上驻留的多个储存库(repository)中。例如,响应网络服务响应指定了联系人列表的判断,网络视图114可以判断在列表内的若干联系人应当被放置在移动设备102的联系人列表之内;这个联系人列表可以在原生应用程序外部并与之无关。响应这样的判断,网络视图114——以及更具体地说,ADF控制器128可以使指定该内容的命令被发送到phone gap 118。响应收到命令,phone gap118可以与设备服务108对接并使适合的服务(如联系人列表服务)接收和处理由该命令指定的内容。在例如联系人列表服务的情况下,这种处理可以涉及把(先前从服务器104的网络服务应答中收到的)若干联系人存储在由设备服务108内联系人列表服务所保持的联系人列表之内。
在一个实施例中,容器106使用JAVA数据库连接(JDBC)和数据库驱动器,把数据存储到本地数据110中以及从其检索数据。容器106与本地数据110之间的通信可以是加密的或者不加密的。原生应用程序可以使用本地数据110作为数据库,以管理原生应用程序的状态数据。本地数据110内的数据可以用于设置JVM 116的子系统内JAVA对象的若干属性。随后,原生应用程序的用户可以经由网络视图114呈现的用户界面访问这些JAVA对象的若干属性。同样,从本地数据110检索的数据可以被高速缓存在容器106之内,以便避免容器106与容器106外资源之间的更昂贵事务处理。
创建功能部件并装配成移动应用程序的规范机制
在本发明的一个实施例中,向用户比如应用程序开发人员提供创建更小的应用程序功能部件的规范机制。如本文所用,功能部件是呈现与商业逻辑的结合。规范机制使得这些更小的功能部件能够被装配成单个移动应用程序同时保持清晰的分离状态。为了预防任何个体功能部件被破坏或篡改,在一个实施例中,每个功能部件都在单独的沙箱中,使它对同一移动应用程序的其他功能部件的直接暴露被限制或完全消除。在本发明的一个实施例中,移动应用程序的呈现与该移动应用程序的商业逻辑分离,这是通过把它们的每一个都放置在与其他应用程序层隔离的单独的、截然不同的应用程序层之中实现的。这些层的每一层都具有单独的代码、数据和生命周期。有益的是,本文公开的技术使多个脱节的功能部件能够以隔离方式混合在一起,使得更复杂的应用程序能够快速地开发。
本文公开的技术使可以被视为迷你应用程序的多个应用程序功能部件能够被合并在一起成为单一应用程序。为了促进或限制功能部件数据的可见度,支持多个不同的应用程序作用域(scope)、功能部件作用域和页面流作用域变量。使用本文公开的技术,开发人员能够判断哪个数据正被暴露于元数据驱动的应用程序的各个功能部件。
为了能够把多个不同的应用程序功能部件装配成单一应用程序,本发明的实施例采用了规范机制。在一个实施例中,这种规范通过使用表达式语言实现。所用的表达式语言可以是例如标准的表达式语言。在本发明的一个实施例中,所用的表达式语言是JAVA统一表达式语言。
JAVA统一表达式语言提供了简化JAVA服务器页面(JSP)中表达式的方法。它是简单的语言,用于访问隐含对象和JAVA类,并且以简练(elegant)方式操纵若干集合。该语言提供了使用JSP脚本元件之外的运行时间表达式的能力。JAVA统一表达式语言提供了可插入的可扩展的解析器机制,以及从网页设置数据和调用若干方法的方式。关于JAVA统一表达式语言的补充细节能够在“The JAVA EE5Tutorial”(2010 Oracle)中找到,在此引用作为参考。
在本发明的一个实施例中,容器106包括以JAVAScript构建的语法分析程序和求值程序以及以JAVA构建的语法分析程序和求值程序。这些语法分析程序和求值程序对移动应用程序使用的若干网页中包含的JAVA统一表达式语言的表达式进行语法分析和求值。因为容器106包括JAVAScript语法分析程序和求值程序,所以有可能在不采用JAVA引擎的情况下可以完成某些表达式的语法分析和求值,这能够产生执行速度的收益。一旦从JVM 116的子系统一开始就已经获得了JAVA对象的若干属性,就可以把这些属性高速缓存并在稍后使用JAVAScript访问。相反,在本发明的一个实施例中,使用JAVAScript语法分析程序和求值程序已经被语法分析和求值的若干对象的属性被高速缓存在JVM 116的子系统之内,所以此后JAVA语法分析程序和求值程序能够访问这些对象的属性,而无需JVM 116的子系统外的引用。
在本发明的一个实施例中,在容器106内发生的每个数据改变事件都使得同一数据的两个镜像副本被修改:JVM 116的子系统(JAVA层)内的一个副本和网络视图114(JAVAScript层)内的一个副本。因此,在本发明的一个实施例中,对网络视图114或JVM 116内数据的改变被自动地推送到网络视图114和JVM 116中的另一个。
根据本发明的实施例,保持功能部件之间的隔离是通过把每个对象的数据以及任何高速缓存中驻留的该数据放入沙箱来实现的。因此,在本发明的一个实施例中,预防JVM 116的子系统中的每个JAVA对象访问在该子系统中任何其他JAVA对象的数据,并且作为补充,预防每个这样的JAVA对象访问任何其他JAVA对象的高速缓存数据(如在网络视图114中)。此外,在本发明的一个实施例中,子系统116中的每个JAVA对象都具有虚拟机通道136中不与其他JAVA对象共享的它自己的一条通道。在本发明的一个实施例中,JAVA对象与该JAVA对象在网络视图114中的模拟(analogue)之间的通信通过分配给该JAVA对象及其在网络视图114中的模拟的特定虚拟机通道排他地进行。
在本发明的一个实施例中,每个单独的应用程序功能部件都以排他地分配给该应用程序功能部件而不包括其他功能部件的单独的JAVA类加载器加载。系统类加载器加载应用程序作用域的全部类。不过,每个功能部件可以包含它自己的类加载器,它是系统类加载器的子组件。因为每个功能部件由它自己的类加载器加载,所以功能部件都不能直接访问任何其他功能部件的数据。即使在同一类文件中定义了两个单独的功能部件时也是这种情况。
在本发明的一个实施例中,移动应用程序被构建为一组项目。这些项目之一被指派为应用程序控制器项目。被放置在应用程序控制器项目中的全部对象和数据在作用域上都被视为系统范围的。相反,每个功能部件都具有它自己的单独项目。每个功能部件可以容纳一组多个类。根据某实施例,特定功能部件的类加载器只能够访问由该特定功能部件容纳的在所述组的类中的类。一个功能部件的类加载器不能定位由其他功能部件容纳的类。不过,如果某个类被提升到应用程序控制器项目中,那么该类就能够由全部功能部件的类加载器定位,因为此时该类的作用域已经变为系统范围的。经由这样的提升到系统范围作用域,即使在强有力的沙箱环境中也能够在功能部件之间共享数据。
用于嵌入过程通信的虚拟通道
在一个实施例中,虚拟机通道(VM通道)提供了原生移动应用程序与嵌入式虚拟机之间通信的方式。在一个这样的实施例中,基础用户界面方面由原生应用程序执行,而商业逻辑由嵌入式虚拟机执行。为了提供这种划分,提供了超快通道作用机制,其允许在两个方向都有核心通道和框架命令以及应用程序级别的消息行进。
在一个实施例中,VM通道提供了双向受控的通信。该通信是超快和基于优先级的。此外,它对通道和消息都提供了可预测的生命周期。
在一个实施例中,VM通道提供的规范机制,用于呈现和商业逻 辑层在单一移动应用程序内通信,尽管它们在完全离散的环境和存储器空间中。VM通道对于与嵌入式虚拟机的交互是有用的。
VM通道的实施例被合并在Oracle公司出品的ADF移动框架产品中。
在一个实施例中,VM通道提供实现了原生实体与JAVA实体之间的通信流的消息传送框架。消息传送框架使得JAVA实体(如JAVA代码)能够向原生实体(即使用原生代码实施的实体)发送消息,使得原生实体进行该消息所对应的处理,使得原生实体能够向JAVA实体发送回从JAVA实体收到的消息所对应的响应,以及使得JAVA实体接收该响应。在另一方向上,原生实体可以使用VM通道向JAVA实体发送消息,并经由该VM通道接收来自该JAVA实体的响应消息。
在概念层次上,VM通道提供了两个端点之间的通信通道。一个端点可以是JAVA实体而另一个可以是原生实体。在一个实施例中,VM通道提供了JAVA消息传送系统与ADF消息传送之间的通信通道。
移动应用程序是为了在移动设备比如iPhone、黑莓、安卓手机等上执行而编写的应用程序。设备的原生应用程序是专门设计为在该设备的操作系统和机器固件上运行的应用程序。典型情况下,为特定设备编写的原生应用程序不得不修改或改造才能在具有不同操作系统和/或设备固件的不同设备上运行。例如,为iPhone编写的移动原生应用程序被设计为在苹果的iOS操作系统上运行。作为另一个实例,为安卓手机设计的移动原生应用程序被设计为在安卓操作系统上运行。可用于对原生应用程序进行编码的语言实例包括用于iPad/iPhone平台的Objective C、用于安卓平台的安卓JAVA、用于微软移动设备平台的C#等。应当理解,原生平台或原生语言的类型或性质并非意在限制本发明实施例的范围。VM通道可以用于各种不同的平台和原生应用程序。
在一个实施例中,VM通道实现了两个端点之间的异步对称双向消息传送。在一个实施例中,可以同时地开放多条VM通道,每条都 有它自己的生命周期。多条VM通道以集中方式管理。在一个实施例中,VM通道允许可变尺寸的消息传送。在一个实施例中,VM通道使消息之间能够指定相关性。相关性可以用于例如实施请求-响应消息传送范例。在一个实施例中,使用VM通道通信的消息可以区分优先级。
正如以上指出,VM通道实现了JAVA实体(如JVM)与原生实体之间的通信。这两个实体可以在一台移动设备上执行。在一个实施例中,JAVA实体和原生实体在同一过程空间中执行。在替代实施例中,JAVA实体和原生实体可以在不同的过程中执行。VM通道架构不要求JAVA实体和原生实体在同一过程空间中。这两个实体甚至不必在同一底板(backplane)上。
在一个实施例中,对于使用VM通道与原生实体通信的JAVA实体,JAVA实体可以用作包括原生实体的原生应用程序内的运行时间迷你引擎。应用程序的主程序是原生代码。JAVA实体是仅仅在原生代码应用程序内部运行的从属虚拟机。在另一个实施例中,JAVA实体可以是原生代码的同胞。
图2描绘了根据本发明实施例的VM通道如何可以促进原生实体与JAVA实体之间的消息流动的实例。正如图2所示,VM通道202方便了原生实体204与JAVA实体206之间的通信。在这个示例中,原生实体和JAVA实体是同一原生应用程序的一部分。该应用程序包(bundle)可以包括Objective C的可执行部分(*.exe)和编译进来的JAVA库。JAVA类文件被视为在JDM库内运行的资源。VM通道202使消息能够从原生实体204传递到JAVA实体206以及从JAVA实体206传递到原生实体204。
应用程序开发人员不必知道VM通道。应用程序开发人员可以照过去那样开发原生代码,例如,使用原生编码工具。应用程序开发人员可以使用诸如JDev(JDeveloper)的工具而开发JAVA代码。在一个实施例中,建立应用程序时,JAVA代码被编译为一串*.jar文件。然后这些*.jar文件被嵌入到原生应用程序中,例如作为属性文件或者 作为映像。启动CVM时,这些Jar文件被加载为数据并在CVM内执行。
再次参考图1,JAVA实体(显示为JVM116)被嵌入为由容器106表示的原生应用程序内的库。VM通道136被显示为在JVM 116与原生代码组件之间的箭头。原生实体和JAVA实体都具有在容器106的地址空间内它们自己的单独地址空间。VM通道136提供实现了两者之间的通信的通信通道。VM通道136允许使用消息传送协议在两个环境(即原生和JAVA)之间传送消息。
一条或多条VM通道可以同时存在,每条都通向不同的功能部件/关联。每条VM通道都提供了若干安全方面使得消息不能横跨边界从一条通道到另一条通道。VM通道在两个端点实体之间提供了点到点的通道。在一条VM通道上发送的消息不允许横跨到另一条VM通道(即没有异花授粉)。在一个实施例中,VM通道的若干端点在同一应用程序空间内但是在它们自己单独的地址空间中。两个端点不需要具有相同的处理id。当两个实体端点在它们自己单独的地址空间中运行时,VM通道实现了两者之间的通信。
多个原生实体能够使用VM通道与单个JAVA实体通信。同样,单个JAVA实体也能够使用VM通道与多个原生实体通信。可以创建一条或多条VM通道并用于两个实体之间的消息传送。
在一个实施例中,VM通道使用了联网风格分层协议进行消息通信。经由VM通道通信的消息包括头部和主体。主体存储着消息内容即有效负荷。头部包括经由VM通道通信消息所用的信息。在一个实施例中,头部包括若干信息,比如请求的标识、能够用于把响应消息关联到请求消息的关联信息(如关联id)、指示消息优先级的优先级信息(例如,给更高优先级消息高于更低优先级消息的优先选择)、服务品质信息以及其他信息。在一个实施例中,头部可以包括与不同层对应的多个头部。
VM通道负责在两个端点之间汇集和挖掘消息,其中一个端点可以处于JAVA环境而另一个处于原生代码。VM通道自身不明确消息 内容,即VM通道不知道/不关心正被通信消息的主体/有效负荷的实际内容。此外,经由VM通道通信的消息的尺寸不必是固定的。例如,一条消息可能是1字节,另一个是几字节,等等。
VM通道是双向的,即使用原生实体与JAVA实体之间的VM通道时,能够使用同一VM通道从原生实体向JAVA实体以及从JAVA实体向原生实体发送消息。在请求-响应情形下,能够从JAVA侧或从原生侧发起请求,同样能够从JAVA侧或从原生侧发送响应。
多条消息可以从任一端点注入到VM通道中。在一个实施例中,可以使用“供给-消费者”模型进行消息传送,其中供给者实体能够把多条消息发送到VM通道中,而消费者实体能够一次拾取一条消息、处理它,然后拾取下一条消息,以此类推。从而VM通道实现了对称双向异步消息传输协议。
可以向消息分配优先级,所以先处理VM通道内更高优先级的消息再处理更低优先级的消息。在一个实施例中,VM通道使用了基于优先级的队列以促进优先级消息传送。
在一个实施例中,VM通道使用在原生实体侧和JAVA实体侧的处理器。由VM通道收到的消息被提供给了在接收侧的处理器进行消息的进一步处理。在一个实施例中,处理器负责使请求与响应关联。
图3描绘了根据本发明实施例的VM通道的状态图。VM通道以未初始化的状态302开始。响应CREATE_CHANNEL消息的发送,VM通道转化到状态创建304。响应CREATE_CHANNEL_CONF消息的接收,VM通道转化到状态创建后306。响应LISTENING_IND消息的接收,VM通道转化到状态能够发送308。从状态308,如果收到了NOT_LISTENING_IND消息,那么VM通道转化回状态创建后306。作为替代,从状态308,如果收到了DELETE_REQ消息,那么VM通道转化到状态删除310。作为替代,从状态308,响应DELETE_REQ消息的接收和DELETE_CONF消息的发送,VM通道转化到状态删除后312。从状态310,响应DELETE_CONF消息的接收,VM通道转化到状态删除后312。
图4A和图4B描绘了根据本发明实施例的控制消息时序图,用于创建VM通道、注册VM通道的监听程序和删除VM通道。例如,在图4A中,消息从原生侧到JAVA侧横跨穿梭。一旦消息在VM通道中,在接收侧(如在JAVA侧)的通道管理器便检测出在VM通道中的消息存在。从VM通道中检索消息,并且将其传递到适合的处理器进行进一步处理。然后该消息可以得到处理并且可以发送回响应。响应消息从JAVA侧被推送到VM通道中并且经由VM通道通信到原生侧。在原生侧上的通道管理器然后检测出该消息的存在,从VM通道得到消息,并将其传递到原生侧的处理器进行进一步处理。在一个实施例中,处理器可以执行关联并且可以调用适合的响应处理器。
存在着在若干消息之间可以进行关联的多种方式。例如,在一个实例中,使用了相关/相关联ID完成关联。在一个实施例中,由发送器向VM通道发送请求消息时,在发送器侧保留了有关未决(pending)请求的信息。由发送器经由同一VM通道收到响应消息时,在未决请求信息中执行查找以确定该响应的对应请求。如果找到了这样的请求,那么使该响应与该请求关联并可以从未决请求信息中去除该请求。根据该响应是成功还是失败可以调用适合的回调。如果没有找到该响应的未决请求,那么可以指出出错状态并启动出错恢复处理。
在一个实施例中,存在着被视为主控的控制通道。请求者(如原生实体或JAVA实体)可以发送在两个端点之间创建附加VM通道的请求。控制通道然后创建所请求的VM通道。在两个端点之间可以对于要创建的VM通道发生协商后,再建立VM通道。在一个实施例中,可以发生多个层级的协商,例如,一个在应用程序层(ADF层——正确的路由、沙箱、相关),一个在协议层(VM通道层——确保消息的坚固安全稳定的环境)。对于多层方案可以使用多个头部部分。然后把处理器与所创建的VM通道的每侧相关联。在原生侧,可以以原生语言(如Objective C语言)编写一个或多个处理器。在JAVA侧,可以以JAVA编写一个或多个处理器。处理器可以被配置为执行多个功能,包括但是不限于进行相关、检测出错状态(如检查它是不是未 恳求的响应、无效响应)、安全和路由功能等。
在一个实施例中,VM通道确保了由VM通道收到的消息不被丢掉。VM通道确保了消息由在接收侧倾听的某人适合地处理。VM通道还处理超时、确定何时丢弃、执行VM通道的停用等。
VM通道提供了先前未得到的几种功能,尤其在移动设备上。VM通道提供不受尺寸或方向性限制同时提供了在有限/小复盖区中比如移动设备上的快速访问的异步通信机制。它提供了与优先级耦合的灵活性。它提供用于两个实体之间的通信的受控环境,两个实体可以是嵌入的也可以是外部的,无论其是发送者还是接收者。
硬件综述
图5是展示了根据本发明实施例可以使用的系统环境100的若干组件的简化框图。如图所示,系统环境500包括一台或多台客户机计算设备502、504、506、508,它们被配置为运行客户机应用程序,包括原生客户机应用程序以及可能的其他应用程序,比如网络浏览器等。在多个实施例中,客户机计算设备502、504、506和508可以与服务器512交互。
客户机计算设备502、504、506、508可以是通用个人计算机(包括例如个人计算机和/或膝上计算机,运行微软视窗和/或苹果麦金托什操作系统的多个版本)、蜂窝电话或PDA(运行软件比如微软视窗移动以及因特网、电子邮件、SMS、黑莓或其他通信协议启用),以及/或者运行各种各样已面市UNIX或似UNIX操作系统(无限制地包括各种各样的GNU/Linux操作系统)中任何一种的工作站计算机。作为替代,客户机计算设备502、504、506和508可以是任何其他电子设备,比如瘦客户机计算机、因特网启用的游戏系统以及/或者个人消息传送设备,能够在网络(如以下讨论的网络510)上通信。尽管以四台客户机计算设备显示了示范系统环境500,但是任何数量的客户机计算设备都可以支持。其他设备比如带有传感器等的设备可以与服务器512交互。
系统环境500可以包括网络510。网络510可以是本领域技术人员熟悉的任何类型的网络,它们能够使用各种各样已面市协议的任何一种支持数据通信,无限制地包括TCP/IP、SNA、IPX、AppleTalk等。仅仅作为实例,网络510可以是局域网(LAN),比如以太网、令牌环网等;广域网;虚拟网,无限制地包括虚拟私有网(VPN);因特网;内联网;外联网;公共交换电话网(PSTN);红外线网;无线网(如在IEEE 802.11协议组中任何一种下运行的网络,本领域公知的蓝牙协议以及/或者任何其他的无线协议);以及/或者这些和/或其他网络的任何组合。
系统环境500还包括一台或多台服务器计算机512,它们可以是通用计算机、专用服务器计算机(包括,例如PC服务器、UNIX服务器、中距离服务器、大型计算机、机架安装服务器等)、服务器场、服务器集群或者任何其他适合的布局和/或组合。在多个实施例中,服务器512可以适于运行一种或多种服务或软件应用程序。
服务器512可以运行操作系统,包括任何以上讨论的任何一种,以及任何已面市服务器操作系统。服务器512还可以运行各种各样的附加服务器应用程序以及/或者中间层应用程序的任何一种,包括HTTP服务器、FTP服务器、CGI服务器、JAVA服务器、数据库服务器等。示范数据库服务器无限制地包括Oracle、Microsoft、Sybase、IBM等出品的已面市服务器。
系统环境500还可以包括一个或多个数据库514、516。数据库514、516可以驻留在各种各样的位置。例如,数据库514、516中的一个或多个可以驻留在服务器512本地(和/或驻留在其中)的永久存储介质上。作为替代,数据库514、516可以远离服务器512,并经由基于网络的或专线连接与服务器512通信。在一组实施例中,数据库514、516可以驻留在本领域技术人员熟知的存储区域网络(SAN)中。同样,执行服务器512所属功能需要的任何文件都可以在适合时在服务器512上本地和/或远程存储。在一组实施例中,数据库514、516可以包括关系数据库,比如由Oracle提供的数据库,它们适于存储、 更新和检索数据以响应SQL格式的命令。
图6是根据本发明实施例可以使用的计算机系统600的简化框图。使用诸如系统600的系统可以实施例如服务器512或者客户机502、504、505或508。计算机系统600被显示为包括若干硬件元件,它们可以经由总线624电气耦接。这些硬件元件可以包括一个或多个中央处理单元(CPU)602、一台或多台输入设备604(如鼠标、键盘等)以及一台或多台输出设备606(如显示器设备、打印机等)。计算机系统600还可以包括一台或多台存储设备608。例如,存储设备608可以包括若干设备,比如磁盘驱动器、光存储设备以及固态存储器件,比如随机存取存储器(RAM)和/或只读存储器(ROM),它们可以是可编程的、闪速可更新的等。
计算机系统600可以另外包括计算机可读存储介质读出器612、通信子系统614(如调制解调器、网卡(无线或有线)、红外线通信设备等)以及工作存储器618,它可以包括以上介绍的RAM和ROM器件。在某些实施例中,计算机系统600还可以包括处理加速单元616,它可以包括数字信号处理器(DSP)、专用处理器等。
计算机可读存储介质读出器612能够进一步连接到计算机可读存储介质610,在一起(以及可选地与存储设备608结合地)综合地表示远程、本地、固定和/或可移动存储设备加存储介质,用于临时地和/或更持久地包含计算机可读信息。通信系统614可以允许与网络510以及/或者以上关于系统环境500介绍的任何其他计算机交换数据。
计算机系统600还可以包括若干软件元件,显示为当前位于工作存储器618之内,包括操作系统620和/或其他代码622,比如应用程序(它可以是客户机应用程序、网络浏览器、中间层应用程序、RDBMS等)。在示范实施例中,工作存储器618可以包括可执行代码和相关联的数据结构,用于以上介绍的依赖方和开放授权相关的处理。应当认识到,计算机系统600的替代实施例可以具有以上介绍的实施例的无数变种。例如,定制的硬件也有可能使用以及/或者特定的元件有可能以硬件、软件(包括可移植软件比如小程序)实施,或者兼而有之。 另外,可以采用到其他计算设备比如网络输入/输出设备的连接。
用于包含代码或代码的若干部分的存储介质和计算机可读介质可以包括本领域公知或所用的任何适合介质,包括存储介质和通信媒介,比如但是不限于以任何方法或技术实施的易失性和非易失性(非暂时性)可移动和不可移动的介质,用于存储和/或传送信息,比如计算机可读指令、数据结构、程序模块或其他数据,包括RAM、ROM、EEPROM、闪存或其他存储器技术、CD-ROM、数字万能盘(DVD)或其他光存储器、盒式磁盘、磁带、磁盘存储器或其他磁性存储设备、数据信号、数据传输或者能够用于存储或传送所期望的信息并且能够由计算机访问的任何其他介质。
尽管已经介绍了本发明的特定实施例,但是多项修改、变更、替代结构和等效内容也包含在本发明的范围之内。本发明的实施例不限于运行在一定的具体数据处理环境之内,而是自由地运行在多个数据处理环境之内。另外,尽管使用事务处理和步骤的特定序列已经介绍了本发明的实施例,但是对于本领域的技术人员应当显而易见,本发明的范围不限于所介绍的事务处理和步骤的序列。
另外,虽然使用硬件和软件的特定组合已经介绍了本发明的实施例,但是应当理解,硬件和软件的其他组合也在本发明的范围之内。本发明的实施例可以仅仅用硬件实施,或者仅仅用软件实施,或者使用其组合实施。
所以,说明书和附图应当在展示的而不是限制的意义下考虑。不过,明显的是可以对其做出增加、减少、删除以及其他修改和改变而不脱离更广义的实质和范围。

用于嵌入过程通信的虚拟通道.pdf_第1页
第1页 / 共25页
用于嵌入过程通信的虚拟通道.pdf_第2页
第2页 / 共25页
用于嵌入过程通信的虚拟通道.pdf_第3页
第3页 / 共25页
点击查看更多>>
资源描述

《用于嵌入过程通信的虚拟通道.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类加载器加载。系统类加载器加载应用程序作用域的全部类。不过,每个功能部件可以包含它自己的类加载器,它是系统类加载器的子组件。因为每。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 物理 > 计算;推算;计数


copyright@ 2017-2020 zhuanlichaxun.net网站版权所有
经营许可证编号:粤ICP备2021068784号-1