!"#$%&'&()*+,-&./)&0*./& - - PowerPoint PPT Presentation

0
SMART_READER_LITE
LIVE PREVIEW

!"#$%&'&()*+,-&./)&0*./& - - PowerPoint PPT Presentation

!"#$%&'&()*+,-&./)&0*./& !"#$#%&'()*+,#-.'/0123%#&'4565' 1/2.&23+4.&5)&6& & ! 7+"28+%'4-*93&#*&'3%'&9#':+;2"/-'/%;':+<3"#'!!' ! 4=/*9#'7+>?/-#'@+2%;/8+%' A


slide-1
SLIDE 1

!"#$%&'&()*+,-&./)&0*./&

!"#$#%&'()*+,#-.'/0123%#&'4565'

slide-2
SLIDE 2

1/2.&23+4.&5)&6&

& ! 7+"28+%'4-*93&#*&'3%'&9#':+;2"/-'/%;':+<3"#'!!' ! 4=/*9#'7+>?/-#'@+2%;/8+%' A B:!'4=/*9#'@#"3C.''4=/*9#'4*#' A 4=/*9#'@#"3C'3BDED'=-+F#*&'"#/;#-' ! DGH' A !9/$#"#+%'=-+F#*&'"#/;#-' ! 4'"+&'+I'+&9#-)'*+%&-3<28+%)'' A $/J#%K/%;-+3;K="2L3%' A MKNON'

H' D763'P'O#Q+%;'&9#':Q&9'

slide-3
SLIDE 3

2784$,).&

D763'P'O#Q+%;'&9#':Q&9' R'

akquinet business consulting GmbH !60k SE International akquinet IBS GmbH !250k SE akquinet IBS Brüssel GmbH !40k SE akquinet eurosoft Sp. z o.o. !100k SE HKS GmbH !75k SE Microsoft / .NET akquinet dynamic solutions GmbH !300k SE akquinet SLS logistics GmbH !250k SE Outsourcing akquinet

  • utsourcing

gGmbH !250k SE akquinet system integration GmbH !125k SE JAVA / SAP akquinet it-agile GmbH !100k SE akquinet tech@spree GmbH !300k SE akquinet enterprise solutions GmbH !80k SE akquinet AG !1300k SE

slide-4
SLIDE 4

0+-492:&2,-&0+3$9)&"+94;+,<&

=+5>).),?)&=),.):&@+?4<$,A&+,& ! :+;2"/-'7Q)&#$)' A :+;2"/-3S/8+%'#C=#-8)#' A D763K</)#;' A 7+=93)8*/&#;.'T/-L#')*/"#.'U3)&-3<2&#;')Q)&#$)' ! :+<3"#'7+"28+%)' A !"#$%&#'()*&#

" :+<3"#';#J3*#).'V%&#-/*8+%)'$3;;"#?/-#.'7#-J#-K)3;#'W' " :H:.'OHO'

!>),&B)?/,+9+A$)<& ! D763'X4=/*9#'@#"3C.'4=/*#'4*#.'DGH'!9/$#"#+%.'4=/*9#'7"3%LWY' ! 4%;-+3;' ! 4=/*9#':/J#%' ! E/J/'(('XEOD77.'DGH'ED%47Y'

Z' D763'P'O#Q+%;'&9#':Q&9'

slide-5
SLIDE 5

!C):$,A&

D:?/$.)?.4:)E&=+,<49;,AE&B:2$,$,A&2,-&0),.+:$,A&+,& ! 7Q)&#$)'2)3%L'D763'/%;[+-'$+<3"#';#J3*#)' ! :+;2"/-3S/8+%' ! U#J#"+=$#%&'3%I-/)&-2*&2-#.'O23";'=-+*#))' ! \#$+&#'$/%/L#$#%&.'B-+J3)3+%3%L')+"28+%)' F:+G)?.&:)29$H2;+,& ! :/*93%#'&+':/*93%#'/=="3*/8+%)' A \@VU.'U#J3*#'3%&#-/*8+%.'U/&/'*+""#*8+%.'!+%&-+"K"++=' ! :#;3/8+%'['V%&#L-/8+%' A U/&/'=-+*#))3%L'/%;'$#;3/8+%.'M+-3S+%&/"':#;3/8+%'X(7OY' ! :+<3"#'/=="3*/8+%)' A 4%;-+3;' ! U#)0&+='/=="3*/8+%)' A N)#-'#C=#-3#%*#' ! G#<'/=="3*/8+%)'

]' D763'P'O#Q+%;'&9#':Q&9'

slide-6
SLIDE 6

!"#$&$,&IJKJ&

D763'P'O#Q+%;'&9#':Q&9' ^'

L!"#$&M+&B/2,7<NE& &+,'&-./# ' '0.$#1,)&#2%($31#%(44&"#5"#6'(11751%# 89#:,$#5$#1&&;1#<=$;.14%&)&#,1&)1# %(8&#$).,:'&#25$%#5$#>?@#AAB.)C1# 4&)D&E$'F#2&''#5"#8GAAA!#%($&#<H-65I#

  • 4&"J5"*#G"J#J(F#$)F5"*#K,1$#$.#

,4*)(J&#',E&"&#8&)15."A#!#%($&# H-65L#5$#;(C&1#15;4'&#$%5"*1# E.;4'&MA# =$#'&(1$#1.;&."&#E("#1(F#$%&#C5"*#51# "(C&JA#N%("C1I#O."3$#PQRG#1$.)F# $&(E%#$%.1&#*,F1#("F#'&11."S#<H-65# <D(5'# # #

O5>9)5),.2;+,&02.4:$.*&

  • (123%+C.'@#"3C'
  • _#?'7=#*3`*/8+%'3%'=-+L-#))'

B++9<&

  • V%F#*8+%'@-/$#?+-0'X3BDED.'O"2#=-3%&.'

7!\Y'

  • VU('X<%;&++").'BU(Y'
  • O23";'&++")'X$/J#%.'/%&WY'
  • a#)&)'XF2%3&Z+)L3.'=/CP#C/$Y'

P?9$><)&

  • (*"3=)#'VU('
  • BH.'\!B'W'

D>>9$?2;+,&"):Q):<&

  • 6"/))`)9.'ED%47.'G#<)=9#-#'
  • E<+))'4575''

!./):<&

  • 7#-J3*#':3C'['@2)#'
  • G7DH'X(7O.'V%&#L-/8+%Y'
  • 7"3%L''

'

slide-7
SLIDE 7

!"#$&"4??)<<&PQ+94;+,&

b' D763'P'O#Q+%;'&9#':Q&9'

a3$#' c3)3<3"3&Q' R5)$%# !$T1#1.#E..'# @:,UUV# !$#1,EC1# @<D(5'V# W.))&E$#,1(*&#("J## :&1$#4)(EXE&1# Y'($&(,#.D#4).J,EX85$F#

slide-8
SLIDE 8

D763'P'O#Q+%;'&9#':Q&9' d'

slide-9
SLIDE 9

0*&<+RS2:)&$<&3$AA):&./2,&*+4:<&T&

D763'P'O#Q+%;'&9#':Q&9' e'

U2Q2&

  • a!fP'DJ#-'g':3""3+%'TD!'
  • M/-$+%QP'g5H]':3""3+%'TD!&

VWV&>92*):&&

  • */%'*+%&/3%'g':3""3+%'TD!'

D&(01&

  • */-'*/%'*+%&/3%'2='&+']h'%#&?+-0#;'

*+$=2&#-3S#;';#J3*#)' P?9$><)&&OVP&

  • R5]':3""3+%'TD!'

">2?)&</4X9)&

  • 'ih5]':3""3+%'"3%#)&

Y&KJ&9$,)<&2&-2*& Z$3:2:$)<&2:)&2&,)?)<<$.*E&34.&[& &

slide-10
SLIDE 10

Z$5$.<&+@&!!F&

D763'P'O#Q+%;'&9#':Q&9' gh'

=+4>9$,A&<)Q):)9*&9$5$.<& :)4<23$9$.*&

! N)3%L'/'L#%#-3*'+<F#*&.'*/%';-/L'3%'/'"/-L#' %2$<#-'+I'+&9#-'+<F#*&)'

=:)2.)<&+Q):9*&92:A)&<*<.)5<& 2R):&2&?):.2$,&?+5>9)\$.*&$<& :)2?/)-& & ]9)\$3$9$.*&54<.&3)&34$9.&$,&3*&./)& >:+A:255):&

! B"2L3%'/-*93&#*&2-#)' ! @/*&+-3#).'U#=#%;#%*Q'V%F#*8+%'

&

&

slide-11
SLIDE 11

0+-492:$H)&T&

D763'P'O#Q+%;'&9#':Q&9' gg'

Monolithic Application Modular Application Modular and Dynamic Application Modular and Dynamic Killer Application

slide-12
SLIDE 12

U$A<2S&

gH' D763'P'O#Q+%;'&9#':Q&9'

!,?)&4>+,&2&;5)E&./)&5+-492:$.*& & ! E7\'HbbP'E/J/':+;2"#'7Q)&#$' ! E7\'HeZ'P'V$=-+J#;':+;2"/-3&Q'3%'&9#'E/J/'B-+L-/$$3%L'T/%L2/L#' & ! E3L)/?P':+;2"/-3S/8+%'+I'&9#'EUf' A :/Q'+-'$/Q'%+&'<#')&/%;/-;3S#;' A E/J/'7('d'j' A 79+2";'?#'-#/""Q'?/3&.'+-';+'?#'9/J#')+$#&93%L'/"-#/;Q'-+<2)&' #%+2L9'j'

&

slide-13
SLIDE 13

1/*&!"#$&6&

D763'P'O#Q+%;'&9#':Q&9' gR'

M))-&<$5>9):&S2*<&.+& ?+,<.:4?.&<+RS2:)& <*<.)5<& &

! D763'3)'/<+2&'<+RS2:)& ?+,<.:4?;+,P'<23";3%L')Q)&#$)' +2&'+I')$/""#-'*+$=+%#%&)'W' ! D763'3)'/<+2&'?+5>+,),.<&./2.& S+:7&.+A)./):'W' ! D763'3)'/<+2&'52,2A$,A&2,-& 4>-2;,A'*+$=+%#%&)'W' ! D763'3)'/<+2&'' kN%3J#-)/"'0$--9)S2:)l'

&

slide-14
SLIDE 14

1/*&!"#$&6&

D763'P'O#Q+%;'&9#':Q&9' gZ'

M))-&<$5>9):&S2*<&.+& ?+,<.:4?.&<+RS2:)& <*<.)5<& &

! D763'3)'/<+2&'<+RS2:)& ?+,<.:4?;+,P'<23";3%L')Q)&#$)' +2&'+I')$/""#-'*+$=+%#%&)'W' ! D763'3)'/<+2&'?+5>+,),.<&./2.& S+:7&.+A)./):'W' ! D763'3)'/<+2&'52,2A$,A&2,-& 4>-2;,A'*+$=+%#%&)'W' ! D763'3)'/<+2&'' kN%3J#-)/"'0$--9)S2:)l'

&

slide-15
SLIDE 15

D763'P'O#Q+%;'&9#':Q&9' g]'

slide-16
SLIDE 16

!"#$&D99$2,?)&

O,-4<.:*&?+,<+:;45& & !"#$&"):Q$?)&F92^+:5&<>)?$_?2;+,& ! @-/$#?+-0')=#*3`*/8+%'I+-'9+)8%L';Q%/$3*/""Q';+?%"+/;/<"#')#-J3*#)' ! 7&/%;/-;')#-J3*#')=#*3`*/8+%)' & ")Q):29&)\>):.&A:+4><&-)_,)&./)&<>)?$_?2;+,<& ! !+-#'B"/m+-$'(C=#-&'6-+2='X!B(6Y' ! :+<3"#'(C=#-&'6-+2='X:(6Y' ! c#93*"#'(C=#-&'6-+2='Xc(6Y' ! (%&#-=-3)#'(C=#-&'6-+2='X((6Y'

g^' D763'P'O#Q+%;'&9#':Q&9'

slide-17
SLIDE 17

!"#$&D:?/$.)?.4:29&!Q):Q$)S&

D763'P'O#Q+%;'&9#':Q&9' gb'

!"#$%"#&'

(#)*&#' (#)*&#' (#)*&#'

+,&#"-./'0123&4' 5"*"' +06)' 78.$9&'

slide-18
SLIDE 18

!"#$&]:25)S+:7&Z2*):$,A&

D763'P'O#Q+%;'&9#':Q&9' gd'

MODULE LIFECYCLE SERVICE

L1 - Creates the concept of bundles that use classes from each other in a controlled way according to constraints L2 - Manages the lifecycle of bundle in a bundle repository without requiring the VM be restarted L3 – Provides a publish/find/bind service model to decouple bundles

slide-19
SLIDE 19

!"#$&]:25)S+:7&`KaIb&

=+5>+,),.c+:$),.)-&@:25)S+:7& ! O2%;"#)'X35#5.'$+;2"#)[*+$=+%#%&)Y' ! B/*0/L#')9/-3%L'/%;'J#-)3+%'$/%/L#$#%&' ! T3I#K*Q*"#'$/%/L#$#%&'/%;'%+8`*/8+%' "):Q$?)c+:$),.)-&2:?/$.)?.4:)&a&?+5>4;,A& ! B2<"3)9[`%;[<3%;'3%&-/Kc:')#-J3*#'$+;#"' !>),&:)5+.)&52,2A)5),.&2:?/$.)?.4:)& ! _+'=-#)*-3<#;'=+"3*Q'+-'=-+&+*+"'

ge' D763'P'O#Q+%;'&9#':Q&9'

slide-20
SLIDE 20

!"#$&]:25)S+:7&`IaIb&

d4,<&549;>9)&2>>9$?2;+,<&2,-&<):Q$?)<& "$,A9)&W0&$,<.2,?)& ")>2:2.)&?92<<&9+2-):&>):&34,-9)& ! !"/))'"+/;#-'L-/=9' ! V%;#=#%;#%&'%/$#)=/*#)' ! !"/))')9/-3%L'/&'&9#'E/J/'=/*0/L#'"#J#"' U2Q2&F):5$<<$+,<&.+&<)?4:)&@:25)S+:7& P\>9$?$.9*&?+,<$-):<&-*,25$?&<?),2:$+<& ! \2%K8$#'3%)&/"".'2=;/&#.'/%;'2%3%)&/""'+I'<2%;"#)'

Hh' D763'P'O#Q+%;'&9#':Q&9'

slide-21
SLIDE 21

D763'P'O#Q+%;'&9#':Q&9' Hg'

slide-22
SLIDE 22

0+-492:$.*&

1/2.6&

HH' D763'P'O#Q+%;'&9#':Q&9'

slide-23
SLIDE 23

0+-492:$.*&

1/2.6& ! 7#=/-/8+%'+I'*+%*#-%)' ! 7&-2*&2-#' ! (%*/=)2"/8+%' ! @+*2)#)'+%' A !+9#)3+%'X"+?'3)'</;.'93L9'3)'L++;Y' A !+2="3%L'X"+?'3)'L++;.'93L9'3)'</;Y' 1/*6&

HR' D763'P'O#Q+%;'&9#':Q&9'

slide-24
SLIDE 24

0+-492:$.*&

1/2.6& ! 7#=/-/8+%'+I'*+%*#-%)' ! 7&-2*&2-#' ! (%*/=)2"/8+%' ! @+*2)#)'+%' A !+9#)3+%'X"+?'3)'</;.'93L9'3)'L++;Y' A !+2="3%L'X"+?'3)'L++;.'93L9'3)'</;Y' 1/*6& ! V%;#=#%;#%&';#J#"+=$#%&' ! V%;#=#%;#%&'$/3%&#%/%*#'/%;'#J+"28+%' ! V$=-+J#'-#2)/<3"3&Q'

HZ' D763'P'O#Q+%;'&9#':Q&9'

slide-25
SLIDE 25

!"#$&(4,-9)&

