gembin

OSGi, Eclipse Equinox, ECF, Virgo, Gemini, Apache Felix, Karaf, Aires, Camel, Eclipse RCP

HBase, Hadoop, ZooKeeper, Cassandra

Flex4, AS3, Swiz framework, GraniteDS, BlazeDS etc.

There is nothing that software can't fix. Unfortunately, there is also nothing that software can't completely fuck up. That gap is called talent.

About Me

 

OSGI:Class Loading Architecture

OSGI的核心可以说就是它的类加载机制。在OSGI 容器内不同的Bundle可以共享同一个Java虚拟机。在同一个虚拟机中,Bundle可以对其他Bundle隐藏package或者class,当然也可以将package共享给其他的Bundle

隐藏或者共享Java package给其他Bundle的关键机制就是类加载器从Bundle空间按规则定义的类的子集中加载类。每一个Bundle都会有自己的类加载器。

类加载器从如下的类路径中加载类和资源:

http://yanfei30.spaces.msn.com/ 类空间的所有类对于一个Bundle来说都是可以访问的。为了防止出现同一个类空间出现两个相同类名(fully qualified name)的类,然而OSGI平台分离的类空间可能会出现两个相同类名的类。因此,OSGIModule层具有不同版本的类存在于同一个Java虚拟机中的机制。

 

在一个Bundle被加载之前,OSGI FrameworkBundlemanifest.mf文件进行解析,并在importerexporter之间建立配线(wired),配线(wired)实际上就是importerexporter之间的连接。一个配线(wired)同在menifest文件中定义的importerexporter的限制相关。一个有效的配线(wired)必须满足所有的限制。这些限制包括版本限制、包限制、属性限制、和Bundle的提供者限制。在建立配线时,OSGI Framework会根据这些限制来选择最合适的类加载。

BundleOSGI Framework中安装后,并不会立即创建一个Bundle的类加载器,只有当Bundle处于resolved状态后才会创建一个类加载器,BundleFragment是不会立即创建一个类加载器的,只有当该Fragment被使用时才会创建类加载器。

当一个Bundle的类加载器加载类或者查找资源时必须遵循下面的顺序:

1. 如果类或者资源在java.*包内,该请求会被委托给父类加载器。否则,继续下面步骤的查找。如果请求委托给父类加载器,并且该类或资源没找到,则查找结束并且请求失败。

2. 如果查找的类或资源在boot delegation列表内(org.osgi.framework.bootdelegation),请求会被委托给父类加载器,如果类或资源没找到,则查找结束。

3. 如果查找的类被Import- Package导入或者在早先的加载中被动态导入,则请求被分发给exporting bundle’s class loader

4. 如果查找的类被Require-Bundle导入,该类在其他的Bundle内,则请求被分发给其他Bundle的类加载器。

5. bundle的内部类加载器中进行查找,如果类或者资源没有找到,则继续下面的查找步骤。

6. bundlefragment内部类加载器中进行查找,并按照fragmentbundle ID倒序进行查找。如果没有找到,继续下面的步骤。

7. 如果要查找的类被bundle是被导出的或者被bundle导入的,使用(Import-Package or Require- Package),则查找终止,类没有找到。

8. 否则,如果一个类是被使用DynamicImport-Package导入的,则尝试动态导入该类。如果找到一个合适的exporter,则建立一个配线,并转到第3步进行处理。如果动态配线没有建立,则查找失败。

9. 如果dynamic import建立,请求分发给exporting bundle的类加载器。如果exporting bundle的类加载器没有找到类或者资源,则查找失败。


posted on 2008-07-07 01:40 gembin 阅读(740) 评论(0)  编辑  收藏 所属分类: OSGi


只有注册用户登录后才能发表评论。


网站导航:
 

导航

统计

常用链接

留言簿(6)

随笔分类(440)

随笔档案(378)

文章档案(6)

新闻档案(1)

相册

收藏夹(9)

Adobe

Android

AS3

Blog-Links

Build

Design Pattern

Eclipse

Favorite Links

Flickr

Game Dev

HBase

Identity Management

IT resources

JEE

Language

OpenID

OSGi

SOA

Version Control

最新随笔

搜索

积分与排名

最新评论

阅读排行榜

评论排行榜

free counters