第 1 童 OSGi 简介 .....-...…  … 
目录
‘
......,........................... ..。…............... . ....•..• 1 
. ,_. -,... ,-. -, .•.•................. .••.... ,_ _.. .•.•..•................•. __..  I 
1.1  梦想中"即捕即1日 ' 的单纯
。,... .._ _........... .•...... .•.....• _, •••....•.. .•.......  I 
1.2  OSGi. 拯救 Ja...a 棋块化的蜒施
1.3  厚帜溥发的 OSOi ............."..._.................................................  ..............................................2 
1.4  OSGi 雄本概在
...... .........,............ ..,..... ••••  3 
1.4.1  Bundle..........................................................................................................................3 
1.4.2  Scrvicc........................................
... 4 
1.4.3  Service-Oricntcd Com阳ncnt Modcl  ( SOCM )  ........................................................ 4 
1.4.4  Declamti ve Service ......................................................................................................6 
................................. 6 
1.4.5  部署
................ . . . .. . . . ............ 7 
2.1  Equinox....................................................................................................................................7 
"….......... 7 
.............................................................................................................. 7 
!"l 川........ 10 
"  """ ?I·e·- …17 
-
a l  a ‘~ 毡 :~.....~.......... 35 
简介
环境措迎
Hdloworld u·
开发传统提砌的应用 ffE . 
从外部自胡 Rquin'ox ‘. .、J EE h E 
, 
r  _  11  r ....,...  r' 
2.1.3 
T ' 2.1.4 
2.1.5 
2. 1.1 
2.1.2 
6·' 
第 2 童 OSGi 框架简介 。"… .......... 
‘ 
2.2.1  简介
2.2.2  环榄捕边
2.2.3
2.2.4  在 Eclipse 中调试 Fclix .. ……
2.2  Felix ....... . ...........................................................................,…·川............................. 38 
38 
38 
应用的部胃........................ .................................. . ............................. .. ... .. ................. 38 
39 
2.3  Spring-DM ....................................,............…"………..…….."................... 43 
2.3.1  简介
43 
.................................................…… ................ 44 
2.3.2  环填描E且
2.3.3  HclloWorld ................................................................................................................. 48 
2.3.4  Web 版 HcUoWor1d .....
….........…...................................... 51 
.. .......... .. .......... 57 
" 即描即阳"的 Pe臼tore............................................................. . ........................................ 57 
第 3 童基于Spring-DM 实现 Petstore ...…….......….... 
3. I 
ω 
阳 |自晕
3. 1.1  Pctslot'C  1)(J功能lfti;R............. ,..............................................................., ....................57
3. 1.2  OSGi 根架的功 f血和设计思想
到
3.1.3 
PCLStore 的设计
3.2  箭一 f~ Pctstorc  !'J!J 实现
......................................................................... 7() 
60 
3.2.1 
3.2.2 
3.2.3 
环境准备
.................................. ..... ........ 70 
Uûls 悦J.:k ........................ .................................................... ........ ................ω72 
... ................................................. ....... ..... ......... 74 
BOOISlrUp 模块
3.2.4 
333 
567 
ProduclDal 椒块
坷
,
.
。
,
.
,
-
ShoppingCar由,1 模块
ProdUCI LiSl 椒块
ShoppinεCan 快快
。..................................... 7~ 
................. ......................... .................. ................ 80 
81 
85 
......................... 85 
3.2.8 
ProductM ana墨emcnl 慌块
部悟.................,…  .....… 
3.3 
85 
3.4  PC(Slore (l(J扩殷 ."  ....... .•.•. ............... ................................................................................. 85 
第 4 童基于 Apache CXF 实现分布式 Petstore.....................................................................87
4.3  Apache CXF 简介 .................... . 
4.1  分布式 OSGi .................… 
4.2  分布,式 PeLStore 的设计.................. ...、
87 
.......................................................... 87 
…. . .… .,....,.............................. 90 
4.3.1  CXF~DOSGi HelloWorld ...........................................................................................90 
.....… ..........95 
4.3.2  集成 Spring-DM 的 CXr-DOSGi HelloWorld ...........… 
101 
4.4  分布式 PCLStorc 的实现
第 5 意
5.1 
5.2 
4.5  部署
105 
构m.OSGI Bundle Repositor'y .....,.,.,‘.,...... 向 .ι. ‘"、.二.'.. ,......肉、 )07'
OSGi Bundlc. Reposilory 的使用叩叫 trzi
Apaèhc Fc1îx OBR 的使用
5.2.1  命令行方式的用法
I 
J!07 
-
110 
........ ..... ........ ..... ................................................, I I 0 
~町、 11 h  r  { '  /1 
11 
hl·  ·一 '哇!正lp
J.~'tn 
-一
-
n 
第 6 章 OSGi 规范解读
5.2.2 
6.1  OSGi 规范:l>!:IPi IJj程
6.2  Core 规范解读
i飞码方式使 fUOBR.................................................................................................113
5.3  向埠。SGi Bundle Rcposilory ............................................................................................. 11 7 
...... . .....…." ..... ..... ............................................... ....... 119 
。................................................................, ................... 119
120 
Modulc Layer...........................................................................................................  120 
Li feCyc1e  Lay町.. .......... . . .......... ••••  129 
Servicc Layer ...........................................................................................................  132 
6.2.2 
6.2.3 
6.2.1 
6.3  OSGi 
6.3.1 
Scrvice ~姐范解凶
133
Log Servicc .............................................................................................................. 134 
。
6.3.2 
HUp Servi田........................................ 1 37 
第 7 章
7  1 
7.2 
菌 8 章
8.1 
8.2 
第 9 章
9.1 
9.2 
吕景 | 阳
666 
333 
345 
Configur.nion Admin Servi∞
Declaralivc Services...................................... 
__.......... 142
E\lenl Admin Se凹ICC . ... ....... ........ .......... ... ,_. .....,……..............................  145 
町 …… "…·….............................. .... ...... ....... 149 
11ll 
,,
139 
nyAM
A
-
Y
A
崎
间
加就井解析 jar J;J  Bundle 
Bundle 关 Jt 亨A炎1Al ~直机制
EquJnox 实现卦析 •....•... • 
模块化
7. 1.1 
7.1.2 
动态化..
Felix 实现分析. ................ ............………·  …........... .…....…… 
愤块 !t
8.1.1 
8. 1.2 
动企 f也
胡:就并解析 jar j.]  Bundlc 
8undlc 失其宇&~培植1扳机制
-ny 
ζ
J
‘
J
..........173 
3347 
7777 
, 
sp付ng-DM 实现分析
•...•.... ..•.•....•.•.... ....•...•....•....••..•..... ....•....••..• . •... ....•... 1 回
Spring Dynamic M皿Jule 概kß.... . .............. . ................. . ............ ........ .................... . ...... ...... . . 189 
2主布 j.J OSG;  1量卦茧:现卦忻......_......._..........................................._._....................... I 回
.....................................................................  I 四
Bean 
9.2.1 
Extcndcr Bund)c 启胡
Bundlc 中的 Namespace Handlcr 处理
ExtenderConfiguration 处理
Application臼 nleXI 处理
9.2.2 
9.2.3 
9.2.4 
192 
194 
2∞ 
9.3 
将 OSGi Servi四 11λ;;'J Bean ............................................................................................ 2回
9.3.1 
。sgi:service t'J(J 处理................................................................................................. 209 
9.4 
第 10 童
10. 1 
10.2 
10.3 
@
!巳L 旦 ."..J?巳」 !L"
山川.................. .-
制忌l:!ìCI 和 osgi: Ii'i1 的处理…............白
9.3.2 
将 8undl怡e 郎司雹E到 WebJ赢l~茹-嚣 守川.叫.
9归川.4削1
Wc抽le"阳出曲r 的阳启动 0川@. @ .f!ι@兰芒汇汇.. …..  冉L ι ~....~.....~.~............. 214 !闷4 
9.4.2  邮$署哥 Bundle JlJ Wcb J服匾9骨串 E棒量....... . .. .. .................. .................................................... 215 
CXF 实现分析 ............ . ............ . .................................................... . . . ... . ...... ............ 21 7 
,........._,.,.......,....,..…............................................ .....2 J 7 
Apuche CXF-DOSGi  31::现分析
Singlcßundle 'li.. n-包.................................. 217 
四_......, .-.......211
把 ßundle 墨露 :J.J 且控股如
10.2.1 
10.3. 1 
10.3.2 
10.3.3 
10.3.4 
SingleBundle 发行包的启功
2 18
。
…"…..... 221 
DSW Bundle 启 41 ..........…...….,.............. . .. ..... . .............. . ................................, . .22 1
Rcg旧erDistnbution ProviderService .........…… ..................................................222 
创娃 "∞k 对草且注册 LÎslener........................................................................... 224 
处理吗前椎架中{J(J Bundle .....,.........................................................,..............,.... 225 
10.3.5 
:Il码1远舰服卦
10.4 
使用远在E服卦
。
225
.............. 231 
时 | 目亵
。,_ _, ••••.••• •••••••••••.• •••••••••••.••.••••.••. ,..... 23 J 
10.4.1  Ois∞VC叩 Bundle 扇动
10.4.2  处理当前框架中的 Bundle...................................................................................232
IM.3  注册远程服务的本地存棍
...234 
先睹为恢 , OSGi  R 4.2 草稿版 ..... .............. . .... . .................. .... _..... ... _..... .....•...... .... 237 
Co阻..............._. ..... .... ......................................................................... 238 
Il--
ModuLc Layer ................".......................................................................................238 
Li fe川cycle Layer .................................…………
238 
Service Lay町. .•. .. ............................... _._..... ,.... .................. 242 
Framework API ......................................................................................................243 
1234 
Compcndìum...................................................................................................................... 243 
川 2 . 1 Dcclaralive Services Spccification .........................................................................243 
川 2 .2 Dcployment Admin Specification .......................................................................... 244 
11 .2.3  Monilor Admin Service Specificulion................................,................................... 247 
.....................................................,.........................,...................... 251 
...,................................................................. 251 
Java 企业应用领域
OSGi 展望
第 11 童
11.1 
11.2 
第 12 童
12. 1 
12.2 
12.3 
252 
Java 标准领域.............
OSGi  R5.................,..................................................................................,...............,........253 
索引 .............................................,............,........,.....,..................,....................................... 255 
川'….................,.…
• 
• 
• 
第 1
OSGi 简介
1.1  梦想申‘四插即用"的系统
第一 /!(听到f剧中向读且飞钊丹1 Win AMP 描股掘的时悦 .ti彻气时 W;nA MP ~it~ 辜的捅件 -
oJ 以 1i 便地下雄、安装、使用 . 在实际的主峙中.古i:t.] I 入 COM 组件技阜 fU绞艘块化的经历,
后来白己也做过一个产品用的捅件管理器〈实在不能说是插件平台) . 实现了联""的拍 f't远程 F
锐、'!i.毅、启功、停止帘管理工作 . 也¥I描if斗间的消息通知 . 0 I 趾这个曾月: :iI.tI!憧 Jl. 叫模块的 #J
牵管理,井且在实现上也发现官远没有锺初设想的t;ll 0)\ . 还有 '个问题是 , 这个插f'l 1fl'Jl辑是则
在公司的第一.tt产品上,目标JL做到公司内涵 IIJ ,阳 j止烧掉发现Jt实井早也L那么通用.排且这个
'I't理器也有吨相关平台 . "í时就在想,也[没有-个通用的!l(架,实现一个描件体革约构,使m r.
遵循规范 . 开放白 己的捅件,使用已有的描刊 , 而描t中且能控制对外阜寓的内容 , 在运行时 , 可
以动态地安慧、启动.停止、卸搜捕件 . 得个插件槌供 -个",j:个l且卦, )-他的捅件只是根据接
口来证取服持提供占.而完全不知道提供 r. 是谁. 阳陆有了这样的规范和枉'惧 , 我们就吁以IllI.Ò
(ï (f M 古披外部使用了 .
如果调'也可能会导致外部A';统受 I~式影响 . 难追就设有 -种机制班保证战们只暴露细墨露自由部
分给外部么?
2 
I 篝,. 05GI 简介
答案是盯定 {f (11. 那就是 OSOi (Open  Service  Gateway  InÎlialive) ,  OSOi 的定义为 2 节,.
Dyna.m.ic  M叫 ule System  For J川也从这个定义可见. OS口,自由主要职置就是为了让开发#能够构
建功态化、!Il块化的 Java 革统. 使用 OSGi 后. ,喧闹就可以埠描权"'-样完成描毯,例如时于一
个正在运行的亘锐,其中 一个快快使用到了日志服卦,但1'1 1町革统中没有提供盯志版卦0'1惧块,
就可以反接从网上 F~实现了日志服务 A凹的模块,然后动态地将此模块雄行安装,其他要使用
日志服骨的模块就吁以使用了 .
1.3 厚积薄友的 OSGi
QSGi 联盟成立于 1999 年 3 月,撮'111 的目的是 h 智能靠店领域制定'在T- Jav提构建模块化
iJJ态化革统的规范, 一丘 fll Eclip臼 V3.0 采1lJ 0SGi 作h只锐块化、动态化的平白之后,才让 OSGi
成了 Java 企业应用领域芷注的,g词,而在此之前,儿乎没有1:-少人昕说过 OSGi . Eclipse 的采用
λ帕提升了 OSGi 的知名度,并且得以让 Jnva 企业应用领域的产品提供商愿意开始尝试使llJ
。50i .
IBM 、 BEA (叫时还没被 Orocle 收购】的尝试让 OSGi 远步成了焦点,尽管 IBM 只是在其
Websphere 中做了一个小尝试,但 BEA 且'1彻底改变了其底层提构,全部迁移到了早于 OSGi 描酶
的 microServices 框架 (mSA) 上.从这点上可以眉山. BEA 非常相 1,10S口,能给其产晶体制F
来巨太阳J好处,以&. OSGi 拥有11.峙的前景 . 丽从现在的情况来;u 可以认;i;J BEA 当时的决定
娃扑常行前瞻性眼光的 目前 OS口 i IL 乎成了所有 Java Application  Se凹町的事实性标准. IBM 
Wcbsphere.  Orocle  Weblogic 、 Spring DM  Scrvcr ,岳王先i Sun 的 Glassfish 部采用了 OSGi 作为其
实现峭的基础平甜.前 J8o~s AS5  '(1 也应矿T 对 OSGi Il'J主持,从这嗤方i面来看. OSGαi L!经梅
1I到9到1fT各λJava 产A品!
去实E 点之一 '只是f!i目并没青被广泛应用f1J Java 企业应用软件厂甜的产品中,但桐j 倩随.r;时间的
:!i展 .i占点也将改变 .
开源界对 OSGi 同样给 J'7 众辜的好 1'1'&巨大的主持. Apache 及 Spring 中挪有儿款采用 OSGi
的产品.而 Spring DM 且 Spring DM  Servcr 更是在明了 Spring 对 OSGi O'J 认可,其他的开源根部
'i! {{其能够支持 OSGi . 抖种1/i于1且主持 OSGi (1J产品的发市曾纶-1J1.连续占据各
也 l'、断改造 .
樊 Java 新阔的头条,例如1 Struts  2 对于 QSGi 的主抖、 CXF 实现 Distnbuted OSGi 等.这段时期
可以称得上是 OSGi (11撞勃发展阶段.
厂丽的使 m 、芹iJ!(界的认可也 it OSGi 得以进入 Javll 标准领域,成为 Java i# 吉级的规施,
且中有 JSR 232 且 JSR 29 1.而由r- OSGi 的出色衣砚,更是导致 SU" 晴贸一手操办的 Java 模块
化舰也一-JSR277 届埠市告版弃
, .4  。SGI 醉回| 3 
纵观 OSGi 从 19四年产生 flJ现在,可谓Jl凭借Ecl ip!iC 的来附而 鸣惊人,性本排行一个观
点评如l 一项技准是否热门的 个标准是此提目的 111版情况,在 2009 年之邮 xí~ J.!由外还娃凶
内,部没有 OSGi 的书出版〈仅有的两本郁 ~OSGI 规范) . 而到了 2饵"年.副外涌现了J;.哑的
OSGi  ~篇.国内也有了 ii .(,.能阅读的第一本 OSGi 巾立甘篇,从这个JJ曲也反映出 OSGi 已经从
不如1 1:1 .到厂商扣开源界认吁. j日l 影响 Java il. i:r .,þ 11t ~J规位,运lJ;~占}画成了现在的热门技~ .
1.4  OSGi 
在对 OSGi 衍了一定了解后,楼下来肴哥 OSGi 中的一些~q" 慨:在.
1.4.1  Bundle 
日 und le 从形式上讲,是在 META 阳F 日 4下的 MANIFEST.MF 文件中加入了。SGi 特定描述
的一个 jar 也. Bundle J.t虫;就Il:. OSGi 中的模块. Bundle 的也由周期被 QSGi 枢饵所管理,具有
如下几个状态, rNSTALLED 、 RESOLVED、 UN1NSTALLED、 STARTlNG、 AcrrvE、 STOPP1NG
状态之问的转换 J<革如阳川所后
Updøte 
1.骨.... 
ii 
• 
乡
ICτIVE 
t呻
STOPPING 
回,-, Bundle 状意转换芙罩
Bundle .ilIi:1配置 JM 包巾的 MAN1FEST.MI言,可以控制从 BundJe 导出的{盐. I而没{,导出的包,
则在 Bundle 外部是不能够 if HlfICJ. 这样就 IRM 地元成了内部炎刷外部挠的隔离. Bundle 可以被
动态地宣统.启功、停止事1卸战.而 Bundle 也趾服卦( Service) 和细件 (Component) 的就体 .
在后面的例 F
I 11们窜出GI 简介
4 
进行Itλ 的 h 式,部是在搞叮 B.""I.. Ni r  OSGi 的J奄!TJ.就是由 -个个 Bundle 组成的. Bundle 
就址我们手中的机水,通过 OSGi 的根架把这盹炽本组织在起,就形成了革统.
frOSGi 中,待个 Bundlc /I1l1i (1 己独,~于J\他 Bundle 的 ClassLoader. JE [j.1 j;)这样,冉个 Bundle
内部的英趋隔离的 夜们也提到,一个 Bundle 可能会1ft jj)另外 Bundlc 的~. Bund le 之间是要交
忧的.却也这是 t怕也在现的呢?
种 Ii式 J.J. 通过 Package (t