D&34,-9)&$<&2&5+-49)&$,&!"#$&.):5$,+9+A*& D&34,-9)&$<&2&UDd&_9)&?+,.2$,$,A& ! !+;#' ! \#)+2-*#)' ! :#&/;/&/'

H]' D763'P'O#Q+%;'&9#':Q&9'

Module E'(11#Z'&1# )&1.,)E&#Z'&1# +=0!#

7P-N# A+7#

;&$(J($(#

slide-26
SLIDE 26

=+-)&W$<$3$9$.*&0).2-2.2&

D&34,-9)&$<&2&UDd&_9)&?+,.2$,$,A&?+-)& ! G9/&'*+;#'3%'&9#'E4\'`"#'3)'J3)3<"#'&+'+&9#-'*+;#'3%'&9#'E4\'`"#j' ! G9/&'*+;#'3%'&9#'E4\'`"#'3)'J3)3<"#'&+'*+;#'+2&)3;#'&9#'E4\'`"#j' ! G9/&'*+;#'+2&)3;#'&9#'E4\'`"#'3)'J3)3<"#'&+'*+;#'3%)3;#'&9#'E4\'`"#j' e,9$7)&<.2,-2:-&UDd&_9)<E&!"#$&5).2-2.2&)\>9$?$.9*&2,<S):<&299&+@&./)<)& 84)<;+,<&

H^' D763'P'O#Q+%;'&9#':Q&9'

slide-27
SLIDE 27

O,.):,29&=+-)&W$<$3$9$.*&

O,.):,29&?+-)&$,&<.2,-2:-&UDd<&?2,&<))&299&:++.c:)92;Q)&>2?72A)<& ! _+&'&9#'*/)#'?3&9'<2%;"#)'

Hb' D763'P'O#Q+%;'&9#':Q&9'

slide-28
SLIDE 28

O,.):,29&=+-)&W$<$3$9$.*&

O,.):,29&?+-)&$,&<.2,-2:-&UDd<&?2,&<))&299&:++.c:)92;Q)&>2?72A)<& ! _+&'&9#'*/)#'?3&9'<2%;"#)' (4,-9)<&54<.&<>)?$@*&(4,-9)c=92<<F2./& ! !+$$/K;#"3$3&#;'"3)&'3%;3*/8%L'?9#-#'&+')#/-*9'3%'&9#'E4\'`"#'?9#%'"++03%L' I+-'*"/))#)'

Hd' D763'P'O#Q+%;'&9#':Q&9'

slide-29
SLIDE 29

O,.):,29&=+-)&W$<$3$9$.*&

O,.):,29&?+-)&$,&<.2,-2:-&UDd<&?2,&<))&299&:++.c:)92;Q)&>2?72A)<& ! _+&'&9#'*/)#'?3&9'<2%;"#)' (4,-9)<&54<.&<>)?$@*&(4,-9)c=92<<F2./& ! !+$$/K;#"3$3&#;'"3)&'3%;3*/8%L'?9#-#'&+')#/-*9'3%'&9#'E4\'`"#'?9#%'"++03%L' I+-'*"/))#)' B+&A).&<.2,-2:-&UDd&3)/2Q$+:& ! O2%;"#K!"/))B/&9P'5'

He' D763'P'O#Q+%;'&9#':Q&9'

slide-30
SLIDE 30

O,.):,29&=+-)&W$<$3$9$.*&

O,.):,29&?+-)&$,&<.2,-2:-&UDd<&?2,&<))&299&:++.c:)92;Q)&>2?72A)<& ! _+&'&9#'*/)#'?3&9'<2%;"#)' (4,-9)<&54<.&<>)?$@*&(4,-9)c=92<<F2./& ! !+$$/K;#"3$3&#;'"3)&'3%;3*/8%L'?9#-#'&+')#/-*9'3%'&9#'E4\'`"#'?9#%'"++03%L' I+-'*"/))#)' B+&A).&<.2,-2:-&UDd&3)/2Q$+:& ! O2%;"#K!"/))B/&9P'5' 02*&29<+&$,?94-)&)53)--)-&UDd<&2,-&-$:)?.+:$)<& P\25>9)<& ! O2%;"#K!"/))B/&9P'"3<[I++5F/-.*"/))#)[' ! O2%;"#K!"/))B/&9P'"3<[I++5F/-.5'

Rh' D763'P'O#Q+%;'&9#':Q&9'

slide-31
SLIDE 31

P\>+<$,A&O,.):,29&=+-)&`KaIb&

".2,-2:-&UDd&_9)<&)\>+<)&299&$,.):,29&:++.c:)92;Q)&>2?72A)<& ! _+&'&9#'*/)#'?3&9'<2%;"#)'

Rg' D763'P'O#Q+%;'&9#':Q&9'

slide-32
SLIDE 32

P\>+<$,A&O,.):,29&=+-)&`KaIb&

".2,-2:-&UDd&_9)<&)\>+<)&299&$,.):,29&:++.c:)92;Q)&>2?72A)<& ! _+&'&9#'*/)#'?3&9'<2%;"#)' (4,-9)<&54<.&<>)?$@*&P\>+:.cF2?72A)& ! T3)&'+I'=/*0/L#)'I-+$'&9#'<2%;"#'*"/))'=/&9'&+'#C=+)#' ! N)#)'*+$$+%'D763')Q%&/C'$#%8+%#;'#/-"3#-' 1/*&-+&./$<6&

RH' D763'P'O#Q+%;'&9#':Q&9'

slide-33
SLIDE 33

P\>+<$,A&O,.):,29&=+-)&`KaIb&

".2,-2:-&UDd&_9)<&)\>+<)&299&$,.):,29&:++.c:)92;Q)&>2?72A)<& ! _+&'&9#'*/)#'?3&9'<2%;"#)' (4,-9)<&54<.&<>)?$@*&P\>+:.cF2?72A)& ! T3)&'+I'=/*0/L#)'I-+$'&9#'<2%;"#'*"/))'=/&9'&+'#C=+)#' ! N)#)'*+$$+%'D763')Q%&/C'$#%8+%#;'#/-"3#-' 1/*&-+&./$<6& ! V&')#=/-/&#)'3%&#-%/"'J3)3<3"3&Q'I-+$'#C&#-%/"'J3)3<3"3&Q' ! V%'+&9#-'?+-;).'3&'/""+?)'<2%;"#)'&+'9/J#'=-3J/&#'*+%&#%&'

RR' D763'P'O#Q+%;'&9#':Q&9'

slide-34
SLIDE 34

D??)<<$,A&P\.):,29&=+-)&`KaIb&

".2,-2:-&UDd<&$5>9$?$.9*&<))&)Q):*./$,A&+./):&?92<<&+,&./)&?92<<&>2./& ! _+&'&9#'*/)#'?3&9'<2%;"#)'

RZ' D763'P'O#Q+%;'&9#':Q&9'

slide-35
SLIDE 35

D??)<<$,A&P\.):,29&=+-)&`KaIb&

".2,-2:-&UDd<&$5>9$?$.9*&<))&)Q):*./$,A&+./):&?92<<&+,&./)&?92<<&>2./& ! _+&'&9#'*/)#'?3&9'<2%;"#)' (4,-9)<&54<.&<>)?$@*&O5>+:.cF2?72A)& ! T3)&'+I'=/*0/L#)'%##;#;'I-+$'+&9#-'<2%;"#)' ! N)#)'*+$$+%'D763')Q%&/C'$#%8+%#;'#/-"3#-'

R]' D763'P'O#Q+%;'&9#':Q&9'

slide-36
SLIDE 36

D??)<<$,A&P\.):,29&=+-)&`KaIb&

".2,-2:-&UDd<&$5>9$?$.9*&<))&)Q):*./$,A&+./):&?92<<&+,&./)&?92<<&>2./& ! _+&'&9#'*/)#'?3&9'<2%;"#)' (4,-9)<&54<.&<>)?$@*&O5>+:.cF2?72A)& ! T3)&'+I'=/*0/L#)'%##;#;'I-+$'+&9#-'<2%;"#)' ! N)#)'*+$$+%'D763')Q%&/C'$#%8+%#;'#/-"3#-' (4,-9)<&54<.&$5>+:.&)Q):*&,))-)-&>2?72A)&,+.&?+,.2$,)-&$,&./)&34,-9)&$.<)9@E& )\?)>.&G2Q2fg& 1/*&-+&./$<6&

R^' D763'P'O#Q+%;'&9#':Q&9'

slide-37
SLIDE 37

D??)<<$,A&P\.):,29&=+-)&`KaIb&

".2,-2:-&UDd<&$5>9$?$.9*&<))&)Q):*./$,A&+./):&?92<<&+,&./)&?92<<&>2./& ! _+&'&9#'*/)#'?3&9'<2%;"#)' (4,-9)<&54<.&<>)?$@*&O5>+:.cF2?72A)& ! T3)&'+I'=/*0/L#)'%##;#;'I-+$'+&9#-'<2%;"#)' ! N)#)'*+$$+%'D763')Q%&/C'$#%8+%#;'#/-"3#-' (4,-9)<&54<.&$5>+:.&)Q):*&,))-)-&>2?72A)&,+.&?+,.2$,)-&$,&./)&34,-9)&$.<)9@E& )\?)>.&G2Q2fg& 1/*&-+&./$<6& ! :/0#';#=#%;#%*3#)')\>9$?$.& ! :/0#';#=#%;#%*3#)'52,2A)239)&

Rb' D763'P'O#Q+%;'&9#':Q&9'

slide-38
SLIDE 38

O5>+:;,A&h&P\>+:;,A&2&F2?72A)&`Kaib&

O52A$,)&34,-9)&D&<+5)/+S&A).<&<):Q9).&$,<.2,?)<&@:+5&34,-9)&(&

Rd' D763'P'O#Q+%;'&9#':Q&9'

5;4.)$# K(8(MA1&)8'&$[# &M4.)$# K(8(MA1&)8'&$[#

A B

H"&#E.4F#.D# K(8(MA1&)8'&$A-&)8'&$#

slide-39
SLIDE 39

O5>+:;,A&h&P\>+:;,A&2&F2?72A)&`Kaib&

1/2.&$@&34,-9)&D&29<+&S2,.)-&.+&A).&<):Q9).&$,<.2,?)<&<+5)/+S&@:+5&34,-9)&=6&

Re' D763'P'O#Q+%;'&9#':Q&9'

5;4.)$# K(8(MA1&)8'&$[# &M4.)$# K(8(MA1&)8'&$[#

A B

H"&#E.4F#.D# K(8(MA1&)8'&$A-&)8'&$#

slide-40
SLIDE 40

O5>+:;,A&h&P\>+:;,A&2&F2?72A)&`Iaib&

(4,-9)&=&?+49-&$5>+:.&@:+5&34,-9)&(E&34.&./),&$.&$<&-)>),-),.&+,&$.&

Zh' D763'P'O#Q+%;'&9#':Q&9'

5;4.)$# K(8(MA1&)8'&$[# &M4.)$# K(8(MA1&)8'&$[#

A B

H"&#E.4F#.D# K(8(MA1&)8'&$A-&)8'&$# 5;4.)$# K(8(MA1&)8'&$[#

C

slide-41
SLIDE 41

O5>+:;,A&h&P\>+:;,A&2&F2?72A)&`jaib&

(4,-9)&=&?+49-&)\>+:.&$.<&+S,&<):Q9).&>2?72A)E&34.&34,-9)&D&?+49-&+,9*&<))& )$./):&=&+:&(&

Zg' D763'P'O#Q+%;'&9#':Q&9'

&M4.)$# K(8(MA1&)8'&$[#

C

N2.#E.45&1#.D# K(8(MA1&)8'&$A-&)8'&$#

B A

5;4.)$# K(8(MA1&)8'&$[#

:'

&M4.)$# K(8(MA1&)8'&$[#

slide-42
SLIDE 42

O5>+:;,A&h&P\>+:;,A&2&F2?72A)&`iaib&

(4,-9)&=&?+49-&$5>+:.E&?+,.2$,&2,-&)\>+:.&<):Q9).&.+&<+9Q)&./)&-$9)552&

ZH' D763'P'O#Q+%;'&9#':Q&9'

PM4.)$#("J#5;4.)$# K(8(MA1&)8'&$[#

C B A

5;4.)$# K(8(MA1&)8'&$[# PM4.)$#("J#5;4.)$# K(8(MA1&)8'&$[#

slide-43
SLIDE 43

(4,-9)&02,$@)<.&P\25>9)&

ZR' D763'P'O#Q+%;'&9#':Q&9'

Bundle-ManifestVersion: 2 Bundle-SymbolicName: org.foo.simplebundle Bundle-Version: 1.0.0 Bundle-ClassPath: .,org/foo/embedded.jar Import-Package:

  • sgi.service.log; version="[1.0.0,1.1.0)",
  • rg.foo.service; version="1.1"

Export-Package:

  • rg.foo.service; version="1.1";

vendor="org.foo",

  • rg.foo.service.bar; version="1.1";

uses:="org.foo.service"

slide-44
SLIDE 44

(4,-9)&02,$@)<.&P\25>9)&

ZZ' D763'P'O#Q+%;'&9#':Q&9'

Bundle-ManifestVersion: 2 Bundle-SymbolicName: org.foo.simplebundle Bundle-Version: 1.0.0 Bundle-ClassPath: .,org/foo/embedded.jar Import-Package:

  • sgi.service.log; version="[1.0.0,1.1.0)",
  • rg.foo.service; version="1.1"

Export-Package:

  • rg.foo.service; version="1.1";

vendor="org.foo",

  • rg.foo.service.bar; version="1.1";

uses:="org.foo.service"

Indicates R4 semantics and syntax

slide-45
SLIDE 45

(4,-9)&02,$@)<.&P\25>9)&

Z]' D763'P'O#Q+%;'&9#':Q&9'

Bundle-ManifestVersion: 2 Bundle-SymbolicName: org.foo.simplebundle Bundle-Version: 1.0.0 Bundle-ClassPath: .,org/foo/embedded.jar Import-Package:

  • sgi.service.log; version="[1.0.0,1.1.0)",
  • rg.foo.service; version="1.1"

Export-Package:

  • rg.foo.service; version="1.1";

vendor="org.foo",

  • rg.foo.service.bar; version="1.1";

uses:="org.foo.service"

Indicates R4 semantics and syntax

Globally unique ID

slide-46
SLIDE 46

(4,-9)&02,$@)<.&P\25>9)&

Z^' D763'P'O#Q+%;'&9#':Q&9'

Bundle-ManifestVersion: 2 Bundle-SymbolicName: org.foo.simplebundle Bundle-Version: 1.0.0 Bundle-ClassPath: .,org/foo/embedded.jar Import-Package:

  • sgi.service.log; version="[1.0.0,1.1.0)",
  • rg.foo.service; version="1.1"

Export-Package:

  • rg.foo.service; version="1.1";

vendor="org.foo",

  • rg.foo.service.bar; version="1.1";

uses:="org.foo.service"

Internal bundle class path

slide-47
SLIDE 47

(4,-9)&02,$@)<.&P\25>9)&

Zb' D763'P'O#Q+%;'&9#':Q&9'

Bundle-ManifestVersion: 2 Bundle-SymbolicName: org.foo.simplebundle Bundle-Version: 1.0.0 Bundle-ClassPath: .,org/foo/embedded.jar Import-Package:

  • sgi.service.log; version="[1.0.0,1.1.0)",
  • rg.foo.service; version="1.1"

Export-Package:

  • rg.foo.service; version="1.1";

vendor="org.foo",

  • rg.foo.service.bar; version="1.1";

uses:="org.foo.service"

Import of a package version range

slide-48
SLIDE 48

(4,-9)&02,$@)<.&P\25>9)&

Zd' D763'P'O#Q+%;'&9#':Q&9'

Bundle-ManifestVersion: 2 Bundle-SymbolicName: org.foo.simplebundle Bundle-Version: 1.0.0 Bundle-ClassPath: .,org/foo/embedded.jar Import-Package:

  • sgi.service.log; version="[1.0.0,1.1.0)",
  • rg.foo.service; version="1.1"

