OSGI之Debug Equinox

来源:互联网 发布:科学计算法 编辑:程序博客网 时间:2024/05/05 21:48

“工欲善其事,必先利其器”,我相信这个信条。理论和实践是两个学习现有知识的方式,对于开源项目,我更喜欢把代码下下来,调试起来,当成手册。

OSGi之旅,从Equinox源代码开始。

从eclipse官方的cvs库获取代码。:pserver:anonymous@dev.eclipse.org:/cvsroot/rt/org.eclipse.equinox/framework framwork是OSGi的core标准R4的实现。下来以后,导入到eclipse。

当然也可以直接通过eclipse 的cvs plugin远程导入项目。

导入项目有四个,如下图:

 

1. org.eclipse.equinox.executable是放了native的代码,比如win平台下的win32.win32.dll,eclipse.exe,不是我们关注的要点。

2. org.eclipse.equinox.startup 是equinox的lancher,启动的参数处理都有此项目完成。

3. org.eclipse.osgi 是osgi R4 core的implemention部分。是我们真正关注的要点。

4. org.eclispe.osgi.tests是测试部分,编译通过不过没关系,不过可以给我一些参考。

 

导入到eclipse后,下一步启动equinox的控制台。

1. 找到启动类org.eclipse.core.launcher.Main,如下图,

2. Run As -->Run Configuration

  加入 application args:

   -console 是启动osgi控制台,在此控制台上就可以进行相关操作。

  加入 jvm args:

  -Dosgi.install.area=${project_home}/bin
  -Dosgi.framework=${project_home}/bin

  -Dosgi.frameworkClassPath=file:${project_home}/bin
  -Declipse.application.launchDefault=false         -Dosgi.hook.configurators=org.eclipse.osgi.internal.baseadaptor.BaseHookConfigurator,

 org.eclipse.osgi.internal.baseadaptor.DevClassLoadingHook,

 org.eclipse.core.runtime.internal.adaptor.EclipseStorageHook,

 org.eclipse.core.runtime.internal.adaptor.EclipseLogHook,

 org.eclipse.core.runtime.internal.adaptor.EclipseErrorHandler,

 org.eclipse.core.runtime.internal.adaptor.EclipseAdaptorHook,

 org.eclipse.core.runtime.internal.adaptor.EclipseClassLoadingHook,

 org.eclipse.core.runtime.internal.adaptor.EclipseLazyStarter,

 org.eclipse.core.runtime.internal.stats.StatsManager,

 org.eclipse.osgi.internal.verifier.SignedBundleHook
将org.eclipse.osgi项目下的OSGi_Minimum-1.2.profile和JavaSE-1.6.profile配置文件文件copy到${project_home}/bin下。这里需要说明的是我的jdk是1.6所以选择了JavSE-1.6.profile,请根据相应的jdk版本来选择profile文件。

 

然后到Main.java,run。成功运行后,出现console,提示符为 "osgi > ",成功了。

在此你可以操作osgi的命令,在提示符下键入"help",就可以看到所有的命令。

键入ss,就可以看到

osgi> ss

Framework is launched.

id    State       Bundle
0    ACTIVE      org.eclipse.osgi_3.5.0.qualifier

 

其中,org.eclipse.osgi_3.5.0.qualifier,就是我们的org.eclipse.osgi项目,这个id为0的bundle就是osgi本身?是的,这个是systembundle。

可以通过,install 命令看看是否能成功部署一个bundle。

 

osgi> install file:e:/helloworld-bundle.jar

Bundle id is 2

 

查看:

osgi> ss

Framework is launched.

id    State       Bundle
0    ACTIVE      org.eclipse.osgi_3.5.0.qualifier
2    INSTALLED   helloworld_bundle_1.1.0

 

至此,说明osgi已经可以在eclipse启动debug了。

 

能调试起来,那么完全可以跟踪osgi的bundle的deploy、undeploy过程,跟踪osgi的classloader机制,跟踪service的发布、卸装过程。

我们在后面再来进行源代码分析。

原创粉丝点击