基于osgi的类加载隔离系统和方法

文档序号:6398490阅读:291来源:国知局
专利名称:基于osgi的类加载隔离系统和方法
技术领域
本发明涉及网络及计算机技术领域,特别涉及一种基于OSGI的类加载隔离系统和方法。
背景技术
随着计算机网络技术的飞速发展,对于应用服务器,如何设计类加载结构来满足应用服务器内类的时而隔离、时而共享的问题日益突兀。传统应用服务器实现的类加载器都是链式结构,类加载器链的链尾通常都负责加载应用下的私有类,越靠近链的前端,负责加载的类越贴近系统级公共类。因此传统应用服务器的作法就是将需要共享的类放在类加载器链前端能加载到的位置,例如系统Iib目录,或者通用类common目录下,然后配置应用的类加载采用双亲委托方式,即,web应用中的类由父类加载器优先加载。当需要隔离时,就将要隔离的类放在类加载器链尾负责加载的私有类位置,例如web应用的WEB-1NF/lib目录下,然后配置web应用的类加载机制为子优先,即web应用中的类由应用的类加载器优先加载。比较典型的,像EAR (EnterpriseArchive File)应用中的多个web应用就可以使用这种方式来控制彼此间的隔离或共享性。但是这种实现方式不够灵活,而且粒度太粗。例如无法实现独立web应用A中的类对独立web应用B是隔离的,但是应用A中的类对独立web应用C共享。而且只能控制到jar包这个级别的隔离性,假如对于某个jar包,有些package的类想被共享,有些package的类想被隔离,那么也是无法做到的。另外,传统隔离性的控制是在部署就决定的,运行时无法实施变更。随着OSGi (Open Service Gateway Initiative)技术的日益发展,很多应用服务器厂商都基于OSGi框架做了新的版本。利用OSGi框架独特的两级网状类加载结构,可以做出完全不同于传统应用服务器的类隔离设计。其中一种典型的设计方式就是为每个应用分配一个单独的OSGi运行时,这样每个应用所在的OSGi运行时具有天然隔离性,也就保证了应用彼此间的类隔离性。但是这种设计也存在一个明显缺陷,那就是应用不能够解除隔离性。

发明内容
(一)解决的技术问题本发明解决的技术问题是提出一种基于OSGI的类加载隔离系统和方法,以解决目前类加载隔离系统灵活性低、粗粒度的问题。(二)技术方案本发明提出了一种基于OSGI的类加载隔离系统,其特征在于,所述系统包括:转换器,用于将web应用转换为标准wab ;处理器,用于为所述web应用创建虚拟组件集合;
过滤器,用于为所述虚拟组件集合设置隔离关系。优选地,所述web应用为bundle形式或war形式。优选地,所述虚拟组件集合运行在同一个OSGI运行时内。优选地,所述虚拟组件集合由应用组件bundles和过滤器组成。优选地,所述过滤器包括:bundle可见列表、package可见列表或service可见列表。本发明还提出了一种基于OSGI的类加载隔离方法,其特征在于,所述方法包括:S1:将web应用转换成标准wab,并为所述web应用创建虚拟组件集合;S2:为所述虚拟组件集合创建过滤器;S3:根据所述过滤器中的可见性列表,为所述虚拟组件集合设置隔离关系。优选地,所述web应用为bundle形式或war形式。优选地,所述虚拟组件集合运行在同一 OSGI运行时内。优选地,在步骤S2之后还包括:设置所述过滤器的可见性列表。优选地,步骤S3之后还包括:将所述web应用安装在所述虚拟组件集合中,并启动所述web应用。(三)有益效果本发明通过提出一种基于OSGI的类加载隔离系统和方法,是面向JavaEE平台下的web应用,根据具体需求细粒度的控制应用间类隔离性和服务的隔离性,且配置更加灵活。