Export-Package:

  • rg.foo.service; version="1.1";

vendor="org.foo",

  • rg.foo.service.bar; version="1.1";

uses:="org.foo.service"

Importing an exported package

slide-49
SLIDE 49

(4,-9)&02,$@)<.&P\25>9)&

Ze' D763'P'O#Q+%;'&9#':Q&9'

Bundle-ManifestVersion: 2 Bundle-SymbolicName: org.foo.simplebundle Bundle-Version: 1.0.0 Bundle-ClassPath: .,org/foo/embedded.jar Import-Package:

  • sgi.service.log; version="[1.0.0,1.1.0)",
  • rg.foo.service; version="1.1"

Export-Package:

  • rg.foo.service; version="1.1";

vendor="org.foo",

  • rg.foo.service.bar; version="1.1";

uses:="org.foo.service"

Exported package with version and arbitrary attribute

slide-50
SLIDE 50

(4,-9)&02,$@)<.&P\25>9)&

]h' D763'P'O#Q+%;'&9#':Q&9'

Bundle-ManifestVersion: 2 Bundle-SymbolicName: org.foo.simplebundle Bundle-Version: 1.0.0 Bundle-ClassPath: .,org/foo/embedded.jar Import-Package:

  • sgi.service.log; version="[1.0.0,1.1.0)",
  • rg.foo.service; version="1.1"

Export-Package:

  • rg.foo.service; version="1.1";

vendor="org.foo",

  • rg.foo.service.bar; version="1.1";

uses:="org.foo.service"

Provided package with dependency on exported package

slide-51
SLIDE 51

!"#$&V)>),-),?*&0+-)9&

F2?72A)c9)Q)9&Q<&5+-49)c9)Q)9&-)>),-),?$)<& ! G9+'J)'?9/&'

]g' D763'P'O#Q+%;'&9#':Q&9'

slide-52
SLIDE 52

!"#$&V)>),-),?*&0+-)9&

F2?72A)c9)Q)9&Q<&5+-49)c9)Q)9&-)>),-),?$)<& ! G9+'J)'?9/&' 0+-49)c9)Q)9&-)>),-),?$)<& ! !+/-)#'L-/3%#;' ! 4-#'<-3n"#' ! M3;#'&9#'&-2#';#=#%;#%*3#)'

]H' D763'P'O#Q+%;'&9#':Q&9'

slide-53
SLIDE 53

!"#$&V)>),-),?*&0+-)9&

F2?72A)c9)Q)9&Q<&5+-49)c9)Q)9&-)>),-),?$)<& ! G9+'J)'?9/&' 0+-49)c9)Q)9&-)>),-),?$)<& ! !+/-)#'L-/3%#;' ! 4-#'<-3n"#' ! M3;#'&9#'&-2#';#=#%;#%*3#)' F2?72A)c9)Q)9&-)>),-),?$)<& ! @3%#'L-/3%#;' ! @"#C3<"#.'#%/<"#'-#I/*&+-3%L' ! 4-#'&9#'&-2#';#=#%;#%*3#)'X35#5.'&9#Qo-#'3%'&9#'*+;#Y'

]R' D763'P'O#Q+%;'&9#':Q&9'

slide-54
SLIDE 54

!"#$&V)>),-),?*&0+-)9&

F2?72A)c9)Q)9&Q<&5+-49)c9)Q)9&-)>),-),?$)<& ! G9+'J)'?9/&' 0+-49)c9)Q)9&-)>),-),?$)<& ! !+/-)#'L-/3%#;' ! 4-#'<-3n"#' ! M3;#'&9#'&-2#';#=#%;#%*3#)' F2?72A)c9)Q)9&-)>),-),?$)<& ! @3%#'L-/3%#;' ! @"#C3<"#.'#%/<"#'-#I/*&+-3%L' ! 4-#'&9#'&-2#';#=#%;#%*3#)'X35#5.'&9#Qo-#'3%'&9#'*+;#Y' F2?72A)c9)Q)9&-)>),-),?$)<&:)84$:)&>2?72A)<&.+&3)&2.+5$?&`$f)fE&$,&2&<$,A9)& 34,-9)b&

]Z' D763'P'O#Q+%;'&9#':Q&9'

slide-55
SLIDE 55

V)>),-),?*&d)<+94;+,&`KaIb&

D4.+52;?299*&52,2A)-&3*&./)&!"#$&@:25)S+:7& ! (%)2-#)'/'<2%;"#o)';#=#%;#%*3#)'/-#')/8)`#;'<#I+-#'&9#'<2%;"#'*/%'<#'2)#;'

]]' D763'P'O#Q+%;'&9#':Q&9'

slide-56
SLIDE 56

V)>),-),?*&d)<+94;+,&`KaIb&

D4.+52;?299*&52,2A)-&3*&./)&!"#$&@:25)S+:7& ! (%)2-#)'/'<2%;"#o)';#=#%;#%*3#)'/-#')/8)`#;'<#I+-#'&9#'<2%;"#'*/%'<#'2)#;' O,&<$5>9)&.):5<E&:)<+9Q$,A&2&34,-9)&52.?/)<&$.<&$5>+:.)-&>2?72A)<&.+&34,-9)<& >:+Q$-$,A&./)5& & & &

]^' D763'P'O#Q+%;'&9#':Q&9'

A B C

5;4.)$# K(8(MA1&)8'&$A%\4# &M4.)$# K(8(MA1&)8'&$A%\4# 5;4.)$# K(8(MA1&)8'&$# &M4.)$# K(8(MA1&)8'&$#

slide-57
SLIDE 57

V)>),-),?*&d)<+94;+,&`KaIb&

D4.+52;?299*&52,2A)-&3*&./)&!"#$&@:25)S+:7& ! (%)2-#)'/'<2%;"#o)';#=#%;#%*3#)'/-#')/8)`#;'<#I+-#'&9#'<2%;"#'*/%'<#'2)#;' O,&<$5>9)&.):5<E&:)<+9Q$,A&2&34,-9)&52.?/)<&$.<&$5>+:.)-&>2?72A)<&.+&34,-9)<& >:+Q$-$,A&./)5& & & & & & ! aQ=3*/""Q.'-#)+"J3%L'/'<2%;"#'?3""'-#)2"&'3%'+&9#-'<2%;"#)'<#3%L'&-/%)38J#"Q'

  • #)+"J#;'

]b' D763'P'O#Q+%;'&9#':Q&9'

A B C

5;4.)$# K(8(MA1&)8'&$A%\4# &M4.)$# K(8(MA1&)8'&$A%\4# 5;4.)$# K(8(MA1&)8'&$# &M4.)$# K(8(MA1&)8'&$#

slide-58
SLIDE 58

V)>),-),?*&d)<+94;+,&`KaIb&

D4.+52;?299*&52,2A)-&3*&./)&!"#$&@:25)S+:7& ! (%)2-#)'/'<2%;"#o)';#=#%;#%*3#)'/-#')/8)`#;'<#I+-#'&9#'<2%;"#'*/%'<#'2)#;' O,&<$5>9)&.):5<E&:)<+9Q$,A&2&34,-9)&52.?/)<&$.<&$5>+:.)-&>2?72A)<&.+&34,-9)<& >:+Q$-$,A&./)5& & & & & ! aQ=3*/""Q.'-#)+"J3%L'/'<2%;"#'?3""'-#)2"&'3%'+&9#-'<2%;"#)'<#3%L'&-/%)38J#"Q'

  • #)+"J#;'

! VI'/'J#-)3+%'+-'/-<3&-/-Q'/n-3<2&#)'/-#')=#*3`#;'+%'3$=+-&).'&9#%'#C=+-&)'$2)&' $/&*9' A :2"8="#'/n-3<2&#)'+%'/%'3$=+-&'/-#'"+L3*/""Q'DMV)-&

]d' D763'P'O#Q+%;'&9#':Q&9'

A B C

5;4.)$# K(8(MA1&)8'&$A%\4# &M4.)$# K(8(MA1&)8'&$A%\4# 5;4.)$# K(8(MA1&)8'&$# &M4.)$# K(8(MA1&)8'&$#

slide-59
SLIDE 59

V)>),-),?*&d)<+94;+,&`IaIb&

049;>9)&52.?/$,A&>:+Q$-):<& & & & & & & &

]e' D763'P'O#Q+%;'&9#':Q&9'

5;4.)$# K(8(MA1&)8'&$[# 8&)15."]^GA_A`^# &M4.)$# K(8(MA1&)8'&$[# 8&)15."]^GAaA`^# &M4.)$# K(8(MA1&)8'&$[# 8&)15."]^GA_A`^#

:'

C A B

slide-60
SLIDE 60

V)>),-),?*&d)<+94;+,&`IaIb&

049;>9)&52.?/$,A&>:+Q$-):<& & & & & & & & ! \#)+"28+%'/"L+-3&9$'+-;#-)'$/&*93%L'=-+J3;#-)' A 4"-#/;Q'-#)+"J#;'=-+J3;#-)'+-;#-#;'<Q';#*-#/)3%L'J#-)3+%' A N%-#)+"J#;'=-+J3;#-)'+-;#-#;'<Q';#*-#/)3%L'J#-)3+%' A VI'J#-)3+%)'/-#'#12/".'$/&*93%L'=-+J3;#-)'/-#'+-;#-#;'</)#;'+%'3%)&/""/8+%'+-;#-'

^h' D763'P'O#Q+%;'&9#':Q&9'

5;4.)$# K(8(MA1&)8'&$[# 8&)15."]^GA_A`^# &M4.)$# K(8(MA1&)8'&$[# 8&)15."]^GAaA`^# &M4.)$# K(8(MA1&)8'&$[# 8&)15."]^GA_A`^#

:'

C A B

slide-61
SLIDE 61

M+,c0+-492:&F2$,.&F:+A:25&`Kajb&

1)&/2Q)&2&<$5>9)&>2$,.&>:+A:25&

^g' D763'P'O#Q+%;'&9#':Q&9'

7).;#$%&#H-65#5"#=EX."# :..C#

slide-62
SLIDE 62

M+,c0+-492:&F2$,.&F:+A:25&`Iajb&

O.&$<&>2?72A)-&2<&2&<$,A9)&UDd&_9)&S$./&./)&@+99+S$,A&?+,.),.<'&

^H' D763'P'O#Q+%;'&9#':Q&9'

META-INF/ META-INF/MANIFEST.MF

  • rg/
  • rg/foo/
  • rg/foo/paint/
  • rg/foo/paint/PaintFrame$1$1.class
  • rg/foo/paint/PaintFrame$1.class
  • rg/foo/paint/PaintFrame$ShapeActionListener.class
  • rg/foo/paint/PaintFrame.class
  • rg/foo/paint/SimpleShape.class
  • rg/foo/paint/ShapeComponent.class
  • rg/foo/shape/
  • rg/foo/shape/Circle.class
  • rg/foo/shape/circle.png
  • rg/foo/shape/Square.class
  • rg/foo/shape/square.png
  • rg/foo/shape/Triangle.class
  • rg/foo/shape/triangle.png
slide-63
SLIDE 63

M+,c0+-492:&F2$,.&F:+A:25&`Iajb&

O.&$<&>2?72A)-&2<&2&<$,A9)&UDd&_9)&S$./&./)&@+99+S$,A&?+,.),.<'&

^R' D763'P'O#Q+%;'&9#':Q&9'

META-INF/ META-INF/MANIFEST.MF

  • rg/
  • rg/foo/
  • rg/foo/paint/
  • rg/foo/paint/PaintFrame$1$1.class
  • rg/foo/paint/PaintFrame$1.class
  • rg/foo/paint/PaintFrame$ShapeActionListener.class
  • rg/foo/paint/PaintFrame.class
  • rg/foo/paint/SimpleShape.class
  • rg/foo/paint/ShapeComponent.class
  • rg/foo/shape/
  • rg/foo/shape/Circle.class
  • rg/foo/shape/circle.png
  • rg/foo/shape/Square.class
  • rg/foo/shape/square.png
  • rg/foo/shape/Triangle.class
  • rg/foo/shape/triangle.png

Main implementation package is

  • rg.foo.paint
slide-64
SLIDE 64

M+,c0+-492:&F2$,.&F:+A:25&`Iajb&

O.&$<&>2?72A)-&2<&2&<$,A9)&UDd&_9)&S$./&./)&@+99+S$,A&?+,.),.<'&

^Z' D763'P'O#Q+%;'&9#':Q&9'

META-INF/ META-INF/MANIFEST.MF

  • rg/
  • rg/foo/
  • rg/foo/paint/
  • rg/foo/paint/PaintFrame$1$1.class
  • rg/foo/paint/PaintFrame$1.class
  • rg/foo/paint/PaintFrame$ShapeActionListener.class
  • rg/foo/paint/PaintFrame.class
  • rg/foo/paint/SimpleShape.class
  • rg/foo/paint/ShapeComponent.class
  • rg/foo/shape/
  • rg/foo/shape/Circle.class
  • rg/foo/shape/circle.png
  • rg/foo/shape/Square.class
  • rg/foo/shape/square.png
  • rg/foo/shape/Triangle.class
  • rg/foo/shape/triangle.png

Static main method in PaintFrame

slide-65
SLIDE 65

M+,c0+-492:&F2$,.&F:+A:25&`Iajb&

O.&$<&>2?72A)-&2<&2&<$,A9)&UDd&_9)&S$./&./)&@+99+S$,A&?+,.),.<'&

^]' D763'P'O#Q+%;'&9#':Q&9'

META-INF/ META-INF/MANIFEST.MF

  • rg/
  • rg/foo/
  • rg/foo/paint/
  • rg/foo/paint/PaintFrame$1$1.class
  • rg/foo/paint/PaintFrame$1.class
  • rg/foo/paint/PaintFrame$ShapeActionListener.class
  • rg/foo/paint/PaintFrame.class
  • rg/foo/paint/SimpleShape.class
  • rg/foo/paint/ShapeComponent.class
  • rg/foo/shape/
  • rg/foo/shape/Circle.class
  • rg/foo/shape/circle.png
  • rg/foo/shape/Square.class
  • rg/foo/shape/square.png
  • rg/foo/shape/Triangle.class
  • rg/foo/shape/triangle.png

Interface SimpleShape supports multiple shape implementations

slide-66
SLIDE 66

M+,c0+-492:&F2$,.&F:+A:25&`Iajb&

O.&$<&>2?72A)-&2<&2&<$,A9)&UDd&_9)&S$./&./)&@+99+S$,A&?+,.),.<'&

^^' D763'P'O#Q+%;'&9#':Q&9'

META-INF/ META-INF/MANIFEST.MF

  • rg/
  • rg/foo/
  • rg/foo/paint/
  • rg/foo/paint/PaintFrame$1$1.class
  • rg/foo/paint/PaintFrame$1.class
  • rg/foo/paint/PaintFrame$ShapeActionListener.class
  • rg/foo/paint/PaintFrame.class
  • rg/foo/paint/SimpleShape.class
  • rg/foo/paint/ShapeComponent.class
  • rg/foo/shape/
  • rg/foo/shape/Circle.class
  • rg/foo/shape/circle.png
  • rg/foo/shape/Square.class
  • rg/foo/shape/square.png
  • rg/foo/shape/Triangle.class
  • rg/foo/shape/triangle.png

Shape implementations defined in org.foo.shape

slide-67
SLIDE 67

M+,c0+-492:&F2$,.&F:+A:25&`jajb&

d)92;+,</$>&25+,A&?92<<)<&

^b' D763'P'O#Q+%;'&9#':Q&9'

Paint Frame Simple Shape Shape Component Circle Square Triangle b# c# b# c#

slide-68
SLIDE 68

M+,c0+-492:&F2$,.&F:+A:25&`jajb&

d)92;+,</$>&25+,A&?92<<)<&

