基于OSGI的类加载隔离系统和方法技术方案

技术编号:8723885 阅读:302 留言:0更新日期:2013-05-22 19:29
本发明专利技术提供一种基于OSGI的类加载隔离系统和方法,所述系统包括:转换器,用于将web应用转换为标准wab;处理器,用于为所述web应用创建虚拟组件集合;过滤器,用于为所述虚拟组件集合设置隔离关系。所述方法包括:S1:将web应用转换成标准wab,并为所述web应用创建虚拟组件集合;S2:为所述虚拟组件集合创建过滤器;S3:根据所述过滤器中的可见性列表,为所述虚拟组件集合设置隔离关系。本发明专利技术通过提出一种基于OSGI的类加载隔离系统和方法,是面向JavaEE平台下的web应用,根据具体需求细粒度的控制应用间类隔离性和服务的隔离性,且配置更加灵活。

【技术实现步骤摘要】

本专利技术涉及网络及计算机
,特别涉及一种基于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形式本文档来自技高网
...

【技术保护点】
一种基于OSGI的类加载隔离系统,其特征在于,所述系统包括:转换器,用于将web应用转换为标准wab;处理器,用于为所述web应用创建虚拟组件集合;过滤器,用于为所述虚拟组件集合设置隔离关系。

【技术特征摘要】
1.一种基于OSGI的类加载隔离系统,其特征在于,所述系统包括: 转换器,用于将web应用转换为标准wab ; 处理器,用于为所述web应用创建虚拟组件集合; 过滤器,用于为所述虚拟组件集合设置隔离关系。2.根据权利要求1所述的系统,其特征在于,所述web应用为bundle形式或war形式。3.根据权利要求1所述的系统,其特征在于,所述虚拟组件集合运行在同一个OSGI运行时内。4.根据权利要求1所述的系统,其特征在于,所述虚拟组件集合由应用组件bundles和过滤器组成。5.根据权利要求1或4任一项所述的系统,其特征在于,所述过滤器包括:bundle可见列表、package可见列表或service可见列表。6.一种基于...

【专利技术属性】
技术研发人员:于洋
申请(专利权)人:北京东方通科技股份有限公司
类型:发明
国别省市:北京;11

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1