图1为本发明提出的系统结构图;图2为本发明提出的虚拟组件集合结构图;图3为本发明提出的过滤器结构图;图4为本发明提出的方法流程图;图5为本发明提出的方法流程示意图。
具体实施例方式下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述。本发明提出了一种基于OSGI的类加载隔离系统,如图1所示,所述系统包括:转换器,用于将web应用转换为标准wab ;处理器,用于为所述web应用创建虚拟组件集合;过滤器,用于为所述虚拟组件集合设置隔离关系。所述系统还包括web应用类加载器,其中,web应用间的类隔离性由web应用类加载器和虚拟组件集合间的过滤器协同控制。所述web应用为bundle形式或war形式。wab转换器将传统war形式或bundle形式开发的web应用转换成标准wab,并为该web应用创建虚拟组件集合。所述虚拟组件集合运行在同一个OSGI运行时内,且所述虚拟组件集合不但可以控制彼此间的类隔离性,还可以控制彼此间的OSGI服务隔离性。如图2所示为基于OSGI的JavaEE应用服务器的类加载服务器的虚拟组件集合结构图,所述虚拟组件集合由应用组件bundles和过滤器组成。应用组件bundles是组成web应用的具体元素,一个应用组件bundle就是web应用中的一个模块。所述过滤器用于设置虚拟组件集合之间的隔离关系。如图3所示为基于OSGI的JavaEE应用服务器的类加载服务器的过滤器结构图,所述过滤器包括:bundle可见列表、package可见列表或service可见列表。bundle可见列表控制该虚拟组件集合中的哪些bundle对目标虚拟组件集合可见;package可见列表控制该虚拟组件集合中的哪些包对目标虚拟组件集合可见service可见列表控制该虚拟组件集合中暴露的哪些OSGi service对目标虚拟组件集合可见。由于虚拟组件集合之间的可见性是双向的,因此需要根据实际需求分别为其设置过滤器。如果两个虚拟组件集合之间没有设置过滤器,那么这两个虚拟组件集合将完全隔离,即bundle、类,service都是彼此不可见的。这个默认效果刚好适用于JavaEE应用服务器的应用间类加载隔离需求,如果想解除隔离,或部分解除隔离,那么只需添加相应的过滤器即可。而对于JavaEE应用服务器系统级的类和service,通常都需要对应用级的虚拟组件集合可见,以便顺利完成应用部署和请求处理流程。相反地,应用级虚拟组件集合里的类对JavaEE应用服务器的运行没有任何作用,但应用级虚拟组件集合里的service需要对JavaEE应用服务器系统级虚拟组件集合可见,以完成一些发布订阅模型的功能。为实现上述通用需求,需要添加系统级虚拟组件集合对应用级虚拟组件集合的过滤器以及应用级虚拟组件集合对系统级虚拟组件集合的过滤器。其中系统级虚拟组件集合端的过滤器中,需要将系统级核心类所在bundle,核心类所属package,核心暴露的OSGiservice分别添加到隔离关系过滤器的bundle可见列表、package可见列表和service可见列表中;在应用级虚拟组件集合的隔离关系过滤器中,仅需要将应用暴露的OSGiservice添加到隔离关系过滤器的service可见列表中。本发明还提出了一种基于OSGI的类加载隔离方法,如图4所示,所述方法包括:S1:将web应用转换成标准wab,并为所述web应用创建虚拟组件集合;S2:为所述虚拟组件集合创建过滤器;S3:根据所述过滤器中的可见性列表,为所述虚拟组件集合设置隔离关系。所述web应用为bundle形式或war形式。所述虚拟组件集合运行在同一 OSGI运行时内。在步骤S2之后还包括:设置所述过滤器的可见性列表。步骤S3之后还包括:将所述web应用安装在所述虚拟组件集合中,并启动所述web应用。如图5所示,本发明基于OSGi的JavaEE应用服务器的类加载隔离方法为:首先使用转换器将传统war转换为标准wab,虚拟组件集合处理器为传统war创建一个空的虚拟组件集合,然后为该虚拟组件集合创建过滤器,根据实际需求,如果需要设置对其他不同虚拟组件集合有不同的隔离性,那么就需要创建多个对应的过滤器,又由于隔离性的双向性,也需要从相反地方向为其他虚拟组件集合创建对应的过滤器,之后设置每个过滤器的可见性列表,此处准备工作已基本就绪,然后开始调用虚拟组件集合管理器提供的api将有关联的虚拟组件集合用隔离关系过滤器连接起来,再将web应用组件安装到该虚拟组件集合中,这样web应用组件对其他虚拟组件集合的可见性就与其所在虚拟组件集合对其他虚拟组件集合的可见性相同了。最后启动web应用组件,至此隔离性设置全部完成。以上实施方式仅用于说明本发明,而并非对本发明的限制,有关技术领域的普通技术人员,在不脱离本发明的精神和范围的情况下,还可以做出各种变化和变型,因此所有等同的技术方案也属于本发明的范畴,本发明的专利保护范围应由权利要求限定。
权利要求
1.一种基于OSGI的类加载隔离系统,其特征在于,所述系统包括: 转换器,用于将web应用转换为标准wab ; 处理器,用于为所述web应用创建虚拟组件集合; 过滤器,用于为所述虚拟组件集合设置隔离关系。
2.根据权利要求1所述的系统,其特征在于,所述web应用为bundle形式或war形式。
3.根据权利要求1所述的系统,其特征在于,所述虚拟组件集合运行在同一个OSGI运行时内。
4.根据权利要求1所述的系统,其特征在于,所述虚拟组件集合由应用组件bundles和过滤器组成。
5.根据权利要求1或4任一项所述的系统,其特征在于,所述过滤器包括:bundle可见列表、package可见列表或service可见列表。
6.一种基于OSGI的类加载隔离方法,其特征在于,所述方法包括: 51:将web应用转换成标准wab,并为所述web应用创建虚拟组件集合; 52:为所述虚拟组件集合创建过滤器; 53:根据所述过滤器中的可见性列表,为所述虚拟组件集合设置隔离关系。
7.根据权利要求6所述的方法,其特征在于,所述web应用为bundle形式或war形式。
8.根据权利要求6所述的方法,其特征在于,所述虚拟组件集合运行在同一OSGI运行时内。
9.根据权利要求6所述的方法,其特征在于,在步骤S2之后还包括:设置所述过滤器的可见性列表。
10.根据权利要求6所述的方法,其特征在于,步骤S3之后还包括:将所述web应用安装在所述虚拟组件集合中,并启动所述web应用。
全文摘要
本发明提供一种基于OSGI的类加载隔离系统和方法,所述系统包括转换器,用于将web应用转换为标准wab;处理器,用于为所述web应用创建虚拟组件集合;过滤器,用于为所述虚拟组件集合设置隔离关系。所述方法包括S1将web应用转换成标准wab,并为所述web应用创建虚拟组件集合;S2为所述虚拟组件集合创建过滤器;S3根据所述过滤器中的可见性列表,为所述虚拟组件集合设置隔离关系。本发明通过提出一种基于OSGI的类加载隔离系统和方法,是面向JavaEE平台下的web应用,根据具体需求细粒度的控制应用间类隔离性和服务的隔离性,且配置更加灵活。
文档编号G06F9/445GK103116510SQ20131002697
公开日2013年5月22日 申请日期2013年1月21日 优先权日2013年1月21日
发明者于洋 申请人:北京东方通科技股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1