^d' D763'P'O#Q+%;'&9#':Q&9'

Paint Frame Simple Shape Shape Component Circle Square Triangle b# c# b# c# How to decompose into bundles?

slide-69
SLIDE 69

0+-492:&F2$,.&F:+A:25&V)<$A,&

^e' D763'P'O#Q+%;'&9#':Q&9'

Shape Paint

Square

&M4.)$# .)*AD..A1%(4&A1d,()&# &M4.)$# .)*AD..A1%(4&#

Triangle

&M4.)$# .)*AD..A1%(4&A$)5("*'&#

Circle

&M4.)$# .)*AD..A1%(4&AE5)E'&#

slide-70
SLIDE 70

(),)_.<&+@&0+-492:$H)-&F2$,.&F:+A:25&

P,@+:?)-&9+A$?29&3+4,-2:$)<& & D4.+52;?&-)>),-),?*&:)<+94;+,& ! (%)2-#)'=-+=#-'*+%`L2-/8+%' ' O5>:+Q)<&:)4<23$9$.*&+@&?+-)& & O5>:+Q)<&23$9$.*&.+&?:)2.)&-$C):),.&?+,_A4:2;+,<&

bh' D763'P'O#Q+%;'&9#':Q&9'

slide-71
SLIDE 71

D763'P'O#Q+%;'&9#':Q&9' bg'

slide-72
SLIDE 72

1/2.&h&1/*&+@&Z$@)?*?9)&Z2*):&

!,?)&S)&/2Q)&2&34,-9)E&S/2.&-+&S)&-+&S$./&$.6& ! G#'%##;'&+')+$#9+?'&#""'&9#'D763'I-/$#?+-0'/<+2&'3&'

bH' D763'P'O#Q+%;'&9#':Q&9'

slide-73
SLIDE 73

1/2.&h&1/*&+@&Z$@)?*?9)&Z2*):&

!,?)&S)&/2Q)&2&34,-9)E&S/2.&-+&S)&-+&S$./&$.6& ! G#'%##;'&+')+$#9+?'&#""'&9#'D763'I-/$#?+-0'/<+2&'3&' 1/2.&$@&+4:&34,-9)&,))-<&.+&3)&$,$;29$H)-&<+5)/+S6& ! G#'%##;')+$#')+-&'+I'9++0'3%'&9#'I-/$#?+-0'

bR' D763'P'O#Q+%;'&9#':Q&9'

slide-74
SLIDE 74

1/2.&h&1/*&+@&Z$@)?*?9)&Z2*):&

!,?)&S)&/2Q)&2&34,-9)E&S/2.&-+&S)&-+&S$./&$.6& ! G#'%##;'&+')+$#9+?'&#""'&9#'D763'I-/$#?+-0'/<+2&'3&' 1/2.&$@&+4:&34,-9)&,))-<&.+&3)&$,$;29$H)-&<+5)/+S6& ! G#'%##;')+$#')+-&'+I'9++0'3%'&9#'I-/$#?+-0' 1/2.&$@&S)&S2,.&.+&2--&2,-&:)5+Q)&34,-9)<&2.&:4,&;5)6& ! G#'%##;')+$#?/Q'&+'/**#))'&9#'2%;#-"Q3%L'I-/$#?+-0'

bZ' D763'P'O#Q+%;'&9#':Q&9'

slide-75
SLIDE 75

1/2.&h&1/*&+@&Z$@)?*?9)&Z2*):&

!,?)&S)&/2Q)&2&34,-9)E&S/2.&-+&S)&-+&S$./&$.6& ! G#'%##;'&+')+$#9+?'&#""'&9#'D763'I-/$#?+-0'/<+2&'3&' 1/2.&$@&+4:&34,-9)&,))-<&.+&3)&$,$;29$H)-&<+5)/+S6& ! G#'%##;')+$#')+-&'+I'9++0'3%'&9#'I-/$#?+-0' 1/2.&$@&S)&S2,.&.+&2--&2,-&:)5+Q)&34,-9)<&2.&:4,&;5)6& ! G#'%##;')+$#?/Q'&+'/**#))'&9#'2%;#-"Q3%L'I-/$#?+-0' 1)&?2,&-+&299&+@&./)<)&./$,A<&S$./&2&S)99c-)_,)-&9$@)?*?9)&@+:&34,-9)<& ! 4'"3I#*Q*"#';#`%#)'&9#')&/L#)'+I'/'<2%;"#o)'"3I#8$#' A a9#'I-/$#?+-0'/))+*3/&#)'/'"3I#*Q*"#')&/&#'?3&9'#/*9'<2%;"#'

b]' D763'P'O#Q+%;'&9#':Q&9'

slide-76
SLIDE 76

(4,-9)&Z$@)&=*?9)&

b^' D763'P'O#Q+%;'&9#':Q&9'

INSTALLED RESOLVED UNINSTALLED STARTING STOPPING ACTIVE &M4'5E5$# (,$.;(XE# 5"1$(''# ,4J($&# ,"5"1$(''# )&1.'8&# ,"5"1$(''# 1$()$# 1$.4#

slide-77
SLIDE 77

(4,-9)&Z$@)&=*?9)&

bb' D763'P'O#Q+%;'&9#':Q&9'

UNINSTALLED STARTING STOPPING ACTIVE &M4'5E5$# (,$.;(XE# ,4J($&# ,"5"1$(''# ,"5"1$(''# 1$()$# 1$.4# INSTALLED 5"1$(''# )&1.'8&# RESOLVED

;&2<9*)./'"'=8.$9&>'#&2<9*&2')32' ?<$&'$&,&.$&.?)&2'

slide-78
SLIDE 78

(4,-9)&Z$@)&=*?9)&

bd' D763'P'O#Q+%;'&9#':Q&9'

)&1.'8&# INSTALLED 5"1$(''# UNINSTALLED &M4'5E5$# (,$.;(XE# ,4J($&# ,"5"1$(''# ,"5"1$(''# 1$()$# RESOLVED STOPPING STARTING 1$.4# ACTIVE

@?-*"-./'"'=8.$9&>',#<*)$&2'".' <,,<#38.)31'3<').)-"9)A&'".$' "??&22'3B&'C#"4&%<#D'

slide-79
SLIDE 79

(4,-9)&D?;Q2.+:&

B/)&34,-9)&2?;Q2.+:&$<&2&@:25)S+:7&/++7&.+&299+S&34,-9)<&.+&<.2:.4>&2,-& </4.-+S,&

be' D763'P'O#Q+%;'&9#':Q&9'

slide-80
SLIDE 80

(4,-9)&D?;Q2.+:&

B/)&34,-9)&2?;Q2.+:&$<&2&@:25)S+:7&/++7&.+&299+S&34,-9)<&.+&<.2:.4>&2,-& </4.-+S,& ! a9#'9++0'3)'3%J+0#;'3%'&9#'7a4\aV_6[7aDBBV_6')&/&#)'

dh' D763'P'O#Q+%;'&9#':Q&9'

slide-81
SLIDE 81

(4,-9)&D?;Q2.+:&

B/)&34,-9)&2?;Q2.+:&$<&2&@:25)S+:7&/++7&.+&299+S&34,-9)<&.+&<.2:.4>&2,-& </4.-+S,& ! a9#'9++0'3)'3%J+0#;'3%'&9#'7a4\aV_6[7aDBBV_6')&/&#)' ! 4%'/*8J/&+-'3$="#$#%&)'/')3$="#'3%&#-I/*#'/%;'3)'3%*"2;#;'3%'&9#'<2%;"#'E4\' `"#' &

dg' D763'P'O#Q+%;'&9#':Q&9'

public interface BundleActivator { void start(BundleContext context) throws Exception; void stop(BundleContext context) throws Exception; }

slide-82
SLIDE 82

(4,-9)&D?;Q2.+:&

B/)&34,-9)&2?;Q2.+:&$<&2&@:25)S+:7&/++7&.+&299+S&34,-9)<&.+&<.2:.4>&2,-& </4.-+S,& ! a9#'9++0'3)'3%J+0#;'3%'&9#'7a4\aV_6[7aDBBV_6')&/&#)' ! 4%'/*8J/&+-'3$="#$#%&)'/')3$="#'3%&#-I/*#'/%;'3)'3%*"2;#;'3%'&9#'<2%;"#'E4\' `"#' & & & ! 4;;38+%/"'$/%3I#)&'$#&/;/&/'3)'%##;#;'&+';#*"/-#'&9#'/*8J/&+-'

dH' D763'P'O#Q+%;'&9#':Q&9'

public interface BundleActivator { void start(BundleContext context) throws Exception; void stop(BundleContext context) throws Exception; } Bundle-Activator: <fully-qualified-class-name> &A*A># Bundle-Activator: org.foo.MyActivator

slide-83
SLIDE 83

(4,-9)&D?;Q2.+:&

B/)&34,-9)&2?;Q2.+:&$<&2&@:25)S+:7&/++7&.+&299+S&34,-9)<&.+&<.2:.4>&2,-& </4.-+S,& ! a9#'9++0'3)'3%J+0#;'3%'&9#'7a4\aV_6[7aDBBV_6')&/&#)' ! 4%'/*8J/&+-'3$="#$#%&)'/')3$="#'3%&#-I/*#'/%;'3)'3%*"2;#;'3%'&9#'<2%;"#'E4\' `"#' & & & ! 4;;38+%/"'$/%3I#)&'$#&/;/&/'3)'%##;#;'&+';#*"/-#'&9#'/*8J/&+-'

dR' D763'P'O#Q+%;'&9#':Q&9'

public interface BundleActivator { void start(BundleContext context) throws Exception; void stop(BundleContext context) throws Exception; } Bundle-Activator: <fully-qualified-class-name> &A*A># Bundle-Activator: org.foo.MyActivator What are these?

slide-84
SLIDE 84

(4,-9)&=+,.)\.&

d)>:)<),.<&./)&34,-9)k<&)\)?4;+,&?+,.)\.&

dZ' D763'P'O#Q+%;'&9#':Q&9'

public interface BundleContext { String getProperty(String key); Bundle getBundle(); Bundle installBundle(String location) throws BundleException; Bundle installBundle(String location, InputStream input) throws BundleException; Bundle getBundle(long id); Bundle[] getBundles(); ... void addBundleListener(BundleListener listener); void removeBundleListener(BundleListener listener); void addFrameworkListener(FrameworkListener listener); void removeFrameworkListener(FrameworkListener listener); ... File getDataFile(String filename); ... }

slide-85
SLIDE 85

(4,-9)&=+,.)\.&

d)>:)<),.<&./)&34,-9)k<&)\)?4;+,&?+,.)\.&

d]' D763'P'O#Q+%;'&9#':Q&9'

public interface BundleContext { String getProperty(String key); Bundle getBundle(); Bundle installBundle(String location) throws BundleException; Bundle installBundle(String location, InputStream input) throws BundleException; Bundle getBundle(long id); Bundle[] getBundles(); ... void addBundleListener(BundleListener listener); void removeBundleListener(BundleListener listener); void addFrameworkListener(FrameworkListener listener); void removeFrameworkListener(FrameworkListener listener); ... File getDataFile(String filename); ... }

Lifecycle method to install other bundles

slide-86
SLIDE 86

(4,-9)&=+,.)\.&

d)>:)<),.<&./)&34,-9)k<&)\)?4;+,&?+,.)\.&

d^' D763'P'O#Q+%;'&9#':Q&9'

public interface BundleContext { String getProperty(String key); Bundle getBundle(); Bundle installBundle(String location) throws BundleException; Bundle installBundle(String location, InputStream input) throws BundleException; Bundle getBundle(long id); Bundle[] getBundles(); ... void addBundleListener(BundleListener listener); void removeBundleListener(BundleListener listener); void addFrameworkListener(FrameworkListener listener); void removeFrameworkListener(FrameworkListener listener); ... File getDataFile(String filename); ... }

Access to other installed bundles

slide-87
SLIDE 87

(4,-9)&=+,.)\.&

d)>:)<),.<&./)&34,-9)k<&)\)?4;+,&?+,.)\.&

db' D763'P'O#Q+%;'&9#':Q&9'

public interface BundleContext { String getProperty(String key); Bundle getBundle(); Bundle installBundle(String location) throws BundleException; Bundle installBundle(String location, InputStream input) throws BundleException; Bundle getBundle(long id); Bundle[] getBundles(); ... void addBundleListener(BundleListener listener); void removeBundleListener(BundleListener listener); void addFrameworkListener(FrameworkListener listener); void removeFrameworkListener(FrameworkListener listener); ... File getDataFile(String filename); ... }

Access to our own bundle... what's that?

slide-88
SLIDE 88

(4,-9)&

d4,c;5)&:)>:)<),.2;+,&+@&2&34,-9)&

dd' D763'P'O#Q+%;'&9#':Q&9'

public interface Bundle { ... int getState(); void start(int options) throws BundleException; void start() throws BundleException; void stop(int options) throws BundleException; void stop() throws BundleException; void update() throws BundleException; void update(InputStream in) throws BundleException; void uninstall() throws BundleException; Dictionary getHeaders(); String getSymbolicName(); long getBundleId(); String getLocation(); ... URL getResource(String name); Enumeration getResources(String name) throws IOException; Class loadClass(String name) throws ClassNotFoundException; ... BundleContext getBundleContext(); }

slide-89
SLIDE 89

(4,-9)&

d4,c;5)&:)>:)<),.2;+,&+@&2&34,-9)&

de' D763'P'O#Q+%;'&9#':Q&9'

public interface Bundle { ... int getState(); void start(int options) throws BundleException; void start() throws BundleException; void stop(int options) throws BundleException; void stop() throws BundleException; void update() throws BundleException; void update(InputStream in) throws BundleException; void uninstall() throws BundleException; Dictionary getHeaders(); String getSymbolicName(); long getBundleId(); String getLocation(); ... URL getResource(String name); Enumeration getResources(String name) throws IOException; Class loadClass(String name) throws ClassNotFoundException; ... BundleContext getBundleContext(); }

Lifecycle method to start bundle

slide-90
SLIDE 90

(4,-9)&

d4,c;5)&:)>:)<),.2;+,&+@&2&34,-9)&

eh' D763'P'O#Q+%;'&9#':Q&9'

public interface Bundle { ... int getState(); void start(int options) throws BundleException; void start() throws BundleException; void stop(int options) throws BundleException; void stop() throws BundleException; void update() throws BundleException; void update(InputStream in) throws BundleException; void uninstall() throws BundleException; Dictionary getHeaders(); String getSymbolicName(); long getBundleId(); String getLocation(); ... URL getResource(String name); Enumeration getResources(String name) throws IOException; Class loadClass(String name) throws ClassNotFoundException; ... BundleContext getBundleContext(); }

Lifecycle method to stop bundle

slide-91
SLIDE 91

(4,-9)&

d4,c;5)&:)>:)<),.2;+,&+@&2&34,-9)&

eg' D763'P'O#Q+%;'&9#':Q&9'

public interface Bundle { ... int getState(); void start(int options) throws BundleException; void start() throws BundleException; void stop(int options) throws BundleException; void stop() throws BundleException; void update() throws BundleException; void update(InputStream in) throws BundleException; void uninstall() throws BundleException; Dictionary getHeaders(); String getSymbolicName(); long getBundleId(); String getLocation(); ... URL getResource(String name); Enumeration getResources(String name) throws IOException; Class loadClass(String name) throws ClassNotFoundException; ... BundleContext getBundleContext(); }

Lifecycle method to update bundle

slide-92
SLIDE 92

(4,-9)&

d4,c;5)&:)>:)<),.2;+,&+@&2&34,-9)&

eH' D763'P'O#Q+%;'&9#':Q&9'

public interface Bundle { ... int getState(); void start(int options) throws BundleException; void start() throws BundleException; void stop(int options) throws BundleException; void stop() throws BundleException; void update() throws BundleException; void update(InputStream in) throws BundleException; void uninstall() throws BundleException; Dictionary getHeaders(); String getSymbolicName(); long getBundleId(); String getLocation(); ... URL getResource(String name); Enumeration getResources(String name) throws IOException; Class loadClass(String name) throws ClassNotFoundException; ... BundleContext getBundleContext(); }

Lifecycle method to uninstall bundle

slide-93
SLIDE 93

(4,-9)&

d4,c;5)&:)>:)<),.2;+,&+@&2&34,-9)&

eR' D763'P'O#Q+%;'&9#':Q&9'

public interface Bundle { ... int getState(); void start(int options) throws BundleException; void start() throws BundleException; void stop(int options) throws BundleException; void stop() throws BundleException; void update() throws BundleException; void update(InputStream in) throws BundleException; void uninstall() throws BundleException; Dictionary getHeaders(); String getSymbolicName(); long getBundleId(); String getLocation(); ... URL getResource(String name); Enumeration getResources(String name) throws IOException; Class loadClass(String name) throws ClassNotFoundException; ... BundleContext getBundleContext(); }

Access to bundle resources

slide-94
SLIDE 94

(4,-9)&

d4,c;5)&:)>:)<),.2;+,&+@&2&34,-9)&

eZ' D763'P'O#Q+%;'&9#':Q&9'

public interface Bundle { ... int getState(); void start(int options) throws BundleException; void start() throws BundleException; void stop(int options) throws BundleException; void stop() throws BundleException; void update() throws BundleException; void update(InputStream in) throws BundleException; void uninstall() throws BundleException; Dictionary getHeaders(); String getSymbolicName(); long getBundleId(); String getLocation(); ... URL getResource(String name); Enumeration getResources(String name) throws IOException; Class loadClass(String name) throws ClassNotFoundException; ... BundleContext getBundleContext(); }

Access to accessible classes

slide-95
SLIDE 95

(4,-9)&V*,25$<5&

(4,-9)<&?2,&3)&$,<.299)-E&<.2:.)-E&<.+>>)-E&4>-2.)-E&2,-&4,$,<.299)-&2.&:4,&;5)& ! O2%;"#'#J#%&)')3L%/"'"3I#*Q*"#'*9/%L#)'

e]' D763'P'O#Q+%;'&9#':Q&9'

N.#'51$&"#D.)#&8&"$1# BundleContext.addBundleListener()

slide-96
SLIDE 96

(4,-9)&V*,25$<5&

(4,-9)<&?2,&3)&$,<.299)-E&<.2:.)-E&<.+>>)-E&4>-2.)-E&2,-&4,$,<.299)-&2.&:4,&;5)& ! O2%;"#'#J#%&)')3L%/"'"3I#*Q*"#'*9/%L#)'

e^' D763'P'O#Q+%;'&9#':Q&9'

!;4'&;&"$#'51$&"&)#5"$&)D(E&# public interface BundleListener extends EventListener { public void bundleChanged(BundleEvent event); }

slide-97
SLIDE 97

(4,-9)&V*,25$<5&

(4,-9)<&?2,&3)&$,<.299)-E&<.2:.)-E&<.+>>)-E&4>-2.)-E&2,-&4,$,<.299)-&2.&:4,&;5)& ! O2%;"#'#J#%&)')3L%/"'"3I#*Q*"#'*9/%L#)'

eb' D763'P'O#Q+%;'&9#':Q&9'

e&E&58&J#&8&"$# public class BundleEvent extends EventObject { public final static int INSTALLED = 0x00000001; public final static int STARTED = 0x00000002; public final static int STOPPED = 0x00000004; public final static int UPDATED = 0x00000008; public final static int UNINSTALLED = 0x00000010; public final static int RESOLVED = 0x00000020; public final static int UNRESOLVED = 0x00000040; public final static int STARTING = 0x00000080; public final static int STOPPING = 0x00000100; … public Bundle getBundle() { … } public int getType() { … } }

slide-98
SLIDE 98

(4,-9)c(2<)-&V*,25$?&P\.),<$3$9$.*&

(4,-9)&9$@)?*?9)&)Q),.<&>:+Q$-)&2&5)?/2,$<5&@+:&-*,25$?&)\.),<$3$9$.*& B/)&)\.),-):&>2X):,& ! 4%'/=="3*/8+%'*+$=+%#%&.'*/""#;'&9#'#C&#%;#-.'"3)&#%)'I+-'<2%;"#)'&+'<#' 3%)&/""#;.')&/-&#;.'/%;')&+==#;' ! D%'3%)&/"".'&9#'#C&#%;#-'=-+<#)'<2%;"#)'&+')##'3I'&9#Q'/-#'#C&#%)3+%)' A aQ=3*/""Q.'#C&#%)3+%'*+%&/3%')=#*3/"'$#&/;/&/'+-'-#)+2-*#)'&+'3%;3*/&#'&9#Q' =-+J3;#'/%'#C&#%)3+%' ! G9#%')&/-&#;.'&9#'#C&#%;#-'=#-I+-$)')+$#'/*8+%'&+'3%&#L-/&#'&9#'#C&#%)3+%' 3%&+'&9#'/=="3*/8+%' ! G9#%')&+==#;.'&9#'#C&#%;#-'=#-I+-$)')+$#'/*8+%'&+'-#$+J#'&9#'#C&#%)3+%' I-+$'&9#'/=="3*/8+%'

