第 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