ed' D763'P'O#Q+%;'&9#':Q&9'

slide-99
SLIDE 99

P\.),-):&F2X):,&

D763'P'O#Q+%;'&9#':Q&9' ee'

W.)&# Tracker Frame Installed bundles

slide-100
SLIDE 100

P\.),-):&F2X):,&

D763'P'O#Q+%;'&9#':Q&9' ghh'

e&*51$&)# :,"J'&#'51$&"&)# Installed bundles W.)&# Tracker Frame

slide-101
SLIDE 101

P\.),-):&F2X):,&

D763'P'O#Q+%;'&9#':Q&9' ghg'

!"1$(''# :,"J'&AK()# Installed bundles W.)&# Tracker Frame

slide-102
SLIDE 102

P\.),-):&F2X):,&

D763'P'O#Q+%;'&9#':Q&9' ghH'

  • %(4&#

5;4'# W)&($&# '.*5E('#:,"J'&# Installed bundles W.)&# Tracker Frame

slide-103
SLIDE 103

P\.),-):&F2X):,&

D763'P'O#Q+%;'&9#':Q&9' ghR'

  • %(4&#

5;4'#

  • $()X"*#1%(4&#

:,"J'&#)&1.'8&1#5$# Installed bundles W.)&# Tracker Frame

slide-104
SLIDE 104

P\.),-):&F2X):,&

D763'P'O#Q+%;'&9#':Q&9' ghZ'

  • %(4&#

5;4'# R,"J'&# 1$()$#&8&"$# Installed bundles W.)&# Tracker Frame

slide-105
SLIDE 105

P\.),-):&F2X):,&

D763'P'O#Q+%;'&9#':Q&9' gh]'

  • %(4&#

5;4'# !"$&)).*($&#D.)#;&$(J($(L# )&1.,)E&1L#E'(11&1L#&$EA# Installed bundles W.)&# Tracker Frame

slide-106
SLIDE 106

P\.),-):&F2X):,&

D763'P'O#Q+%;'&9#':Q&9' gh^'

  • %(4&#

5;4'# Installed bundles W.)&# Tracker Frame ).E&?3'

slide-107
SLIDE 107

P\.),-):&F2X):,&

D763'P'O#Q+%;'&9#':Q&9' ghb'

  • %(4&#

5;4'#

7.)#$%&#)&8&)1&L#5D#$%&#1%(4&#:,"J'&# 51#1$.44&JL#$%&#$)(EC&)#)&;.8&1#5$1# (11.E5($&J#1%(4&A#

Installed bundles W.)&# Tracker Frame

slide-108
SLIDE 108

P\.),-):&F2$,.&F:+A:25&!Q):Q$)S&`KaIb&

V*,25$?299*&)\.),<$39)&>2$,.&>:+A:25&& ! N)#)'&9#'#C&#%;#-'=/n#-%'&+';#"3J#-')9/=#)' ! a9#'=/3%&'<2%;"#'3)'&9#'#C&#%;#-.'35#5.'3&'"3)&#%)'I+-'<2%;"#)'*+%&/3%3%L')9/=#)' ! D%'3%)&/"".'&9#'#C&#%;#-'=-+<#)'<2%;"#)'&+')##'3I'&9#Q'/-#'#C&#%)3+%)' A 7=#*3/"'$#&/;/&/'3%'&9#'$/%3I#)&';#%+&#)'&9#'%/$#.'*"/)).'/%;'3*+%'+I'&9#' )9/=#' e<)<&>92?)/+9-):&S/),&</2>)&/2<&3)),&4<)-E&34.&?4::),.9*&4,2Q2$9239)&3)?24<)& ./)&34,-9)&$<&,+.&2?;Q)&

ghd' D763'P'O#Q+%;'&9#':Q&9'

slide-109
SLIDE 109

P\.),-):&F2$,.&F:+A:25&V)<$A,&`KaIb&

ghe' D763'P'O#Q+%;'&9#':Q&9'

Paint Frame Simple Shape Shape Component Circle Square Triangle b# c# b# c# Shape Extension Tracker Default Shape

slide-110
SLIDE 110

P\.),-):&F2$,.&F:+A:25&V)<$A,&`IaIb&

ggh' D763'P'O#Q+%;'&9#':Q&9'

Shape Paint Square

&M4.)$# .)*AD..A1%(4&#

Triangle Circle

Extension-Name: Extension-Name: Circle Circle Extension-Class: Extension-Class:

  • rg.foo.shape.circle.Circle
  • rg.foo.shape.circle.Circle

Extension-Icon: Extension-Icon:

  • rg/
  • rg/foo/shape/circle/circle.png

foo/shape/circle/circle.png

slide-111
SLIDE 111

d)@:)</$,A&./)&]:25)S+:7&

e>-2.)&2,-&4,$,<.299&9$@)?*?9)&+>):2;+,<&2:)&2&9$X9)&?+5>9$?2.)-& ! G9Qj'

ggg' D763'P'O#Q+%;'&9#':Q&9'

slide-112
SLIDE 112

d)@:)</$,A&./)&]:25)S+:7&

e>-2.)&2,-&4,$,<.299&9$@)?*?9)&+>):2;+,<&2:)&2&9$X9)&?+5>9$?2.)-& ! G9Qj' A (C3)8%L'<2%;"#'$/Q<#'<#'2)3%L'*"/))#)'I-+$'&9#'<2%;"#'<#3%L'2=;/&#;'+-' 2%3%)&/""#;' A !/%%+&'=2""'&9#'-2L'+2&'I-+$'2%;#-';#=#%;#%&'<2%;"#)'

ggH' D763'P'O#Q+%;'&9#':Q&9'

slide-113
SLIDE 113

d)@:)</$,A&./)&]:25)S+:7&

e>-2.)&2,-&4,$,<.299&9$@)?*?9)&+>):2;+,<&2:)&2&9$X9)&?+5>9$?2.)-& ! G9Qj' A (C3)8%L'<2%;"#'$/Q<#'<#'2)3%L'*"/))#)'I-+$'&9#'<2%;"#'<#3%L'2=;/&#;'+-' 2%3%)&/""#;' A !/%%+&'=2""'&9#'-2L'+2&'I-+$'2%;#-';#=#%;#%&'<2%;"#)' B+&-)29&S$./&./$<E&./)&@:25)S+:7&.:)2.<&4>-2.)&2,-&4,$,<.299&2<&2&.S+c<.)>& >:+?)<<& ! N=;/&#)'/%;'2%3%)&/"")';+'%+&'9/==#%'3$$#;3/&#"Q' ! @-/$#?+-0'$2)&'<#'k-#I-#)9#;l'&+'=2&'&9#$'3%&+'#p#*&' A 4*&2/""Q.'I+-'2=;/&#)'3&'3)'/'"3n"#'$+-#'*+$="3*/&#;'&9/%'&93).'<2&'?#'*/%' /**#=&'&93)'J3#?'I+-'%+?555'

ggR' D763'P'O#Q+%;'&9#':Q&9'

slide-114
SLIDE 114

d)@:)</$,A&./)&]:25)S+:7&

e>-2.)&2,-&4,$,<.299&9$@)?*?9)&+>):2;+,<&2:)&2&9$X9)&?+5>9$?2.)-& ! G9Qj' A (C3)8%L'<2%;"#'$/Q<#'<#'2)3%L'*"/))#)'I-+$'&9#'<2%;"#'<#3%L'2=;/&#;'+-' 2%3%)&/""#;' A !/%%+&'=2""'&9#'-2L'+2&'I-+$'2%;#-';#=#%;#%&'<2%;"#)' B+&-)29&S$./&./$<E&./)&@:25)S+:7&.:)2.<&4>-2.)&2,-&4,$,<.299&2<&2&.S+c<.)>& >:+?)<<& ! N=;/&#)'/%;'2%3%)&/"")';+'%+&'9/==#%'3$$#;3/&#"Q' ! @-/$#?+-0'$2)&'<#'k-#I-#)9#;l'&+'=2&'&9#$'3%&+'#p#*&' A 4*&2/""Q.'I+-'2=;/&#)'3&'3)'/'"3n"#'$+-#'*+$="3*/&#;'&9/%'&93).'<2&'?#'*/%' /**#=&'&93)'J3#?'I+-'%+?555' l+S&-+&S)&:)@:)</&./)&@:25)S+:76&

ggZ' D763'P'O#Q+%;'&9#':Q&9'

slide-115
SLIDE 115

F2?72A)&D-5$,&

]:25)S+:7&>:+Q$-)<&<>)?$29&DFO&.+&-)29&S$./&34,-9)<&$,.):2?;+,<&

gg]' D763'P'O#Q+%;'&9#':Q&9'

public interface PackageAdmin { static final int BUNDLE_TYPE_FRAGMENT = 0x00000001; Bundle getBundle(Class clazz); Bundle[] getBundles(String symbolicName, String versionRange); int getBundleType(Bundle bundle); ExportedPackage getExportedPackage(String name); ExportedPackage[] getExportedPackages(Bundle bundle); ExportedPackage[] getExportedPackages(String name); Bundle[] getFragments(Bundle bundle); RequiredBundle[] getRequiredBundles(String symbolicName); Bundle[] getHosts(Bundle bundle); void refreshPackages(Bundle[] bundles); boolean resolveBundles(Bundle[] bundles); }

slide-116
SLIDE 116

F2?72A)&D-5$,&

]:25)S+:7&>:+Q$-)<&<>)?$29&DFO&.+&-)29&S$./&34,-9)<&$,.):2?;+,<&

gg^' D763'P'O#Q+%;'&9#':Q&9'

public interface PackageAdmin { static final int BUNDLE_TYPE_FRAGMENT = 0x00000001; Bundle getBundle(Class clazz); Bundle[] getBundles(String symbolicName, String versionRange); int getBundleType(Bundle bundle); ExportedPackage getExportedPackage(String name); ExportedPackage[] getExportedPackages(Bundle bundle); ExportedPackage[] getExportedPackages(String name); Bundle[] getFragments(Bundle bundle); RequiredBundle[] getRequiredBundles(String symbolicName); Bundle[] getHosts(Bundle bundle); void refreshPackages(Bundle[] bundles); boolean resolveBundles(Bundle[] bundles); } Provides various methods to introspect bundle dependencies

slide-117
SLIDE 117

F2?72A)&D-5$,&

]:25)S+:7&>:+Q$-)<&<>)?$29&DFO&.+&-)29&S$./&34,-9)<&$,.):2?;+,<&

ggb' D763'P'O#Q+%;'&9#':Q&9'

public interface PackageAdmin { static final int BUNDLE_TYPE_FRAGMENT = 0x00000001; Bundle getBundle(Class clazz); Bundle[] getBundles(String symbolicName, String versionRange); int getBundleType(Bundle bundle); ExportedPackage getExportedPackage(String name); ExportedPackage[] getExportedPackages(Bundle bundle); ExportedPackage[] getExportedPackages(String name); Bundle[] getFragments(Bundle bundle); RequiredBundle[] getRequiredBundles(String symbolicName); Bundle[] getHosts(Bundle bundle); void refreshPackages(Bundle[] bundles); boolean resolveBundles(Bundle[] bundles); } So, how do we gain access to this API?

slide-118
SLIDE 118

D763'P'O#Q+%;'&9#':Q&9' ggd'

slide-119
SLIDE 119

"):Q$?)&!:$),.2;+,&

B/)&!"#$&@:25)S+:7&>:+5+.)<&2&<):Q$?)c+:$),.)-&$,.):2?;+,&>2X):,&25+,A& 34,-9)<&

gge' D763'P'O#Q+%;'&9#':Q&9'

slide-120
SLIDE 120

"):Q$?)&!:$),.2;+,&

B/)&!"#$&@:25)S+:7&>:+5+.)<&2&<):Q$?)c+:$),.)-&$,.):2?;+,&>2X):,&25+,A& 34,-9)<&

gHh' D763'P'O#Q+%;'&9#':Q&9'

Service Registry

slide-121
SLIDE 121

"):Q$?)&!:$),.2;+,&

B/)&!"#$&@:25)S+:7&>:+5+.)<&2&<):Q$?)c+:$),.)-&$,.):2?;+,&>2X):,&25+,A& 34,-9)<&

gHg' D763'P'O#Q+%;'&9#':Q&9'

Y,:'51%# Service Registry Service Provider Service Description

slide-122
SLIDE 122

"):Q$?)&!:$),.2;+,&

B/)&!"#$&@:25)S+:7&>:+5+.)<&2&<):Q$?)c+:$),.)-&$,.):2?;+,&>2X):,&25+,A& 34,-9)<&

gHH' D763'P'O#Q+%;'&9#':Q&9'

75"J# Service Requester Y,:'51%# Service Registry Service Provider Service Description

slide-123
SLIDE 123

"):Q$?)&!:$),.2;+,&

B/)&!"#$&@:25)S+:7&>:+5+.)<&2&<):Q$?)c+:$),.)-&$,.):2?;+,&>2X):,&25+,A& 34,-9)<&

gHR' D763'P'O#Q+%;'&9#':Q&9'

75"J# Service Requester Y,:'51%# Service Registry Service Provider Service Description R5"J#

slide-124
SLIDE 124

!"#$&"):Q$?)&D>>:+2?/&D-Q2,.2A)<&

Z$A/.S)$A/.&<):Q$?)<& ! U3-#*&'$#&9+;'3%J+*/8+%' ".:4?.4:)-&?+-)& ! B-+$+&#)')#=/-/8+%'+I'3%&#-I/*#'I-+$'3$="#$#%&/8+%' ! (%/<"#)'-#2)#.')2<)8&2&/<3"3&Q.'"++)#'*+2="3%L.'/%;'"/&#'<3%;3%L' V*,25$?<& ! T++)#'*+2="3%L'/%;'"/&#'<3%;3%L'$/0#'3&'=+))3<"#'&+')2==+-&'-2%K8$#' $/%/L#$#%&'+I'$+;2"#'

gHZ' D763'P'O#Q+%;'&9#':Q&9'

slide-125
SLIDE 125

!"#$&D>>9$?2;+,<&

D&?+99)?;+,&+@&34,-9)<&./2.&$,.):2?.&Q$2&<):Q$?)&$,.):@2?)<& ! O2%;"#)'$/Q'<#'3%;#=#%;#%&"Q';#J#"+=#;'/%;';#="+Q#;' ! O2%;"#)'/%;'&9#3-'/))+*3/&#;')#-J3*#)'$/Q'/==#/-'+-';3)/==#/-'/&'/%Q'8$#' & d)<49;,A&2>>9$?2;+,&@+99+S<&2&"):Q$?)c!:$),.)-&=+5>+,),.&0+-)9&2>>:+2?/& ! !+$<3%#)'3;#/)'I-+$'<+&9'*+$=+%#%&'/%;')#-J3*#'+-3#%&/8+%'

gH]' D763'P'O#Q+%;'&9#':Q&9'

slide-126
SLIDE 126

(4,-9)&Z$@)&=*?9)&`d)Q$<$.)-b&

gH^' D763'P'O#Q+%;'&9#':Q&9'

INSTALLED RESOLVED UNINSTALLED STARTING STOPPING ACTIVE &M4'5E5$# (,$.;(XE# 5"1$(''# ,4J($&# ,"5"1$(''# )&1.'8&# ,"5"1$(''# 1$()$# 1$.4#

slide-127
SLIDE 127

(4,-9)&Z$@)&=*?9)&`d)Q$<$.)-b&

gHb' D763'P'O#Q+%;'&9#':Q&9'

RESOLVED UNINSTALLED &M4'5E5$# (,$.;(XE# ,4J($&# ,"5"1$(''# ,"5"1$(''# INSTALLED 5"1$(''# )&1.'8&# STARTING STOPPING ACTIVE 1$()$# 1$.4#

@?-*"-./'"'=8.$9&'"99<%2')3' 3<',#<*)$&'".$'82&'2&#*)?&2'

slide-128
SLIDE 128

1/2.k<&2&"):Q$?)6&

U4<.&2&<$5>9)&U2Q2&+3G)?.& B*>$?299*&-)<?:$3)-&3*&2&U2Q2&$,.):@2?)& ! 4""+?)'I+-'$2"8="#'=-+J3;#-)' e<$,A&2&<):Q$?)&$<&G4<.&9$7)&4<$,A&2,*&+3G)?.&

gHd' D763'P'O#Q+%;'&9#':Q&9'

slide-129
SLIDE 129

l)99+&1+:9-&"):Q$?)&P\25>9)&

Z).k<&2<<45)&S)&/2Q)&./$<&<):Q$?)&$,.):@2?)& & &

gHe' D763'P'O#Q+%;'&9#':Q&9'

package com.foo.hello; public interface Hello { void sayHello(String name); }

slide-130
SLIDE 130

l)99+&1+:9-&"):Q$?)&P\25>9)&

Z).k<&2<<45)&S)&/2Q)&./$<&<):Q$?)&$,.):@2?)& & & & D,-&./$<&$5>9)5),.2;+,&

gRh' D763'P'O#Q+%;'&9#':Q&9'

package com.foo.hello; public interface Hello { void sayHello(String name); } package com.foo.hello.impl; import com.foo.hello; public class HelloImpl implements Hello { public void sayHello(String name) { System.out.println("Hello " + name + "!"); } }

slide-131
SLIDE 131

F439$</$,A&2&"):Q$?)&`KaIb&

(4,-9)=+,.)\.&299+S<&34,-9)<&.+&>439$</&<):Q$?)<&

gRg' D763'P'O#Q+%;'&9#':Q&9'

public interface BundleContext { … void addServiceListener(ServiceListener listener, String filter) throws InvalidSyntaxException; void addServiceListener(ServiceListener listener); void removeServiceListener(ServiceListener listener); ServiceRegistration registerService( String[] clazzes, Object service, Dictionary props); ServiceRegistration registerService( String clazz, Object service, Dictionary props); ServiceReference[] getServiceReferences(String clazz, String filter) throws InvalidSyntaxException; ServiceReference getServiceReference(String clazz); Object getService(ServiceReference reference); boolean ungetService(ServiceReference reference); }

slide-132
SLIDE 132

F439$</$,A&2&"):Q$?)&`KaIb&

(4,-9)=+,.)\.&299+S<&34,-9)<&.+&>439$</&<):Q$?)<&

gRH' D763'P'O#Q+%;'&9#':Q&9'

public interface BundleContext { … void addServiceListener(ServiceListener listener, String filter) throws InvalidSyntaxException; void addServiceListener(ServiceListener listener); void removeServiceListener(ServiceListener listener); ServiceRegistration registerService( String[] clazzes, Object service, Dictionary props); ServiceRegistration registerService( String clazz, Object service, Dictionary props); ServiceReference[] getServiceReferences(String clazz, String filter) throws InvalidSyntaxException; ServiceReference getServiceReference(String clazz); Object getService(ServiceReference reference); boolean ungetService(ServiceReference reference); } We have two methods for publishing services

slide-133
SLIDE 133

F439$</$,A&2&"):Q$?)&`IaIb&

(4,-9)<&+R),&>439$</&<):Q$?)<&$,&./)$:&2?;Q2.+:&

gRR' D763'P'O#Q+%;'&9#':Q&9'

package com.foo.hello.impl; import org.osgi.framework.*; public class Activator implements BundleActivator { private ServiceRegistration m_reg = null; public void start(BundleContext context) { m_reg = context.registerService( com.foo.hello.Hello.class.getName(), new HelloImpl(), null); } public void stop(BundleContext context) { m_reg.unregister(); } }

slide-134
SLIDE 134

F439$</$,A&2&"):Q$?)&`IaIb&

(4,-9)<&+R),&>439$</&<):Q$?)<&$,&./)$:&2?;Q2.+:&

gRZ' D763'P'O#Q+%;'&9#':Q&9'

package com.foo.hello.impl; import org.osgi.framework.*; public class Activator implements BundleActivator { private ServiceRegistration m_reg = null; public void start(BundleContext context) { m_reg = context.registerService( com.foo.hello.Hello.class.getName(), new HelloImpl(), null); } public void stop(BundleContext context) { m_reg.unregister(); } } We register the service when starting, which makes it available to other bundles

slide-135
SLIDE 135

F439$</$,A&2&"):Q$?)&`IaIb&

(4,-9)<&+R),&>439$</&<):Q$?)<&$,&./)$:&2?;Q2.+:&

gR]' D763'P'O#Q+%;'&9#':Q&9'

package com.foo.hello.impl; import org.osgi.framework.*; public class Activator implements BundleActivator { private ServiceRegistration m_reg = null; public void start(BundleContext context) { m_reg = context.registerService( com.foo.hello.Hello.class.getName(), new HelloImpl(), null); } public void stop(BundleContext context) { m_reg.unregister(); } } We unregister it when stopping

slide-136
SLIDE 136

F2?72A$,A&./)&l)99+&1+:9-&"):Q$?)&

!4:&<):Q$?)&$5>9)5),.2;+,&34,-9)&?+,.2$,<&./)<)&>2?72A)<& ! *+$5I++59#""+' ! *+$5I++59#""+53$="'

gR^' D763'P'O#Q+%;'&9#':Q&9'

slide-137
SLIDE 137

F2?72A$,A&./)&l)99+&1+:9-&"):Q$?)&

!4:&<):Q$?)&$5>9)5),.2;+,&34,-9)&?+,.2$,<&./)<)&>2?72A)<& ! *+$5I++59#""+' ! *+$5I++59#""+53$="' D,-&./)&@+99+S$,A&52,$@)<.&5).2-2.2&

gRb' D763'P'O#Q+%;'&9#':Q&9'

Bundle-ManifestVersion: 2 Bundle-SymbolicName: com.foo.hello.impl Export-Package: com.foo.hello Import-Package: org.osgi.framework, com.foo.hello Bundle-Activator: com.foo.hello.impl.Activator

slide-138
SLIDE 138

e<$,A&2&"):Q$?)&`KaIb&

(4,-9)=+,.)\.&299+S<&34,-9)<&.+&_,-&<):Q$?)<&

gRd' D763'P'O#Q+%;'&9#':Q&9'

public interface BundleContext { … void addServiceListener(ServiceListener listener, String filter) throws InvalidSyntaxException; void addServiceListener(ServiceListener listener); void removeServiceListener(ServiceListener listener); ServiceRegistration registerService( String[] clazzes, Object service, Dictionary props); ServiceRegistration registerService( String clazz, Object service, Dictionary props); ServiceReference[] getServiceReferences(String clazz, String filter) throws InvalidSyntaxException; ServiceReference getServiceReference(String clazz); Object getService(ServiceReference reference); boolean ungetService(ServiceReference reference); }

slide-139
SLIDE 139

e<$,A&2&"):Q$?)&`KaIb&

(4,-9)=+,.)\.&299+S<&34,-9)<&.+&_,-&<):Q$?)<&

gRe' D763'P'O#Q+%;'&9#':Q&9'

public interface BundleContext { … void addServiceListener(ServiceListener listener, String filter) throws InvalidSyntaxException; void addServiceListener(ServiceListener listener); void removeServiceListener(ServiceListener listener); ServiceRegistration registerService( String[] clazzes, Object service, Dictionary props); ServiceRegistration registerService( String clazz, Object service, Dictionary props); ServiceReference[] getServiceReferences(String clazz, String filter) throws InvalidSyntaxException; ServiceReference getServiceReference(String clazz); Object getService(ServiceReference reference); boolean ungetService(ServiceReference reference); } We have methods to find service references and get service objects

slide-140
SLIDE 140

e<$,A&2&"):Q$?)&`IaIb&

(4,-9)<&:).:$)Q)&<):Q$?)&:)@):),?)<& ! V%;3-#*&'-#I#-#%*#)'&+')#-J3*#'+<F#*&'

gZh' D763'P'O#Q+%;'&9#':Q&9'

package com.foo.hello.client; import org.osgi.framework.*; import com.foo.hello.Hello; public class HelloClient implements BundleActivator { public void start(BundleContext context) { ServiceReference ref = context.getServiceReference( com.foo.hello.Hello.class.getName()); if (ref != null) { Hello h = (Hello) context.getService(ref); if (h != null) { h.sayHello("World"); context.ungetService(h); } } } … }

slide-141
SLIDE 141

e<$,A&2&"):Q$?)&`IaIb&

(4,-9)<&:).:$)Q)&<):Q$?)&:)@):),?)<& ! V%;3-#*&'-#I#-#%*#)'&+')#-J3*#'+<F#*&'

gZg' D763'P'O#Q+%;'&9#':Q&9'

package com.foo.hello.client; import org.osgi.framework.*; import com.foo.hello.Hello; public class HelloClient implements BundleActivator { public void start(BundleContext context) { ServiceReference ref = context.getServiceReference( com.foo.hello.Hello.class.getName()); if (ref != null) { Hello h = (Hello) context.getService(ref); if (h != null) { h.sayHello("World"); context.ungetService(h); } } } … }

We first get the service reference

slide-142
SLIDE 142

e<$,A&2&"):Q$?)&`IaIb&

(4,-9)<&:).:$)Q)&<):Q$?)&:)@):),?)<& ! V%;3-#*&'-#I#-#%*#)'&+')#-J3*#'+<F#*&'

gZH' D763'P'O#Q+%;'&9#':Q&9'

package com.foo.hello.client; import org.osgi.framework.*; import com.foo.hello.Hello; public class HelloClient implements BundleActivator { public void start(BundleContext context) { ServiceReference ref = context.getServiceReference( com.foo.hello.Hello.class.getName()); if (ref != null) { Hello h = (Hello) context.getService(ref); if (h != null) { h.sayHello("World"); context.ungetService(h); } } } … }

From the service reference we get the service object

slide-143
SLIDE 143

e<$,A&2&"):Q$?)&`IaIb&

(4,-9)<&:).:$)Q)&<):Q$?)&:)@):),?)<& ! V%;3-#*&'-#I#-#%*#)'&+')#-J3*#'+<F#*&'

gZR' D763'P'O#Q+%;'&9#':Q&9'

package com.foo.hello.client; import org.osgi.framework.*; import com.foo.hello.Hello; public class HelloClient implements BundleActivator { public void start(BundleContext context) { ServiceReference ref = context.getServiceReference( com.foo.hello.Hello.class.getName()); if (ref != null) { Hello h = (Hello) context.getService(ref); if (h != null) { h.sayHello("World"); context.ungetService(h); } } } … }

We use the service like a normal object

slide-144
SLIDE 144

e<$,A&2&"):Q$?)&`IaIb&

(4,-9)<&:).:$)Q)&<):Q$?)&:)@):),?)<& ! V%;3-#*&'-#I#-#%*#)'&+')#-J3*#'+<F#*&'

gZZ' D763'P'O#Q+%;'&9#':Q&9'

package com.foo.hello.client; import org.osgi.framework.*; import com.foo.hello.Hello; public class HelloClient implements BundleActivator { public void start(BundleContext context) { ServiceReference ref = context.getServiceReference( com.foo.hello.Hello.class.getName()); if (ref != null) { Hello h = (Hello) context.getService(ref); if (h != null) { h.sayHello("World"); context.ungetService(h); } } } … }

And release the service object when we are done with it

slide-145
SLIDE 145

F2?72A$,A&./)&l)99+&1+:9-&"):Q$?)&

!4:&?9$),.&$5>9)5),.2;+,&34,-9)&?+,.2$,<&./$<&>2?72A)& ! *+$5I++59#""+5*"3#%&' D,-&./)&@+99+S$,A&52,$@)<.&5).2-2.2&

gZ]' D763'P'O#Q+%;'&9#':Q&9'

Bundle-ManifestVersion: 2 Bundle-SymbolicName: com.foo.hello.client Import-Package: com.foo.hello,

  • rg.osgi.framework

Bundle-Activator: com.foo.hello.client.Activator

slide-146
SLIDE 146

"):Q$?)&V*,25$<5&

"):Q$?)<&?2,&3)&>439$</)-&2,-&:)Q+7)-&2.&:4,&;5)& ! 7#-J3*#'#J#%&)')3L%/"')#-J3*#'*9/%L#)' A :2)&'&-/*0'#J#%&)'I+-'/%Q')#-J3*#)'<#3%L'2)#;'

gZ^' D763'P'O#Q+%;'&9#':Q&9'

N.#'51$&"#D.)#&8&"$1# BundleContext.addServiceListener()

slide-147
SLIDE 147

"):Q$?)<&V*,25$<5&

"):Q$?)<&?2,&3)&>439$</)-&2,-&:)Q+7)-&2.&:4,&;5)& ! 7#-J3*#'#J#%&)')3L%/"')#-J3*#'*9/%L#)' A :2)&'&-/*0'#J#%&)'I+-'/%Q')#-J3*#)'<#3%L'2)#;'

gZb' D763'P'O#Q+%;'&9#':Q&9'

!;4'&;&"$#'51$&"&)#5"$&)D(E&# public interface ServiceListener extends EventListener { public void serviceChanged(ServiceEvent event); }

slide-148
SLIDE 148

"):Q$?)<&V*,25$<5&

"):Q$?)<&?2,&3)&>439$</)-&2,-&:)Q+7)-&2.&:4,&;5)& ! 7#-J3*#'#J#%&)')3L%/"')#-J3*#'*9/%L#)' A :2)&'&-/*0'#J#%&)'I+-'/%Q')#-J3*#)'<#3%L'2)#;'

gZd' D763'P'O#Q+%;'&9#':Q&9'

e&E&58&J#&8&"$# public class ServiceEvent extends EventObject { public final static int REGISTERED = 0x00000001; public final static int MODIFIED = 0x00000002; public final static int UNREGISTERING = 0x00000004; … public ServiceReference getServiceReference() { … } public int getType() { … } }

slide-149
SLIDE 149

"):Q$?)<&V*,25$<5&

"):Q$?)<&?2,&3)&>439$</)-&2,-&:)Q+7)-&2.&:4,&;5)& ! 7#-J3*#'#J#%&)')3L%/"')#-J3*#'*9/%L#)' A :2)&'&-/*0'#J#%&)'I+-'/%Q')#-J3*#)'<#3%L'2)#;'

gZe' D763'P'O#Q+%;'&9#':Q&9'

e&E&58&J#&8&"$# public class ServiceEvent extends EventObject { public final static int REGISTERED = 0x00000001; public final static int MODIFIED = 0x00000002; public final static int UNREGISTERING = 0x00000004; … public ServiceReference getServiceReference() { … } public int getType() { … } } Even though service are just normal objects, they are potentially much more volatile, so service events are very important

slide-150
SLIDE 150

"):Q$?)c(2<)-&V*,25$?&P\.),<$3$9$.*&

"):Q$?)&)Q),.<&>:+Q$-)&2&5)?/2,$<5&@+:&-*,25$?&)\.),<$3$9$.*& B/)&S/$.)3+2:-&>2X):,& ! a-#/&)'&9#')#-J3*#'-#L3)&-Q'/)'/'?93&#<+/-;' A 4'-#J#-)#'?/Q'&+'*-#/&#'/')#-J3*#' ! 4%'/=="3*/8+%'*+$=+%#%&'"3)&#%)'I+-')#-J3*#)'+I'/'=/-8*2"/-'&Q=#'&+'<#'/;;#;' /%;'-#$+J#;' ! D%'/;;38+%.'&9#')#-J3*#'3)'3%&#L-/&#;'3%&+'&9#'/=="3*/8+%' ! D%'-#$+J/".'&9#')#-J3*#'3)'-#$+J#;'I-+$'&9#'/=="3*/8+%'

g]h' D763'P'O#Q+%;'&9#':Q&9'

slide-151
SLIDE 151

1/$.)3+2:-&F2X):,&

  • %(4&#

5;4'# W.)&# Tracker Frame

g]g' D763'P'O#Q+%;'&9#':Q&9'

Framework Service registry

slide-152
SLIDE 152

1/$.)3+2:-&F2X):,&

e&*51$&)# 1&)85E&#'51$&"&)#

g]H' D763'P'O#Q+%;'&9#':Q&9'

Framework Service registry W.)&# Tracker Frame

  • %(4&#

5;4'#

slide-153
SLIDE 153

1/$.)3+2:-&F2X):,&

  • &)85E&#

4,:'5E(X."#

  • %(4&#

5;4'#

g]R' D763'P'O#Q+%;'&9#':Q&9'

Framework Service registry W.)&# Tracker Frame

slide-154
SLIDE 154

1/$.)3+2:-&F2X):,&

  • &)85E&#

&8&"$#

  • %(4&#

5;4'#

g]Z' D763'P'O#Q+%;'&9#':Q&9'

Framework Service registry W.)&# Tracker Frame

slide-155
SLIDE 155

1/$.)3+2:-&F2X):,&

  • &)85E&#

)&d,&1$#

  • %(4&#

5;4'#

g]]' D763'P'O#Q+%;'&9#':Q&9'

Framework Service registry W.)&# Tracker Frame

slide-156
SLIDE 156

1/$.)3+2:-&F2X):,&

  • &)85E&#:5"J5"*#
  • %(4&#

5;4'#

g]^' D763'P'O#Q+%;'&9#':Q&9'

Framework Service registry W.)&# Tracker Frame

slide-157
SLIDE 157

1/$.)3+2:-&F2X):,&

  • %(4&#

5;4'#

g]b' D763'P'O#Q+%;'&9#':Q&9'

Framework Service registry W.)&# Tracker Frame

slide-158
SLIDE 158

1/$.)3+2:-&F2X):,&

7.)#$%&#)&8&)1&L#5D#$%&#1%(4&#1&)85E&# 51#)&;.8&JL#$%&#$)(EC&)#)&;.8&1#5$1# (11.E5($&J#1%(4&A#

  • %(4&#

5;4'#

g]d' D763'P'O#Q+%;'&9#':Q&9'

Framework Service registry W.)&# Tracker Frame

slide-159
SLIDE 159

"):Q$?)&F2$,.&F:+A:25&!Q):Q$)S&

V*,25$?299*&)\.),<$39)&>2$,.&>:+A:25&& ! N)#)'&9#'?93&#<+/-;'=/n#-%'&+';#"3J#-')9/=#)' ! a9#'=/3%&'<2%;"#'"3)&#%)'I+-')9/=#')#-J3*#)'&9/&'*+$#'/%;'L+' ! N)#)')#-J3*#'=-+=#-8#)'I+-'&9#'%/$#'/%;'3*+%'+I'&9#')9/=#' e<)<&>92?)/+9-):&S/),&</2>)&/2<&3)),&4<)-E&34.&$<&?4::),.9*&4,2Q2$9239)& 3)?24<)&./)&<):Q$?)&$<&,+.&2Q2$9239)&

g]e' D763'P'O#Q+%;'&9#':Q&9'

slide-160
SLIDE 160

"):Q$?)&F2$,.&F:+A:25&V)<$A,&`KaIb&

g^h' D763'P'O#Q+%;'&9#':Q&9'

Paint Frame Simple Shape Shape Component Circle Square Triangle b# c# b# c# Shape Service Tracker Default Shape

slide-161
SLIDE 161

"):Q$?)&F2$,.&F:+A:25&V)<$A,&`IaIb&

D763'P'O#Q+%;'&9#':Q&9' g^g'

Shape Paint

&M4.)$# .)*AD..A1%(4&#

Circle Square Triangle

slide-162
SLIDE 162

=/299),A)<&+@&V*,25$<5&

(+./&34,-9)<&2,-&<):Q$?)<&2:)&-*,25$?& !"#$&$<&$,/):),.9*&549;c./:)2-)-& B/$<&5)2,<&*+4&/2Q)&.+&-)29&S$./&./)&@2?.&./2.& ! q+2-'/=="3*/8+%'?3""'"30#"Q')##'$2"8="#'&9-#/;)' ! 4=="3*/8+%'*+$=+%#%&)'*/%'/==#/-'+-';3)/==#/-'/&'/%Q'8$#' B/):)&$<&/)9>& ! 7#-J3*#'a-/*0#-' ! 7#-J3*#'!+$=+%#%&':+;#"'P'U#*"/-/8J#'7#-J3*#).'3BDED.'O"2#=-3%&'

g^H' D763'P'O#Q+%;'&9#':Q&9'

slide-163
SLIDE 163

D763'P'O#Q+%;'&9#':Q&9' g^R'

slide-164
SLIDE 164

1/2.&2&>2$,&T&

0+-492:$.*&2,-&V*,25$<5&2:)&.S+&:)299*&$,.):)<;,A&>:+>):;)<& ! N)3%L'3&'"++0)'/'%3L9&$/-#r' ! :3L-/8%L'&+'D763.'"++0)'&#--3<"#' D99&2<>)?.<&2:)&$5>+:.2,.&$,&!"#OE&)<>)?$299*&/2:-)<.&+,)<'& ! B/*0/L3%L' ! :2"8&9-#/;3%L'/%;')Q%*9-+%3S/8+%' ! !"/))"+/;3%L' &

g^Z' D763'P'O#Q+%;'&9#':Q&9'

slide-165
SLIDE 165

F2$,&d)9$)Q):<&

F2?72A$,A& ! O_U.'O_Ua++")' ! 7=-3%L7+2-*#'O2%;"+-'X?-/==3%LY' ! 4=/*9#'@#"3C'73L3".':/J#%KaQ*9+W' "):Q$?)&=+5>+,),.&d4,;5)&`-)>),-),?*&$,G)?;+,b& ! U#*"/-/8J#'7#-J3*#).'O"2#=-3%&' ! 4=/*9#'@#"3C'3BDED' P,.):>:$<)&!"#$& ! 4=/*9#'4-3#)' ! (*"3=)#'6#$3%3.'c3-L+' D-5$,$<.:2;+,&.++9<&2,-&V)>9+*5),.& ! G#<'!+%)+"#' ! DO\' &

g^]' D763'P'O#Q+%;'&9#':Q&9'

slide-166
SLIDE 166

D763'P'O#Q+%;'&9#':Q&9' g^^'

slide-167
SLIDE 167

(MV&

(MV& ! M+?'&+'$/0#'<2%;"#)'#/)3"Q' ! U#)*-3=8+%'+I'&9#'<2%;"#'*+%&#%&'3%'&#-$'+I' A V$=+-&#;[(C=+-&#;[B-3J/&#'=/*0/L#)' A \#)+2-*#)' A ($<#;;#;'E/-' ! !+$=2&#'&9#'*+--#*&'$#&/;/&/' ]:+,.),-<& ! !+$$/%;'T3%#' ! 4%&' ! :/J#%'X$/J#%K<2%;"#K="2L3%Y' ! O%;a++"'X(*"3=)#'B"2L3%Y' & & '

g^b' D763'P'O#Q+%;'&9#':Q&9'

PM4.)$?Y(EC(*&>#E.;AD..A(E;&[#8&)15."]bA`## Y)58($&?Y(EC(*&>#E.;AD..A(E;&A5;4'# +("5D&1$?f&)15.">#b# #R,"J'&?0(;&>#E.;AD..A(E;&# #Y)58($&?Y(EC(*&>#E.;AD..A(E;&A5;4'# #!;4.)$?Y(EC(*&>#E.;AD..A(E;&[8&)15."]bA`L# ###.)*A.1*5AD)(;&2.)C[#8&)15."]bA9# R,"J'&?+("5D&1$f&)15.">#G# #R,"J'&?-F;:.'5E0(;&>#E.;AD..A(E;&# #PM4.)$?Y(EC(*&>#E.;AD..A(E;&[8&)15."]bA`# #R,"J'&?f&)15.">#`#

slide-168
SLIDE 168

52Q),c34,-9)c>94A$,&

g^d' D763'P'O#Q+%;'&9#':Q&9'

g4',*5"h# ##g*).,4!Jh.)*A(4(E%&AD&'5Mgi*).,4!Jh# ##g()XD(E$!Jh;(8&"?:,"J'&?4',*5"gi()XD(E$!Jh# ##g&M$&"15."1h$),&gi&M$&"15."1h# ##gE."Z*,)(X."h# ####g5"1$),EX."1h# #######gPM4.)$?Y(EC(*&h# ########E.;AD..A(E;&[#8&)15."]bA`A`# #######giPM4.)$?Y(EC(*&h# #######gY)58($&?Y(EC(*&h# ########E.;AD..A(E;&A5;4'# #######giY)58($&?Y(EC(*&h# ####gi5"1$),EX."1h# ##giE."Z*,)(X."h# gi4',*5"h#

slide-169
SLIDE 169

B/)&m/+S&.+&_,-&34,-9)n&-$9)552&

l+S&.+&.:2,<@+:5&2&>92$,&U2:&$,.+&2&(4,-9)& ! O_U'/%;'O2%;"+-')2==+-&'&93)'2)#'*/)#'+2&'+I'&9#'<+C' ! !+$$+%'7&-/&#LQ' A (C=+-&'/""'=/*0/L#)'X#C*#=&'s53$=".'s53%&#-%/")Y' A !+$=2&#'3$=+-&)'X/)'+=8+%/"Y' O<&$.&A++-&6& ! U+'%+&'$/%/L#'&9#'J3)3<3"3&Q.'+=8+%/"3&Q.'-#t#*8+%' ! U+'%+&'2)#')#-J3*#)' P\$<;,A&:)>+<$.+:$)<& ! 7=-3%L'7+2-*#'P'9n=)P[[#<-5)=-3%L)+2-*#5*+$[-#=+)3&+-Q[/==[' ! 7#-J3*#':3C'P'9n=P[[)#-J3*#$3C5/=/*9#5+-L[7:uZ[<2%;"#)K-#=+)3&+-Q59&$"' ! !9/$#"#+%'!+$$+%'P 9n=P[[?3035*9/$#"#+%5+?H5+-L[C?303[<3%[J3#?[:/3%[G#<M+$#' ! 4'"+&'+I'=-+F#*&)'/-#'/"-#/;Q'D763K/?/-#'r'

g^e' D763'P'O#Q+%;'&9#':Q&9'

slide-170
SLIDE 170

D763'P'O#Q+%;'&9#':Q&9' gbh'

slide-171
SLIDE 171

"):Q$?)c=+5>+,),.&0+-)9&

1/*&6& ! 73$="3`*/8+%'+I'&9#';#J#"+=$#%&'$+;#"' A UQ%/$3)$' A :/%/L#$#%&' A \#*+%`L2-/8+%' ! 4-*93&#*&2-/"'J3#?' ! 4""+?'&+'#/)3"Q'*-#/&#')+=93)8*/&#;'/=="3*/8+%)' &

gbg' D763'P'O#Q+%;'&9#':Q&9'

slide-172
SLIDE 172

"):Q$?)c=+5>+,),.&0+-)9&

1/*&6& ! 73$="3`*/8+%'+I'&9#';#J#"+=$#%&'$+;#"' A UQ%/$3)$' A :/%/L#$#%&' A \#*+%`L2-/8+%' ! 4-*93&#*&2-/"'J3#?' ! 4""+?'&+'#/)3"Q'*-#/&#')+=93)8*/&#;'/=="3*/8+%)' "):Q$?)c=+5>+,),.&5+-)9<& ! V%I2)#')#-J3*#K+-3#%&#;'$#*9/%3)$)'3%'/'*+$=+%#%&'$+;#"' ! B-+J3;#' A 73$="#';#J#"+=$#%&'$+;#"' A 4-*93&#*&2-/"'J3#?).'*+$=+)38+%'$#*9/%3)$)'

gbH' D763'P'O#Q+%;'&9#':Q&9'

slide-173
SLIDE 173

P\$<;,A&"):Q$?)&=+5>+,),.&0+-)9<&

V)?92:2;Q)&"):Q$?)<& ! 7=#*3`#;'3%'D763'\Z'' ! U#`%#'/';#*"/-/8J#'*+$=+%#%&'$+;#"'&+';#/"'?3&9'&9#')#-J3*#';Q%/$3)$' (94)>:$,.& ! 7=#*3`#;'3%'&9#'D763'(%&#-=-3)#'B-+`"#' ! 7=-3%L'+%'&9#'&+='+I'D763' ! O#/%)'*/%'2)#')#-J3*#)'/%;'<#'#C=+)#;'/)')#-J3*#)' D>2?/)&])9$\&$F!U!& ! BDEDK</)#;'*+$=+%#%&'$+;#"' ! (C&#%)3<"#' A V)'%+&'"3$3&#;'&+';Q%/$3)$' ! 72==+-&)'/%%+&/8+%)' ! a9#'$+)&'/;J/%*#;'&+;/Q' ! 9n=P[[3=+F+5+-L'

gbR' D763'P'O#Q+%;'&9#':Q&9'

slide-174
SLIDE 174

F:+Q$-$,A&./)&"/2>)&<):Q$?)&S$./&$F!U!&

gbZ' D763'P'O#Q+%;'&9#':Q&9'

@Component @Provides public class Circle implements SimpleShape { @ServiceProperty(name=SimpleShape.NAME_PROPERTY) private String name; @ServiceProperty(name=SimpleShape.ICON_PROPERTY) private ImageIcon icon; @Validate public void start() { icon = new ImageIcon(this.getClass().getResource ("circle.png"))); name = "Circle"; } public void draw(Graphics2D g2, Point p) { // Draw a circle } }

slide-175
SLIDE 175

d)84$:$,A&</2>)<&S$./&$F!U!&

gb]' D763'P'O#Q+%;'&9#':Q&9'

@Component @Instantiate public class Host { public Host() { // Create the frame... } @Bind public synchronized void bindShape(SimpleShape shape) { // Update the frame } @Unbind public synchronized void unbindShape(SimpleShape shape) { // Update the frame } //... }

slide-176
SLIDE 176

1/2.&$F!U!&52,2A)<&@+:&*+4&6&

"):Q$?)<& ! U#=#%;#%*3#)P';Q%/$3)$.')Q%*9-+%3S/8+%' ! 7#-J3*#'B-+J3;3%LP'=2<"3*/8+%.')#-J3%L.')#-J3*#'=-+=#-8#).'2=;/&#)' Z$@)?*?9)& ! V%)&/%*#'"3I#*Q*"#' ! !/""</*0)' ! !+%&-+""/<"#r' !./):<& ! 4)Q%*9-+%+2)'*+$$2%3*/8+%' ! (C&#%;#-'=/n#-%.'G93&#<+/-;'=/n#-%' ! E:u' ! a-/%)/*8+%.'EB4W' ! P\.),<$39)T&

gb^' D763'P'O#Q+%;'&9#':Q&9'

slide-177
SLIDE 177

1/2.&$F!U!&52,2A)<&@+:&*+4&6&

]2?.+:*&a&O,<.2,?)&-$<;,?;+,& ! v!+$=+%#%&'wx'!+$=+%#%&'aQ=#' ! q+2'*/%'*-#/&#')#J#-/"'3%)&/%*#'I-+$'&9#')/$#'&Q=#'?3&9';3p#-#%&'*+%`L2-/8+%)' A R')9/=#)'X3%)&/%*#)Y.'g'*+$=+%#%&'&Q=#' 02,2A)5),.& ! V%&#-/*8+%'?3&9'&9#'D763'!+%`L'4;$3%' ! G#<!+%)+"#'B"2L3%' ! V%&-+)=#*&/<"#' O,G)?;+,& ! O/)#;'+%'<Q&#*+;#'#%9/%*#$#%&' A Dy3%#'+-'V%)&/""K8$#' A a#)&#;'+%'/'"+&'+I'Ec:)' ! @3#";'3%F#*8+%' ! :#&9+;'*/""</*0' ! !+%)&-2*&+-'3%F#*8+%'

gbb' D763'P'O#Q+%;'&9#':Q&9'

slide-178
SLIDE 178

1/):)&$F!U!&$<&4<)-6&

D>>9$?2;+,<&"):Q):<& ! M+$#'6/&#?/Q' ! \@VU'723&#' ! E(('4=="3*/8+%'7#-J#-'XDGH'ED%47Y' ' "*<.)5& ! V%)2-/%*#')+>?/-#)' ! ($<#;;#;';#J3*#)' !./):<& ! U#)0&+='/=="3*/8+%)'X7?3%L.'7Ga.'zaWY' ! 4%;-+3;'' ! :+<3"#'6/$#)'X2647BY'

gbd' D763'P'O#Q+%;'&9#':Q&9'

slide-179
SLIDE 179

D763'P'O#Q+%;'&9#':Q&9' ge]'

slide-180
SLIDE 180

P,.):>:$<)&!"#$&

O,.)A:2.)&UPP&B)?/,+9+A$)<&$,.+&!"#$'&!,)&A+29E&BS+&.:),-<'& P,.):>:$<)&!"#$&'&./)&<>)?$_?2;+,& ! @3-)&')=#*3`*/8+%'-#"#/)#;'3%':/-*9'Hhgh' ! U#`%#)' A G#<'4=="3*/8+%)'XG4O)Y' A \#$+&#'7#-J3*#).'7!4'U#`%38+%)' A Es'P'EUO!.'E_UV.'Ea4.'EB4.'E:u' l*3:$-&2>>9$?2;+,&<):Q):<& ! E(('/=="3*/8+%')#-J#-)'-#"Q3%L'+%'D763'/%;'#C=+)3%L'D763' A DGH'E+_47.'D-/*"#'6"/))`)9.'VO:'G#<)=9#-#' A \#;9/&'E<+))' ! D763'4=="3*/8+%)'2)3%L'E((')#-J3*#)'{'E(('*+$=+%#%&)'2)3%L'D763')#-J3*#)' ! 9n=P[[<"+L5/0123%#&5;#[Hhhe[hb[Hb[F+%/)K)9+?*/)#K9/J3%LK&9#K<#)&K+IKF##K /%;K+)L3['

ge^' D763'P'O#Q+%;'&9#':Q&9'

slide-181
SLIDE 181

P?9$><)&#)5$,$&

geb' D763'P'O#Q+%;'&9#':Q&9'

"+RS2:)&"4$.)&?+,.2$,$,A&P,.):>:$<)c.)?/,+9+A$)<&<4>>+:.& ! \#I#-#%*#'V$="#$#%&/8+%'I+-'$/%Q'+I'&9#'(%&#-=-3)#'D763'7=#*3`*/8+%)' ! !+%&/3%)' A O"2#=-3%&' A G#<'!+%&/3%#-' A EB4' A EUO!' A E:u' A E_UV' A W'

slide-182
SLIDE 182

D>2?/)&D:$)<&

ged' D763'P'O#Q+%;'&9#':Q&9'

O5>9)5),.2;+,<&2,-&)\.),<$+,<&+@&./)&P,.):>:$<)&!"#$&">)?$_?2;+,<& ! !+%&/3%)' A O"2#=-3%&' A EB4' A Ea4' A EUO!' A E:u' A 7BV' A E_UV' A W' ! 4))#$<"Q'['4=="3*/8+%'I+-$/&P'(O4'

slide-183
SLIDE 183

P?9$><)&W$:A+&

gee' D763'P'O#Q+%;'&9#':Q&9'

!:$A$,299*&">:$,A"+4:?)&-5"):Q):&`-*,25$?&5+-49)<b& ! H-65#?#<'*+%&/3%#-# A 4=="3*/8+%';#)*-3=8+%.';#="+Q$#%&'/%;'$/%/L#$#%&'P'B"/%).'3)+"/&#;.' /&+$3*)' A B-+J3)3+%3%LP'B4\)' A T#L/*Q'"3<-/-3#)' A 4;$3%3)&-/8+%' A a++"3%L)'

slide-184
SLIDE 184

!./):<&

d)5+.)&"):Q$?)<& ! !u@'U3)&-3<2&#;'D763' A G#<'7#-J3*#)' ! DGH'!9/$#"#+%'\+)#' A a#*9%+"+LQ'/L%+)8*)' A E7D_\B!.'G#<'7#-J3*#.'\(7a'XE#-)#QYW' V$<.:$34.)-&PQ),.<& ! (J#%&'4;$3%'<-3;L#)' ! DGH'\+)#'E:7'O-3;L#)'X/*8J#:z.'M+-%#&z.'E+-/$Y' P"(<& ! 7#-J3*#':3C' ! !/$#"'

Hhh' D763'P'O#Q+%;'&9#':Q&9'

slide-185
SLIDE 185

D763'P'O#Q+%;'&9#':Q&9' Hhg'

slide-186
SLIDE 186

D>2?/)&])9$\&1)3&=+,<+9)&

D763'P'O#Q+%;'&9#':Q&9' HhH'

slide-187
SLIDE 187

D>2?/)&D?)&

"+RS2:)&V$<.:$34;+,&@:25)S+:7& ! O/)#;'+%'D763' A @+-'D763'<2&'%+&'+%"Q' ])2.4:)<& ! !-#/8+%'+I';#="+Q$#%&'=/*0/L#' A 4""+?'&+'=2)9'3%)&/""/8+%'&+'/')#&'+I'L/&#?/Q' A 72==+-&'3%)&/""/8+%)'['2=;/&#)'['2%3%)&/""/8+%)' A B2""'/%;'B2)9' ! U#=#%;#%*Q':/%/L#$#%&' A 7$/-&';#="+Q$#%&' ! 7*/"/<3"3&Q' A _+&'"3$3&#;'3%'&#-$)'+I'/;$3%3)&#-#;'L/&#?/Q)' ! 9n=P[[3%*2</&+-5/=/*9#5+-L[/*#['

HhR' D763'P'O#Q+%;'&9#':Q&9'

slide-188
SLIDE 188

!./):<&

B/):)&2:)&2&9+.&+@&.++9<& & F:+Q$<$+,$,A& ! D763'O2%;"#'\#=+)3&+-QP'U#="+Q$#%&')+"28+%'&+'-#)+"J#';#=#%;#%*3#)' ! (*"3=)#'BH' d)5+.)&2-5$,$<.:2;+,& ! E:u' ! 77M'\#$+&#'79#""' ! c3)2/"c:'D763'B"2L3%'X;#J#"+=#;'+%'DGH'!9/$#"#+%Y' &

HhZ' D763'P'O#Q+%;'&9#':Q&9'

slide-189
SLIDE 189

D763'P'O#Q+%;'&9#':Q&9' Hh]'

slide-190
SLIDE 190

!"#$&?2,&3)&2&:)299*&A++-&.)?/,+9+A*&

Hh^' D763'P'O#Q+%;'&9#':Q&9'

slide-191
SLIDE 191

0$,-&./)&#2>&

Hhb' D763'P'O#Q+%;'&9#':Q&9'

slide-192
SLIDE 192

0+-492:$.*&2,-&V*,25$<5&2:)&/2:-&

V+,n.&)\?)>.&<+5)./$,A&)2<*& ! :+;2"/-3&Q'3)'lDdV'r' A G-38%L'$+;2"/-'*+;#'3)'9/-;' A :+;2"/-3S3%L'#C3)8%L'*+;#'3)'/'"+&'9/-;#-' ! O3LL#-'3)'Q+2-'*+;#</)#.'9/-;#-'3&'?3""'<#' A !+$="#C'*+;#'X-#t#*8+%.';Q%/$3*'"+/;3%LY'*/%'<#'-#/""Q'/'%3L9&$/-#' ! a93%0'/<+2&'?9/&'Q+2-'/-#';+3%L'r' A G9/&|)'&9#'=+3%&'j' A G9Q'/-#'Q+2';+3%L')2*9'03%;'+I'I/%*Q'$#*9/%3)$'

" @+-L#&'&9#'kE2)&'@+-'@2%l'/%)?#-' " o))>&$.&<$5>9)&

&

Hhd' D763'P'O#Q+%;'&9#':Q&9'

slide-193
SLIDE 193

!"#$&

1)kQ)&<)),&299&!"#$&/2<&.+&+C):& ! :+;2"#'"/Q#-' ! T3I#*Q*"#'"/Q#-' ! 7#-J3*#'"/Q#-' 1/$9)&./):)&2:)&>9),.*&+@&5+:)&-).2$9<&.+&./)<)&92*):<E&*+4&</+49-&,+S&3)& @25$9$2:&S$./&./)&5+<.&$5>+:.2,.&>2:.<& ! a9#'$+)&'*+$$+%"Q'2)#;[%##;#;'I#/&2-#)' ! a9#'$+)&'*+$$+%"Q'2)#;'=/n#-%)' D&9+.&+@&.++9<&2:)&2Q2$9239)E&4<)&./)5&T& ! (C3)8%L')#-J3*#)' ! !+$=+%#%&':+;#")' &

Hhe' D763'P'O#Q+%;'&9#':Q&9'

slide-194
SLIDE 194

1:$;,A&0+-492:&=+-)&

=2:)@499*&52,A)&*+4:&>2?72A)<& ! 4J+3;')="3&'=/*0/L#' ! 7#=/-/&#')=#*3`*/8+%'['3$="#$#%&/8+%' ! B/*0/L#')=#*3`*/8+%)'3%'&9#3-'+?%'<2%;"#' DQ+$-&=92<<f@+:M25)& ! _+'L"+</"'J3)3<3"3&Q'3%'D763' ! VI'-#/""Q'%##;'<#.'L3J#'&9#'*+--#*&'*"/))"+/;#-' e<)&"):Q$?)<& ! N)#'7#-J3*#)'rrr' e<)&?+5>+,),.&5+-)9<& ! U+%|&'2)#'&9#'D763'4BV'U3-#*&"Q' & &

Hgh' D763'P'O#Q+%;'&9#':Q&9'

slide-195
SLIDE 195

d)?+55),-2;+,<&

Hgg' D763'P'O#Q+%;'&9#':Q&9'

+06)').'@?-<.' e5E%()J#-A#j(''L#k()'#Y(,'1L#-$,()$#+EW,''.E%L#O(85J#-(8(*&#

slide-196
SLIDE 196

p4)<;+,<&6&

D763'P'O#Q+%;'&9#':Q&9' HgH'

k()'#Y(,'1# C()'A4(,'1l(Cd,5"&$AJ&# Rm'.21$)(n&#ooL#b`pq9#R&)'5"# r_s#bab#GGo#_s#q_a#

#

O)A#W'&;&"$#P1E.t&)# E'&;&"$A&1E.t&)l(Cd,5"&$AJ&# Rm'.21$)(n&#ooL#b`pq9#R&)'5"# r_s#bpa#G_oppbp#

#