!"#$%&&()*+,-&./)&0*./&!"#$#%&()*+,#-./0123%#&4565
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=...
2784$,).&                                                                         akquinet AG                          akq...
0+-492:&2,-&0+3$9)&"+94;+,<&=+5>).),?)&=),.):&@+?4<$,A&+,&!  :+;2"/-7Q)&#$)   A  :+;2"/-3S/8+%#C=#-8)#   A  D763K</)#;   A...
!C):$,A&D:?/$.)?.4:)E&=+,<49;,AE&B:2$,$,A&2,-&0),.+:$,A&+,&!  7Q)&#$)2)3%LD763/%;[+-$+<3"#;#J3*#)!  :+;2"/-3S/8+%!  U#J#"+...
!"#$&$,&IJKJ&  L!"#$&M+&B/2,7<NE&         &+,&-./#       O5>9)5),.2;+,&02.4:$.*&                                          ...
!"#$&"4??)<<&PQ+94;+,&c3)3<3"3&Q                                                                    Y($&(,#.D#4).J,EX85$F#...
D763PO#Q+%;&9#:Q&9   d
0*&<+RS2:)&$<&3$AA):&./2,&*+4:<&T&  U2Q2&  •  a!fPDJ#-g:3""3+%TD!  •  M/-$+%QPg5H]:3""3+%TD!&  VWV&>92*):&&  •     */%*+%&...
Z$5$.<&+@&!!F&  =+4>9$,A&<)Q):)9*&9$5$.<&    :)4<23$9$.*&  !  N)3%L/L#%#-3*+<F#*&.*/%;-/L3%/"/-L#     %2$<#-+I+&9#-+<F#*&)...
0+-492:$H)&T&                                        Modular and     Modular and Monolithic                Modular       D...
U$A<2S&!,?)&4>+,&2&;5)E&./)&5+-492:$.*&&!  E7HbbPE/J/:+;2"#7Q)&#$!  E7HeZPV$=-+J#;:+;2"/-3&Q3%&9#E/J/B-+L-/$$3%LT/%L2/L#&!...
1/*&!"#$&6&  M))-&<$5>9):&S2*<&.+&    ?+,<.:4?.&<+RS2:)&    <*<.)5<&  &  !  D7633)/<+2&<+RS2:)&     ?+,<.:4?;+,P<23";3%L)Q...
1/*&!"#$&6&  M))-&<$5>9):&S2*<&.+&    ?+,<.:4?.&<+RS2:)&    <*<.)5<&  &  !  D7633)/<+2&<+RS2:)&     ?+,<.:4?;+,P<23";3%L)Q...
D763PO#Q+%;&9#:Q&9   g]
!"#$&D99$2,?)&O,-4<.:*&?+,<+:;45&&!"#$&"):Q$?)&F92^+:5&<>)?$_?2;+,&!  @-/$#?+-0)=#*3`*/8+%I+-9+)8%L;Q%/$3*/""Q;+?%"+/;/<"#...
!"#$&D:?/$.)?.4:29&!Q):Q$)S&                                        78.$9&                                                ...
!"#$&]:25)S+:7&Z2*):$,A&                                      L3 – Provides a publish/find/bind                          S...
!"#$&]:25)S+:7&`KaIb&=+5>+,),.c+:$),.)-&@:25)S+:7&!  O2%;"#)X35#5.$+;2"#)[*+$=+%#%&)Y!  B/*0/L#)9/-3%L/%;J#-)3+%$/%/L#$#%&...
!"#$&]:25)S+:7&`IaIb&d4,<&549;>9)&2>>9$?2;+,<&2,-&<):Q$?)<&"$,A9)&W0&$,<.2,?)&")>2:2.)&?92<<&9+2-):&>):&34,-9)&!  !"/))"+/...
D763PO#Q+%;&9#:Q&9   Hg
0+-492:$.*&1/2.6&D763PO#Q+%;&9#:Q&9   HH
0+-492:$.*&1/2.6&!  7#=/-/8+%+I*+%*#-%)!  7&-2*&2-#!  (%*/=)2"/8+%!  @+*2)#)+%   A  !+9#)3+%X"+?3)</;.93L93)L++;Y   A  !+2...
0+-492:$.*&1/2.6&!  7#=/-/8+%+I*+%*#-%)!  7&-2*&2-#!  (%*/=)2"/8+%!  @+*2)#)+%   A  !+9#)3+%X"+?3)</;.93L93)L++;Y   A  !+2...
!"#$&(4,-9)&D&34,-9)&$<&2&5+-49)&$,&!"#$&.):5$,+9+A*&D&34,-9)&$<&2&UDd&_9)&?+,.2$,$,A&!  !+;#!  #)+2-*#)!  :#&/;/&/       ...
=+-)&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/&...
O,.):,29&=+-)&W$<$3$9$.*&O,.):,29&?+-)&$,&<.2,-2:-&UDd<&?2,&<))&299&:++.c:)92;Q)&>2?72A)<&!  _+&&9#*/)#?3&9<2%;"#)D763PO#Q...
O,.):,29&=+-)&W$<$3$9$.*&O,.):,29&?+-)&$,&<.2,-2:-&UDd<&?2,&<))&299&:++.c:)92;Q)&>2?72A)<&!  _+&&9#*/)#?3&9<2%;"#)(4,-9)<&...
O,.):,29&=+-)&W$<$3$9$.*&O,.):,29&?+-)&$,&<.2,-2:-&UDd<&?2,&<))&299&:++.c:)92;Q)&>2?72A)<&!  _+&&9#*/)#?3&9<2%;"#)(4,-9)<&...
O,.):,29&=+-)&W$<$3$9$.*&O,.):,29&?+-)&$,&<.2,-2:-&UDd<&?2,&<))&299&:++.c:)92;Q)&>2?72A)<&!  _+&&9#*/)#?3&9<2%;"#)(4,-9)<&...
P>+<$,A&O,.):,29&=+-)&`KaIb&".2,-2:-&UDd&_9)<&)>+<)&299&$,.):,29&:++.c:)92;Q)&>2?72A)<&!  _+&&9#*/)#?3&9<2%;"#)D763PO#Q+%;...
P>+<$,A&O,.):,29&=+-)&`KaIb&".2,-2:-&UDd&_9)<&)>+<)&299&$,.):,29&:++.c:)92;Q)&>2?72A)<&!  _+&&9#*/)#?3&9<2%;"#)(4,-9)<&54<...
P>+<$,A&O,.):,29&=+-)&`KaIb&".2,-2:-&UDd&_9)<&)>+<)&299&$,.):,29&:++.c:)92;Q)&>2?72A)<&!  _+&&9#*/)#?3&9<2%;"#)(4,-9)<&54<...
D??)<<$,A&P.):,29&=+-)&`KaIb&".2,-2:-&UDd<&$5>9$?$.9*&<))&)Q):*./$,A&+./):&?92<<&+,&./)&?92<<&>2./&!  _+&&9#*/)#?3&9<2%;"#...
D??)<<$,A&P.):,29&=+-)&`KaIb&".2,-2:-&UDd<&$5>9$?$.9*&<))&)Q):*./$,A&+./):&?92<<&+,&./)&?92<<&>2./&!  _+&&9#*/)#?3&9<2%;"#...
D??)<<$,A&P.):,29&=+-)&`KaIb&".2,-2:-&UDd<&$5>9$?$.9*&<))&)Q):*./$,A&+./):&?92<<&+,&./)&?92<<&>2./&!  _+&&9#*/)#?3&9<2%;"#...
D??)<<$,A&P.):,29&=+-)&`KaIb&".2,-2:-&UDd<&$5>9$?$.9*&<))&)Q):*./$,A&+./):&?92<<&+,&./)&?92<<&>2./&!  _+&&9#*/)#?3&9<2%;"#...
O5>+:;,A&h&P>+:;,A&2&F2?72A)&`Kaib&O52A$,)&34,-9)&D&<+5)/+S&A).<&<):Q9).&$,<.2,?)<&@:+5&34,-9)&(&                         ...
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&          ...
O5>+:;,A&h&P>+:;,A&2&F2?72A)&`Iaib&(4,-9)&=&?+49-&$5>+:.&@:+5&34,-9)&(E&34.&./),&$.&$<&-)>),-),.&+,&$.&                   ...
O5>+:;,A&h&P>+:;,A&2&F2?72A)&`jaib&(4,-9)&=&?+49-&)>+:.&$.<&+S,&<):Q9).&>2?72A)E&34.&34,-9)&D&?+49-&+,9*&<))&  )$./):&=&+:...
O5>+:;,A&h&P>+:;,A&2&F2?72A)&`iaib&(4,-9)&=&?+49-&$5>+:.E&?+,.2$,&2,-&)>+:.&<):Q9).&.+&<+9Q)&./)&-$9)552&                P...
(4,-9)&02,$@)<.&P25>9)&  Bundle-ManifestVersion: 2  Bundle-SymbolicName: org.foo.simplebundle  Bundle-Version: 1.0.0  Bund...
(4,-9)&02,$@)<.&P25>9)&  Bundle-ManifestVersion: 2  Bundle-SymbolicName: org.foo.simplebundle  Bundle-Version: 1.0.0  Bund...
(4,-9)&02,$@)<.&P25>9)&  Bundle-ManifestVersion: 2  Bundle-SymbolicName: org.foo.simplebundle  Bundle-Version: 1.0.0  Bund...
(4,-9)&02,$@)<.&P25>9)&  Bundle-ManifestVersion: 2  Bundle-SymbolicName: org.foo.simplebundle  Bundle-Version: 1.0.0  Bund...
(4,-9)&02,$@)<.&P25>9)&  Bundle-ManifestVersion: 2  Bundle-SymbolicName: Import of a                         org.foo.simpl...
(4,-9)&02,$@)<.&P25>9)&  Bundle-ManifestVersion: 2  Bundle-SymbolicName: org.foo.simplebundle  Bundle-Version: 1.0.0 an ex...
(4,-9)&02,$@)<.&P25>9)&  Bundle-ManifestVersion: 2  Bundle-SymbolicName: org.foo.simplebundle  Bundle-Version: 1.0.0  Bund...
(4,-9)&02,$@)<.&P25>9)&  Bundle-ManifestVersion: 2  Bundle-SymbolicName: org.foo.simplebundle  Bundle-Version: 1.0.0  Bund...
!"#$&V)>),-),?*&0+-)9&F2?72A)c9)Q)9&Q<&5+-49)c9)Q)9&-)>),-),?$)<&!  G9+J)?9/&D763PO#Q+%;&9#:Q&9                       ]g
!"#$&V)>),-),?*&0+-)9&F2?72A)c9)Q)9&Q<&5+-49)c9)Q)9&-)>),-),?$)<&!  G9+J)?9/&0+-49)c9)Q)9&-)>),-),?$)<&!  !+/-)#L-/3%#;!  ...
!"#$&V)>),-),?*&0+-)9&F2?72A)c9)Q)9&Q<&5+-49)c9)Q)9&-)>),-),?$)<&!  G9+J)?9/&0+-49)c9)Q)9&-)>),-),?$)<&!  !+/-)#L-/3%#;!  ...
!"#$&V)>),-),?*&0+-)9&F2?72A)c9)Q)9&Q<&5+-49)c9)Q)9&-)>),-),?$)<&!  G9+J)?9/&0+-49)c9)Q)9&-)>),-),?$)<&!  !+/-)#L-/3%#;!  ...
V)>),-),?*&d)<+94;+,&`KaIb&D4.+52;?299*&52,2A)-&3*&./)&!"#$&@:25)S+:7&!  (%)2-#)/<2%;"#o);#=#%;#%*3#)/-#)/8)`#;<#I+-#&9#<2...
V)>),-),?*&d)<+94;+,&`KaIb&D4.+52;?299*&52,2A)-&3*&./)&!"#$&@:25)S+:7&!  (%)2-#)/<2%;"#o);#=#%;#%*3#)/-#)/8)`#;<#I+-#&9#<2...
V)>),-),?*&d)<+94;+,&`KaIb&D4.+52;?299*&52,2A)-&3*&./)&!"#$&@:25)S+:7&!  (%)2-#)/<2%;"#o);#=#%;#%*3#)/-#)/8)`#;<#I+-#&9#<2...
V)>),-),?*&d)<+94;+,&`KaIb&D4.+52;?299*&52,2A)-&3*&./)&!"#$&@:25)S+:7&!  (%)2-#)/<2%;"#o);#=#%;#%*3#)/-#)/8)`#;<#I+-#&9#<2...
V)>),-),?*&d)<+94;+,&`IaIb&049;>9)&52.?/$,A&>:+Q$-):<&&                                                                   ...
V)>),-),?*&d)<+94;+,&`IaIb&049;>9)&52.?/$,A&>:+Q$-):<&&&                                                                  ...
M+,c0+-492:&F2$,.&F:+A:25&`Kajb&1)&/2Q)&2&<$5>9)&>2$,.&>:+A:25&                                   7).;#$%&#H-65#5"#=EX."# ...
M+,c0+-492:&F2$,.&F:+A:25&`Iajb&O.&$<&>2?72A)-&2<&2&<$,A9)&UDd&_9)&S$./&./)&@+99+S$,A&?+,.),.<&            META-INF/      ...
M+,c0+-492:&F2$,.&F:+A:25&`Iajb&O.&$<&>2?72A)-&2<&2&<$,A9)&UDd&_9)&S$./&./)&@+99+S$,A&?+,.),.<&            META-INF/      ...
M+,c0+-492:&F2$,.&F:+A:25&`Iajb&O.&$<&>2?72A)-&2<&2&<$,A9)&UDd&_9)&S$./&./)&@+99+S$,A&?+,.),.<&            META-INF/      ...
M+,c0+-492:&F2$,.&F:+A:25&`Iajb&O.&$<&>2?72A)-&2<&2&<$,A9)&UDd&_9)&S$./&./)&@+99+S$,A&?+,.),.<&            META-INF/      ...
M+,c0+-492:&F2$,.&F:+A:25&`Iajb&O.&$<&>2?72A)-&2<&2&<$,A9)&UDd&_9)&S$./&./)&@+99+S$,A&?+,.),.<&            META-INF/      ...
M+,c0+-492:&F2$,.&F:+A:25&`jajb&d)92;+,</$>&25+,A&?92<<)<&                   Paint   b#            c#   Simple            ...
M+,c0+-492:&F2$,.&F:+A:25&`jajb&d)92;+,</$>&25+,A&?92<<)<&                   Paint   b#            c#    Simple           ...
0+-492:&F2$,.&F:+A:25&V)<$A,&                                                                                  &M4.)$#    ...
(),)_.<&+@&0+-492:$H)-&F2$,.&F:+A:25&P,@+:?)-&9+A$?29&3+4,-2:$)<&&D4.+52;?&-)>),-),?*&:)<+94;+,&!  (%)2-#)=-+=#-*+%`L2-/8+...
D763PO#Q+%;&9#:Q&9   bg
1/2.&h&1/*&+@&Z$@)?*?9)&Z2*):&!,?)&S)&/2Q)&2&34,-9)E&S/2.&-+&S)&-+&S$./&$.6&!  G#%##;&+)+$#9+?&#""&9#D763I-/$#?+-0/<+2&3&D...
1/2.&h&1/*&+@&Z$@)?*?9)&Z2*):&!,?)&S)&/2Q)&2&34,-9)E&S/2.&-+&S)&-+&S$./&$.6&!  G#%##;&+)+$#9+?&#""&9#D763I-/$#?+-0/<+2&3&1...
1/2.&h&1/*&+@&Z$@)?*?9)&Z2*):&!,?)&S)&/2Q)&2&34,-9)E&S/2.&-+&S)&-+&S$./&$.6&!  G#%##;&+)+$#9+?&#""&9#D763I-/$#?+-0/<+2&3&1...
1/2.&h&1/*&+@&Z$@)?*?9)&Z2*):&!,?)&S)&/2Q)&2&34,-9)E&S/2.&-+&S)&-+&S$./&$.6&!  G#%##;&+)+$#9+?&#""&9#D763I-/$#?+-0/<+2&3&1...
(4,-9)&Z$@)&=*?9)&                                         5"1$(#                                       INSTALLED         ...
(4,-9)&Z$@)&=*?9)&                                         5"1$(#                                       INSTALLED         ...
(4,-9)&Z$@)&=*?9)&                          @?-*"-./"=8.$9&>,#<*)$&2".                                   5"1$(#           ...
(4,-9)&D?;Q2.+:&B/)&34,-9)&2?;Q2.+:&$<&2&@:25)S+:7&/++7&.+&299+S&34,-9)<&.+&<.2:.4>&2,-&   </4.-+S,&D763PO#Q+%;&9#:Q&9    ...
(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++03)3%J+0#;3%&...
(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++03)3%J+0#;3%&...
(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++03)3%J+0#;3%&...
(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++03)3%J+0#;3%&...
(4,-9)&=+,.).&d)>:)<),.<&./)&34,-9)k<&))?4;+,&?+,.).& public interface BundleContext {   String getProperty(String key);  ...
(4,-9)&=+,.).&d)>:)<),.<&./)&34,-9)k<&))?4;+,&?+,.).&                                                   Lifecycle methodpu...
(4,-9)&=+,.).&d)>:)<),.<&./)&34,-9)k<&))?4;+,&?+,.).& public interface BundleContext {   String getProperty(String key);  ...
(4,-9)&=+,.).&d)>:)<),.<&./)&34,-9)k<&))?4;+,&?+,.).& public interface BundleContext {   String getProperty(String key);  ...
(4,-9)&d4,c;5)&:)>:)<),.2;+,&+@&2&34,-9)&public interface Bundle {  ...  int getState();  void start(int options) throws B...
(4,-9)&d4,c;5)&:)>:)<),.2;+,&+@&2&34,-9)&public interface Bundle {                      Lifecycle method to  ...          ...
(4,-9)&d4,c;5)&:)>:)<),.2;+,&+@&2&34,-9)&public interface Bundle {                       Lifecycle method to  ...         ...
(4,-9)&d4,c;5)&:)>:)<),.2;+,&+@&2&34,-9)&public interface Bundle {  ...  int getState();  void start(int options) throws B...
(4,-9)&d4,c;5)&:)>:)<),.2;+,&+@&2&34,-9)&public interface Bundle {  ...  int getState();  void start(int options) throws B...
(4,-9)&d4,c;5)&:)>:)<),.2;+,&+@&2&34,-9)&public interface Bundle {  ...  int getState();  void start(int options) throws B...
(4,-9)&d4,c;5)&:)>:)<),.2;+,&+@&2&34,-9)&public interface Bundle {  ...  int getState();  void start(int options) throws B...
(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#*...
(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#*...
(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#*...
(4,-9)c(2<)-&V*,25$?&P.),<$3$9$.*&(4,-9)&9$@)?*?9)&)Q),.<&>:+Q$-)&2&5)?/2,$<5&@+:&-*,25$?&).),<$3$9$.*&B/)&).),-):&>2X):,&...
P.),-):&F2X):,&                                    Installed                                    bundles                   ...
P.),-):&F2X):,&                                    Installed                                    bundles                e&*...
P.),-):&F2X):,&                                    Installed                                    bundles     !"1$(#        ...
P.),-):&F2X):,&                                    Installed                                    bundles                   ...
P.),-):&F2X):,&                                     Installed                                     bundles                 ...
P.),-):&F2X):,&                                                   Installed                                               ...
P.),-):&F2X):,&                                             Installed                                             bundles ...
P.),-):&F2X):,&                                  Installed                                  bundles                       ...
P.),-):&F2X):,&                                                Installed                                                bu...
P.),-):&F2$,.&F:+A:25&!Q):Q$)S&`KaIb&V*,25$?299*&).),<$39)&>2$,.&>:+A:25&&!  N)#)&9##C&#%;#-=/n#-%&+;#"3J#-)9/=#)!  a9#=/3...
P.),-):&F2$,.&F:+A:25&V)<$A,&`KaIb&                Shape                    c#   Default               Extension          ...
P.),-):&F2$,.&F:+A:25&V)<$A,&`IaIb&                                                          &M4.)$#                      ...
d)@:)</$,A&./)&]:25)S+:7&e>-2.)&2,-&4,$,<.299&9$@)?*?9)&+>):2;+,<&2:)&2&9$X9)&?+5>9$?2.)-&!  G9QjD763PO#Q+%;&9#:Q&9       ...
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<#<...
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<#<...
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<#<...
F2?72A)&D-5$,&]:25)S+:7&>:+Q$-)<&<>)?$29&DFO&.+&-)29&S$./&34,-9)<&$,.):2?;+,<&   public interface PackageAdmin {     stati...
F2?72A)&D-5$,&]:25)S+:7&>:+Q$-)<&<>)?$29&DFO&.+&-)29&S$./&34,-9)<&$,.):2?;+,<&   public interface PackageAdmin {     stati...
F2?72A)&D-5$,&]:25)S+:7&>:+Q$-)<&<>)?$29&DFO&.+&-)29&S$./&34,-9)<&$,.):2?;+,<&   public interface PackageAdmin {     stati...
D763PO#Q+%;&9#:Q&9   ggd
"):Q$?)&!:$),.2;+,&B/)&!"#$&@:25)S+:7&>:+5+.)<&2&<):Q$?)c+:$),.)-&$,.):2?;+,&>2X):,&25+,A&   34,-9)<&D763PO#Q+%;&9#:Q&9   ...
"):Q$?)&!:$),.2;+,&B/)&!"#$&@:25)S+:7&>:+5+.)<&2&<):Q$?)c+:$),.)-&$,.):2?;+,&>2X):,&25+,A&   34,-9)<&                     ...
"):Q$?)&!:$),.2;+,&B/)&!"#$&@:25)S+:7&>:+5+.)<&2&<):Q$?)c+:$),.)-&$,.):2?;+,&>2X):,&25+,A&   34,-9)<&                     ...
"):Q$?)&!:$),.2;+,&B/)&!"#$&@:25)S+:7&>:+5+.)<&2&<):Q$?)c+:$),.)-&$,.):2?;+,&>2X):,&25+,A&   34,-9)<&                     ...
"):Q$?)&!:$),.2;+,&B/)&!"#$&@:25)S+:7&>:+5+.)<&2&<):Q$?)c+:$),.)-&$,.):2?;+,&>2X):,&25+,A&   34,-9)<&                     ...
!"#$&"):Q$?)&D>>:+2?/&D-Q2,.2A)<&Z$A/.S)$A/.&<):Q$?)<&!  U3-#*&$#&9+;3%J+*/8+%".:4?.4:)-&?+-)&!  B-+$+&#))#=/-/8+%+I3%&#-I...
!"#$&D>>9$?2;+,<&D&?+99)?;+,&+@&34,-9)<&./2.&$,.):2?.&Q$2&<):Q$?)&$,.):@2?)<&!  O2%;"#)$/Q<#3%;#=#%;#%&"Q;#J#"+=#;/%;;#="+...
(4,-9)&Z$@)&=*?9)&`d)Q$<$.)-b&                                         5"1$(#                                       INSTAL...
(4,-9)&Z$@)&=*?9)&`d)Q$<$.)-b&                                         5"1$(#                                       INSTAL...
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&<)...
l)99+&1+:9-&"):Q$?)&P25>9)&Z).k<&2<<45)&S)&/2Q)&./$<&<):Q$?)&$,.):@2?)&&                         package com.foo.hello;   ...
l)99+&1+:9-&"):Q$?)&P25>9)&Z).k<&2<<45)&S)&/2Q)&./$<&<):Q$?)&$,.):@2?)&&                         package com.foo.hello;   ...
F439$</$,A&2&"):Q$?)&`KaIb&(4,-9)=+,.).&299+S<&34,-9)<&.+&>439$</&<):Q$?)<&public interface BundleContext {  …  void addSe...
F439$</$,A&2&"):Q$?)&`KaIb&(4,-9)=+,.).&299+S<&34,-9)<&.+&>439$</&<):Q$?)<&public interface BundleContext {  …  void addSe...
F439$</$,A&2&"):Q$?)&`IaIb&(4,-9)<&+R),&>439$</&<):Q$?)<&$,&./)$:&2?;Q2.+:& package com.foo.hello.impl; import org.osgi.fr...
F439$</$,A&2&"):Q$?)&`IaIb&(4,-9)<&+R),&>439$</&<):Q$?)<&$,&./)$:&2?;Q2.+:& package com.foo.hello.impl; import org.osgi.fr...
F439$</$,A&2&"):Q$?)&`IaIb&(4,-9)<&+R),&>439$</&<):Q$?)<&$,&./)$:&2?;Q2.+:& package com.foo.hello.impl; import org.osgi.fr...
F2?72A$,A&./)&l)99+&1+:9-&"):Q$?)&!4:&<):Q$?)&$5>9)5),.2;+,&34,-9)&?+,.2$,<&./)<)&>2?72A)<&!  *+$5I++59#""+!  *+$5I++59#""...
F2?72A$,A&./)&l)99+&1+:9-&"):Q$?)&!4:&<):Q$?)&$5>9)5),.2;+,&34,-9)&?+,.2$,<&./)<)&>2?72A)<&!  *+$5I++59#""+!  *+$5I++59#""...
e<$,A&2&"):Q$?)&`KaIb&(4,-9)=+,.).&299+S<&34,-9)<&.+&_,-&<):Q$?)<&public interface BundleContext {   
OSGi -  beyond the myth
OSGi -  beyond the myth
OSGi -  beyond the myth
OSGi -  beyond the myth
OSGi -  beyond the myth
OSGi -  beyond the myth
OSGi -  beyond the myth
OSGi -  beyond the myth
OSGi -  beyond the myth
OSGi -  beyond the myth
OSGi -  beyond the myth
OSGi -  beyond the myth
OSGi -  beyond the myth
OSGi -  beyond the myth
OSGi -  beyond the myth
OSGi -  beyond the myth
OSGi -  beyond the myth
OSGi -  beyond the myth
OSGi -  beyond the myth
OSGi -  beyond the myth
OSGi -  beyond the myth
OSGi -  beyond the myth
OSGi -  beyond the myth
OSGi -  beyond the myth
OSGi -  beyond the myth
OSGi -  beyond the myth
OSGi -  beyond the myth
OSGi -  beyond the myth
OSGi -  beyond the myth
OSGi -  beyond the myth
OSGi -  beyond the myth
OSGi -  beyond the myth
OSGi -  beyond the myth
OSGi -  beyond the myth
OSGi -  beyond the myth
OSGi -  beyond the myth
OSGi -  beyond the myth
OSGi -  beyond the myth
OSGi -  beyond the myth
OSGi -  beyond the myth
OSGi -  beyond the myth
OSGi -  beyond the myth
OSGi -  beyond the myth
OSGi -  beyond the myth
OSGi -  beyond the myth
OSGi -  beyond the myth
OSGi -  beyond the myth
OSGi -  beyond the myth
OSGi -  beyond the myth
OSGi -  beyond the myth
OSGi -  beyond the myth
OSGi -  beyond the myth
OSGi -  beyond the myth
OSGi -  beyond the myth
OSGi -  beyond the myth
OSGi -  beyond the myth
OSGi -  beyond the myth
OSGi -  beyond the myth
Upcoming SlideShare
Loading in...5
×

OSGi - beyond the myth

664

Published on

Presentation done for the AlpesJUG (01/2011) about OSGi. It's an introduction to OSGi with some tools / hints.

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
664
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
0
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Transcript of "OSGi - beyond the myth"

  1. 1. !"#$%&&()*+,-&./)&0*./&!"#$#%&()*+,#-./0123%#&4565
  2. 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#@#"3C3BDED=-+F#*&"#/;#-!  DGH A  !9/$#"#+%=-+F#*&"#/;#-!  4"+&+I+&9#-)*+%&-3<28+%) A  $/J#%K/%;-+3;K="2L3% A  MKNOND763PO#Q+%;&9#:Q&9 H
  3. 3. 2784$,).& akquinet AG akquinet !1300k SE business consulting GmbH !60k SE International Microsoft / .NET Outsourcing JAVA / SAP akquinet akquinet akquinet akquinet IBS dynamic solutions outsourcing it-agile GmbH !250k SE GmbH !300k SE gGmbH !250k SE GmbH !100k SE akquinet akquinet akquinet akquinet IBS Brüssel SLS logistics system integration tech@spree GmbH !40k SE GmbH !250k SE GmbH !125k SE GmbH !300k SE akquinet akquinet eurosoft Sp. z o.o. enterprise solutions !100k SE GmbH !80k SE HKS GmbH !75k SED763PO#Q+%;&9#:Q&9 R
  4. 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$)<&!  D763X4=/*9#@#"3C.4=/*#4*#.DGH!9/$#"#+%.4=/*9#7"3%LWY!  4%;-+3;!  4=/*9#:/J#%!  E/J/((XEOD77.DGHED%47YD763PO#Q+%;&9#:Q&9 Z
  5. 5. !C):$,A&D:?/$.)?.4:)E&=+,<49;,AE&B:2$,$,A&2,-&0),.+:$,A&+,&!  7Q)&#$)2)3%LD763/%;[+-$+<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+%)D763PO#Q+%;&9#:Q&9 ]
  6. 6. !"#$&$,&IJKJ& L!"#$&M+&B/2,7<NE& &+,&-./# O5>9)5),.2;+,&02.4:$.*& •  (123%+C.@#"3C •  _#?7=#*3`*/8+%3%=-+L-#)) B++9<& 0.$#1,)&#2%($31#%(44&"#5"#6(11751%# •  V%F#*8+%@-/$#?+-0X3BDED.O"2#=-3%&. 7!Y 89#:,$#5$#1&&;1#<=$;.14%&)&#,1&)1# •  VU(X<%;&++").BU(Y %(8&#$).,:&#25$%#5$#>?@#AAB.)C1# •  O23";&++")X$/J#%./%&WY 4&)D&E$F#2&#5"#8GAAA!#%($&#<H-65I# •  a#)&)XF2%3&Z+)L3.=/CP#C/$Y P?9$><)& -4&"J5"*#G"J#J(F#$)F5"*#K,1$#$.# •  (*"3=)#VU( ,4*)(J&#,E&"&#8&)15."A#!#%($&# •  BH.!BW H-65L#5$#;(C&1#15;4&#$%5"*1# D>>9$?2;+,&"):Q):<& E.;4&MA# •  6"/))`)9.ED%47.G#<)=9#-# •  E<+))4575 =$#&(1$#1.;&."&#E("#1(F#$%&#C5"*#51# !./):<& •  7#-J3*#:3C[@2)# "(C&JA#N%("C1I#O."3$#PQRG#1$.)F# •  G7DHX(7O.V%&#L-/8+%Y $&(E%#$%.1&#*,F1#("F#&11."S#<H-65# •  7"3%L <D(5# #D763PO#Q+%;&9#:Q&9 ^
  7. 7. !"#$&"4??)<<&PQ+94;+,&c3)3<3"3&Q Y($&(,#.D#4).J,EX85$F# !$#1,EC1# @<D(5V# !$T1#1.#E..# @:,UUV# W.))&E$#,1(*&#("J## :&1$#4)(EXE&1# R5)$%# a3$# D763PO#Q+%;&9#:Q&9 b
  8. 8. D763PO#Q+%;&9#:Q&9 d
  9. 9. 0*&<+RS2:)&$<&3$AA):&./2,&*+4:<&T& U2Q2& •  a!fPDJ#-g:3""3+%TD! •  M/-$+%QPg5H]: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.&[& &D763PO#Q+%;&9#:Q&9 e
  10. 10. Z$5$.<&+@&!!F& =+4>9$,A&<)Q):)9*&9$5$.<& :)4<23$9$.*& !  N)3%L/L#%#-3*+<F#*&.*/%;-/L3%/"/-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#=#%;#%*QV%F#*8+% & &D763PO#Q+%;&9#:Q&9 gh
  11. 11. 0+-492:$H)&T& Modular and Modular and Monolithic Modular Dynamic Dynamic Application Application Application Killer ApplicationD763PO#Q+%;&9#:Q&9 gg
  12. 12. U$A<2S&!,?)&4>+,&2&;5)E&./)&5+-492:$.*&&!  E7HbbPE/J/:+;2"#7Q)&#$!  E7HeZPV$=-+J#;:+;2"/-3&Q3%&9#E/J/B-+L-/$$3%LT/%L2/L#&!  E3L)/?P:+;2"/-3S/8+%+I&9#EUf A  :/Q+-$/Q%+&<#)&/%;/-;3S#; A  E/J/7(dj A  79+2";?#-#/""Q?/3&.+-;+?#9/J#)+$#&93%L/"-#/;Q-+<2)& #%+2L9j&D763PO#Q+%;&9#:Q&9 gH
  13. 13. 1/*&!"#$&6& M))-&<$5>9):&S2*<&.+& ?+,<.:4?.&<+RS2:)& <*<.)5<& & !  D7633)/<+2&<+RS2:)& ?+,<.:4?;+,P<23";3%L)Q)&#$) +2&+I)$/""#-*+$=+%#%&)W !  D7633)/<+2&?+5>+,),.<&./2.& S+:7&.+A)./):W !  D7633)/<+2&52,2A$,A&2,-& 4>-2;,A*+$=+%#%&)W !  D7633)/<+2& kN%3J#-)/"0$--9)S2:)l &D763PO#Q+%;&9#:Q&9 gR
  14. 14. 1/*&!"#$&6& M))-&<$5>9):&S2*<&.+& ?+,<.:4?.&<+RS2:)& <*<.)5<& & !  D7633)/<+2&<+RS2:)& ?+,<.:4?;+,P<23";3%L)Q)&#$) +2&+I)$/""#-*+$=+%#%&)W !  D7633)/<+2&?+5>+,),.<&./2.& S+:7&.+A)./):W !  D7633)/<+2&52,2A$,A&2,-& 4>-2;,A*+$=+%#%&)W !  D7633)/<+2& kN%3J#-)/"0$--9)S2:)l &D763PO#Q+%;&9#:Q&9 gZ
  15. 15. D763PO#Q+%;&9#:Q&9 g]
  16. 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((6YD763PO#Q+%;&9#:Q&9 g^
  17. 17. !"#$&D:?/$.)?.4:29&!Q):Q$)S& 78.$9& +06) 5"*" +,&#"-./0123&4 (#)*&# (#)*&# (#)*&# !"#$%"#&D763PO#Q+%;&9#:Q&9 gb
  18. 18. !"#$&]:25)S+:7&Z2*):$,A& L3 – Provides a publish/find/bind SERVICE service model to decouple bundles L2 - Manages the lifecycle of bundle in LIFECYCLE a bundle repository without requiring the VM be restarted L1 - Creates the concept of bundles MODULE that use classes from each other in a controlled way according to constraintsD763PO#Q+%;&9#:Q&9 gd
  19. 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+-=-+&+*+"D763PO#Q+%;&9#:Q&9 ge
  20. 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%;"#)D763PO#Q+%;&9#:Q&9 Hh
  21. 21. D763PO#Q+%;&9#:Q&9 Hg
  22. 22. 0+-492:$.*&1/2.6&D763PO#Q+%;&9#:Q&9 HH
  23. 23. 0+-492:$.*&1/2.6&!  7#=/-/8+%+I*+%*#-%)!  7&-2*&2-#!  (%*/=)2"/8+%!  @+*2)#)+% A  !+9#)3+%X"+?3)</;.93L93)L++;Y A  !+2="3%LX"+?3)L++;.93L93)</;Y1/*6&D763PO#Q+%;&9#:Q&9 HR
  24. 24. 0+-492:$.*&1/2.6&!  7#=/-/8+%+I*+%*#-%)!  7&-2*&2-#!  (%*/=)2"/8+%!  @+*2)#)+% A  !+9#)3+%X"+?3)</;.93L93)L++;Y A  !+2="3%LX"+?3)L++;.93L93)</;Y1/*6&!  V%;#=#%;#%&;#J#"+=$#%&!  V%;#=#%;#%&$/3%&#%/%*#/%;#J+"28+%!  V$=-+J#-#2)/<3"3&QD763PO#Q+%;&9#:Q&9 HZ
  25. 25. !"#$&(4,-9)&D&34,-9)&$<&2&5+-49)&$,&!"#$&.):5$,+9+A*&D&34,-9)&$<&2&UDd&_9)&?+,.2$,$,A&!  !+;#!  #)+2-*#)!  :#&/;/&/ E(11#Z&1# Module )&1.,)E&#Z&1# +=0!# 7P-N# A+7# ;&$(J($(#D763PO#Q+%;&9#:Q&9 H]
  26. 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`"#je,9$7)&<.2,-2:-&UDd&_9)<E&!"#$&5).2-2.2&)>9$?$.9*&2,<S):<&299&+@&./)<)& 84)<;+,<&D763PO#Q+%;&9#:Q&9 H^
  27. 27. O,.):,29&=+-)&W$<$3$9$.*&O,.):,29&?+-)&$,&<.2,-2:-&UDd<&?2,&<))&299&:++.c:)92;Q)&>2?72A)<&!  _+&&9#*/)#?3&9<2%;"#)D763PO#Q+%;&9#:Q&9 Hb
  28. 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#-#&+)#/-*93%&9#E4`"#?9#%"++03%L I+-*"/))#)D763PO#Q+%;&9#:Q&9 Hd
  29. 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#-#&+)#/-*93%&9#E4`"#?9#%"++03%L I+-*"/))#)B+&A).&<.2,-2:-&UDd&3)/2Q$+:&!  O2%;"#K!"/))B/&9P5D763PO#Q+%;&9#:Q&9 He
  30. 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#-#&+)#/-*93%&9#E4`"#?9#%"++03%L I+-*"/))#)B+&A).&<.2,-2:-&UDd&3)/2Q$+:&!  O2%;"#K!"/))B/&9P502*&29<+&$,?94-)&)53)--)-&UDd<&2,-&-$:)?.+:$)<&P25>9)<&!  O2%;"#K!"/))B/&9P"3<[I++5F/-.*"/))#)[!  O2%;"#K!"/))B/&9P"3<[I++5F/-.5D763PO#Q+%;&9#:Q&9 Rh
  31. 31. P>+<$,A&O,.):,29&=+-)&`KaIb&".2,-2:-&UDd&_9)<&)>+<)&299&$,.):,29&:++.c:)92;Q)&>2?72A)<&!  _+&&9#*/)#?3&9<2%;"#)D763PO#Q+%;&9#:Q&9 Rg
  32. 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&D763PO#Q+%;&9#:Q&9 RH
  33. 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&QI-+$#C&#-%/"J3)3<3"3&Q!  V%+&9#-?+-;).3&/""+?)<2%;"#)&+9/J#=-3J/&#*+%&#%&D763PO#Q+%;&9#:Q&9 RR
  34. 34. D??)<<$,A&P.):,29&=+-)&`KaIb&".2,-2:-&UDd<&$5>9$?$.9*&<))&)Q):*./$,A&+./):&?92<<&+,&./)&?92<<&>2./&!  _+&&9#*/)#?3&9<2%;"#)D763PO#Q+%;&9#:Q&9 RZ
  35. 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#-D763PO#Q+%;&9#:Q&9 R]
  36. 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&D763PO#Q+%;&9#:Q&9 R^
  37. 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)&D763PO#Q+%;&9#:Q&9 Rb
  38. 38. O5>+:;,A&h&P>+:;,A&2&F2?72A)&`Kaib&O52A$,)&34,-9)&D&<+5)/+S&A).<&<):Q9).&$,<.2,?)<&@:+5&34,-9)&(& B 5;4.)$# K(8(MA1&)8&$[# &M4.)$# A K(8(MA1&)8&$[# H"&#E.4F#.D# K(8(MA1&)8&$A-&)8&$#D763PO#Q+%;&9#:Q&9 Rd
  39. 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& B 5;4.)$# K(8(MA1&)8&$[# &M4.)$# A K(8(MA1&)8&$[# H"&#E.4F#.D# K(8(MA1&)8&$A-&)8&$#D763PO#Q+%;&9#:Q&9 Re
  40. 40. O5>+:;,A&h&P>+:;,A&2&F2?72A)&`Iaib&(4,-9)&=&?+49-&$5>+:.&@:+5&34,-9)&(E&34.&./),&$.&$<&-)>),-),.&+,&$.& &M4.)$# K(8(MA1&)8&$[# B 5;4.)$# K(8(MA1&)8&$[# A H"&#E.4F#.D# K(8(MA1&)8&$A-&)8&$# C 5;4.)$# K(8(MA1&)8&$[#D763PO#Q+%;&9#:Q&9 Zh
  41. 41. O5>+:;,A&h&P>+:;,A&2&F2?72A)&`jaib&(4,-9)&=&?+49-&)>+:.&$.<&+S,&<):Q9).&>2?72A)E&34.&34,-9)&D&?+49-&+,9*&<))& )$./):&=&+:&(& &M4.)$# K(8(MA1&)8&$[# C 5;4.)$# K(8(MA1&)8&$[# A : &M4.)$# N2.#E.45&1#.D# K(8(MA1&)8&$[# B K(8(MA1&)8&$A-&)8&$#D763PO#Q+%;&9#:Q&9 Zg
  42. 42. O5>+:;,A&h&P>+:;,A&2&F2?72A)&`iaib&(4,-9)&=&?+49-&$5>+:.E&?+,.2$,&2,-&)>+:.&<):Q9).&.+&<+9Q)&./)&-$9)552& PM4.)$#("J#5;4.)$# K(8(MA1&)8&$[# C PM4.)$#("J#5;4.)$# K(8(MA1&)8&$[# B 5;4.)$# K(8(MA1&)8&$[# AD763PO#Q+%;&9#:Q&9 ZH
  43. 43. (4,-9)&02,$@)<.&P25>9)& Bundle-ManifestVersion: 2 Bundle-SymbolicName: org.foo.simplebundle Bundle-Version: 1.0.0 Bundle-ClassPath: .,org/foo/embedded.jar Import-Package: osgi.service.log; version="[1.0.0,1.1.0)", org.foo.service; version="1.1" Export-Package: org.foo.service; version="1.1"; vendor="org.foo", org.foo.service.bar; version="1.1"; uses:="org.foo.service"D763PO#Q+%;&9#:Q&9 ZR
  44. 44. (4,-9)&02,$@)<.&P25>9)& Bundle-ManifestVersion: 2 Bundle-SymbolicName: org.foo.simplebundle Bundle-Version: 1.0.0 Bundle-ClassPath: .,org/foo/embedded.jar Import-Package: Indicates R4 semantics and syntax osgi.service.log; version="[1.0.0,1.1.0)", org.foo.service; version="1.1" Export-Package: org.foo.service; version="1.1"; vendor="org.foo", org.foo.service.bar; version="1.1"; uses:="org.foo.service"D763PO#Q+%;&9#:Q&9 ZZ
  45. 45. (4,-9)&02,$@)<.&P25>9)& Bundle-ManifestVersion: 2 Bundle-SymbolicName: org.foo.simplebundle Bundle-Version: 1.0.0 Bundle-ClassPath: .,org/foo/embedded.jar Import-Package: osgi.service.log; version="[1.0.0,1.1.0)", Indicates R4 org.foo.service; version="1.1" Globally unique ID semantics and syntax Export-Package: org.foo.service; version="1.1"; vendor="org.foo", org.foo.service.bar; version="1.1"; uses:="org.foo.service"D763PO#Q+%;&9#:Q&9 Z]
  46. 46. (4,-9)&02,$@)<.&P25>9)& Bundle-ManifestVersion: 2 Bundle-SymbolicName: org.foo.simplebundle Bundle-Version: 1.0.0 Bundle-ClassPath: .,org/foo/embedded.jar Import-Package: osgi.service.log; version="[1.0.0,1.1.0)", org.foo.service; version="1.1" Internal bundle class path Export-Package: org.foo.service; version="1.1"; vendor="org.foo", org.foo.service.bar; version="1.1"; uses:="org.foo.service"D763PO#Q+%;&9#:Q&9 Z^
  47. 47. (4,-9)&02,$@)<.&P25>9)& Bundle-ManifestVersion: 2 Bundle-SymbolicName: Import of a org.foo.simplebundle Bundle-Version: 1.0.0 version range package Bundle-ClassPath: .,org/foo/embedded.jar Import-Package: osgi.service.log; version="[1.0.0,1.1.0)", org.foo.service; version="1.1" Export-Package: org.foo.service; version="1.1"; vendor="org.foo", org.foo.service.bar; version="1.1"; uses:="org.foo.service"D763PO#Q+%;&9#:Q&9 Zb
  48. 48. (4,-9)&02,$@)<.&P25>9)& Bundle-ManifestVersion: 2 Bundle-SymbolicName: org.foo.simplebundle Bundle-Version: 1.0.0 an exported Importing Bundle-ClassPath: .,org/foo/embedded.jar package Import-Package: osgi.service.log; version="[1.0.0,1.1.0)", org.foo.service; version="1.1" Export-Package: org.foo.service; version="1.1"; vendor="org.foo", org.foo.service.bar; version="1.1"; uses:="org.foo.service"D763PO#Q+%;&9#:Q&9 Zd
  49. 49. (4,-9)&02,$@)<.&P25>9)& Bundle-ManifestVersion: 2 Bundle-SymbolicName: org.foo.simplebundle Bundle-Version: 1.0.0 Bundle-ClassPath: .,org/foo/embedded.jar Exported package with Import-Package: version and arbitrary osgi.service.log; version="[1.0.0,1.1.0)", attribute org.foo.service; version="1.1" Export-Package: org.foo.service; version="1.1"; vendor="org.foo", org.foo.service.bar; version="1.1"; uses:="org.foo.service"D763PO#Q+%;&9#:Q&9 Ze
  50. 50. (4,-9)&02,$@)<.&P25>9)& Bundle-ManifestVersion: 2 Bundle-SymbolicName: org.foo.simplebundle Bundle-Version: 1.0.0 Bundle-ClassPath: .,org/foo/embedded.jar Import-Package: osgi.service.log; version="[1.0.0,1.1.0)", Provided package with org.foo.service; version="1.1" dependency on exported Export-Package: package org.foo.service; version="1.1"; vendor="org.foo", org.foo.service.bar; version="1.1"; uses:="org.foo.service"D763PO#Q+%;&9#:Q&9 ]h
  51. 51. !"#$&V)>),-),?*&0+-)9&F2?72A)c9)Q)9&Q<&5+-49)c9)Q)9&-)>),-),?$)<&!  G9+J)?9/&D763PO#Q+%;&9#:Q&9 ]g
  52. 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#)D763PO#Q+%;&9#:Q&9 ]H
  53. 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#*+;#YD763PO#Q+%;&9#:Q&9 ]R
  54. 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#*+;#YF2?72A)c9)Q)9&-)>),-),?$)<&:)84$:)&>2?72A)<&.+&3)&2.+5$?&`$f)fE&$,&2&<$,A9)& 34,-9)b&D763PO#Q+%;&9#:Q&9 ]Z
  55. 55. V)>),-),?*&d)<+94;+,&`KaIb&D4.+52;?299*&52,2A)-&3*&./)&!"#$&@:25)S+:7&!  (%)2-#)/<2%;"#o);#=#%;#%*3#)/-#)/8)`#;<#I+-#&9#<2%;"#*/%<#2)#;D763PO#Q+%;&9#:Q&9 ]]
  56. 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&& 5;4.)$#& 5;4.)$# K(8(MA1&)8&$# K(8(MA1&)8&$A%4#& A B C &M4.)$# &M4.)$# K(8(MA1&)8&$A%4# K(8(MA1&)8&$#D763PO#Q+%;&9#:Q&9 ]^
  57. 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&& 5;4.)$#& 5;4.)$# K(8(MA1&)8&$# K(8(MA1&)8&$A%4#& A B C &M4.)$# &M4.)$#& K(8(MA1&)8&$A%4# K(8(MA1&)8&$#&!  aQ=3*/""Q.-#)+"J3%L/<2%;"#?3""-#)2"&3%+&9#-<2%;"#)<#3%L&-/%)38J#"Q -#)+"J#;D763PO#Q+%;&9#:Q&9 ]b
  58. 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&& 5;4.)$# 5;4.)$# K(8(MA1&)8&$#& K(8(MA1&)8&$A%4# A B C& &M4.)$# &M4.)$# K(8(MA1&)8&$A%4# K(8(MA1&)8&$#&!  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*/""QDMV)-&D763PO#Q+%;&9#:Q&9 ]d
  59. 59. V)>),-),?*&d)<+94;+,&`IaIb&049;>9)&52.?/$,A&>:+Q$-):<&& B& 5;4.)$# &M4.)$#& K(8(MA1&)8&$[# K(8(MA1&)8&$[# 8&)15."]^GA_A`^# 8&)15."]^GA_A`^#&& A : C &M4.)$#& K(8(MA1&)8&$[# 8&)15."]^GAaA`^#&D763PO#Q+%;&9#:Q&9 ]e
  60. 60. V)>),-),?*&d)<+94;+,&`IaIb&049;>9)&52.?/$,A&>:+Q$-):<&&& B& 5;4.)$# &M4.)$# K(8(MA1&)8&$[# K(8(MA1&)8&$[#& 8&)15."]^GA_A`^# 8&)15."]^GA_A`^#& A : C& &M4.)$# K(8(MA1&)8&$[#& 8&)15."]^GAaA`^#!  #)+"28+%/"L+-3&9$+-;#-)$/&*93%L=-+J3;#-) A  4"-#/;Q-#)+"J#;=-+J3;#-)+-;#-#;<Q;#*-#/)3%LJ#-)3+% A  N%-#)+"J#;=-+J3;#-)+-;#-#;<Q;#*-#/)3%LJ#-)3+% A  VIJ#-)3+%)/-##12/".$/&*93%L=-+J3;#-)/-#+-;#-#;</)#;+%3%)&/""/8+%+-;#-D763PO#Q+%;&9#:Q&9 ^h
  61. 61. M+,c0+-492:&F2$,.&F:+A:25&`Kajb&1)&/2Q)&2&<$5>9)&>2$,.&>:+A:25& 7).;#$%&#H-65#5"#=EX."# :..C#D763PO#Q+%;&9#:Q&9 ^g
  62. 62. M+,c0+-492:&F2$,.&F:+A:25&`Iajb&O.&$<&>2?72A)-&2<&2&<$,A9)&UDd&_9)&S$./&./)&@+99+S$,A&?+,.),.<& META-INF/ META-INF/MANIFEST.MF org/ org/foo/ org/foo/paint/ org/foo/paint/PaintFrame$1$1.class org/foo/paint/PaintFrame$1.class org/foo/paint/PaintFrame$ShapeActionListener.class org/foo/paint/PaintFrame.class org/foo/paint/SimpleShape.class org/foo/paint/ShapeComponent.class org/foo/shape/ org/foo/shape/Circle.class org/foo/shape/circle.png org/foo/shape/Square.class org/foo/shape/square.png org/foo/shape/Triangle.class org/foo/shape/triangle.pngD763PO#Q+%;&9#:Q&9 ^H
  63. 63. M+,c0+-492:&F2$,.&F:+A:25&`Iajb&O.&$<&>2?72A)-&2<&2&<$,A9)&UDd&_9)&S$./&./)&@+99+S$,A&?+,.),.<& META-INF/ Main implementation META-INF/MANIFEST.MF package is org/ org.foo.paint org/foo/ org/foo/paint/ org/foo/paint/PaintFrame$1$1.class org/foo/paint/PaintFrame$1.class org/foo/paint/PaintFrame$ShapeActionListener.class org/foo/paint/PaintFrame.class org/foo/paint/SimpleShape.class org/foo/paint/ShapeComponent.class org/foo/shape/ org/foo/shape/Circle.class org/foo/shape/circle.png org/foo/shape/Square.class org/foo/shape/square.png org/foo/shape/Triangle.class org/foo/shape/triangle.pngD763PO#Q+%;&9#:Q&9 ^R
  64. 64. M+,c0+-492:&F2$,.&F:+A:25&`Iajb&O.&$<&>2?72A)-&2<&2&<$,A9)&UDd&_9)&S$./&./)&@+99+S$,A&?+,.),.<& META-INF/ META-INF/MANIFEST.MF org/ org/foo/ org/foo/paint/ Static main method in org/foo/paint/PaintFrame$1$1.class org/foo/paint/PaintFrame$1.class PaintFrame org/foo/paint/PaintFrame$ShapeActionListener.class org/foo/paint/PaintFrame.class org/foo/paint/SimpleShape.class org/foo/paint/ShapeComponent.class org/foo/shape/ org/foo/shape/Circle.class org/foo/shape/circle.png org/foo/shape/Square.class org/foo/shape/square.png org/foo/shape/Triangle.class org/foo/shape/triangle.pngD763PO#Q+%;&9#:Q&9 ^Z
  65. 65. M+,c0+-492:&F2$,.&F:+A:25&`Iajb&O.&$<&>2?72A)-&2<&2&<$,A9)&UDd&_9)&S$./&./)&@+99+S$,A&?+,.),.<& META-INF/ META-INF/MANIFEST.MF org/ org/foo/ org/foo/paint/ org/foo/paint/PaintFrame$1$1.class Interface SimpleShape org/foo/paint/PaintFrame$1.class supports multiple shape org/foo/paint/PaintFrame$ShapeActionListener.class implementations org/foo/paint/PaintFrame.class org/foo/paint/SimpleShape.class org/foo/paint/ShapeComponent.class org/foo/shape/ org/foo/shape/Circle.class org/foo/shape/circle.png org/foo/shape/Square.class org/foo/shape/square.png org/foo/shape/Triangle.class org/foo/shape/triangle.pngD763PO#Q+%;&9#:Q&9 ^]
  66. 66. M+,c0+-492:&F2$,.&F:+A:25&`Iajb&O.&$<&>2?72A)-&2<&2&<$,A9)&UDd&_9)&S$./&./)&@+99+S$,A&?+,.),.<& META-INF/ META-INF/MANIFEST.MF org/ org/foo/ org/foo/paint/ org/foo/paint/PaintFrame$1$1.class org/foo/paint/PaintFrame$1.class org/foo/paint/PaintFrame$ShapeActionListener.class org/foo/paint/PaintFrame.class org/foo/paint/SimpleShape.class org/foo/paint/ShapeComponent.class org/foo/shape/ org/foo/shape/Circle.class Shape implementations org/foo/shape/circle.png defined in org.foo.shape org/foo/shape/Square.class org/foo/shape/square.png org/foo/shape/Triangle.class org/foo/shape/triangle.pngD763PO#Q+%;&9#:Q&9 ^^
  67. 67. M+,c0+-492:&F2$,.&F:+A:25&`jajb&d)92;+,</$>&25+,A&?92<<)<& Paint b# c# Simple Frame Shape b# c# Shape Circle Square Triangle ComponentD763PO#Q+%;&9#:Q&9 ^b
  68. 68. M+,c0+-492:&F2$,.&F:+A:25&`jajb&d)92;+,</$>&25+,A&?92<<)<& Paint b# c# Simple Frame Shape b# c# Shape Circle Square Triangle Component How to decompose into bundles?D763PO#Q+%;&9#:Q&9 ^d
  69. 69. 0+-492:&F2$,.&F:+A:25&V)<$A,& &M4.)$# Shape .)*AD..A1%(4&# Paint Circle &M4.)$# .)*AD..A1%(4&AE5)E&# Square &M4.)$# .)*AD..A1%(4&A1d,()&# Triangle &M4.)$# .)*AD..A1%(4&A$)5("*&#D763PO#Q+%;&9#:Q&9 ^e
  70. 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;+,<&D763PO#Q+%;&9#:Q&9 bh
  71. 71. D763PO#Q+%;&9#:Q&9 bg
  72. 72. 1/2.&h&1/*&+@&Z$@)?*?9)&Z2*):&!,?)&S)&/2Q)&2&34,-9)E&S/2.&-+&S)&-+&S$./&$.6&!  G#%##;&+)+$#9+?&#""&9#D763I-/$#?+-0/<+2&3&D763PO#Q+%;&9#:Q&9 bH
  73. 73. 1/2.&h&1/*&+@&Z$@)?*?9)&Z2*):&!,?)&S)&/2Q)&2&34,-9)E&S/2.&-+&S)&-+&S$./&$.6&!  G#%##;&+)+$#9+?&#""&9#D763I-/$#?+-0/<+2&3&1/2.&$@&+4:&34,-9)&,))-<&.+&3)&$,$;29$H)-&<+5)/+S6&!  G#%##;)+$#)+-&+I9++03%&9#I-/$#?+-0D763PO#Q+%;&9#:Q&9 bR
  74. 74. 1/2.&h&1/*&+@&Z$@)?*?9)&Z2*):&!,?)&S)&/2Q)&2&34,-9)E&S/2.&-+&S)&-+&S$./&$.6&!  G#%##;&+)+$#9+?&#""&9#D763I-/$#?+-0/<+2&3&1/2.&$@&+4:&34,-9)&,))-<&.+&3)&$,$;29$H)-&<+5)/+S6&!  G#%##;)+$#)+-&+I9++03%&9#I-/$#?+-01/2.&$@&S)&S2,.&.+&2--&2,-&:)5+Q)&34,-9)<&2.&:4,&;5)6&!  G#%##;)+$#?/Q&+/**#))&9#2%;#-"Q3%LI-/$#?+-0D763PO#Q+%;&9#:Q&9 bZ
  75. 75. 1/2.&h&1/*&+@&Z$@)?*?9)&Z2*):&!,?)&S)&/2Q)&2&34,-9)E&S/2.&-+&S)&-+&S$./&$.6&!  G#%##;&+)+$#9+?&#""&9#D763I-/$#?+-0/<+2&3&1/2.&$@&+4:&34,-9)&,))-<&.+&3)&$,$;29$H)-&<+5)/+S6&!  G#%##;)+$#)+-&+I9++03%&9#I-/$#?+-01/2.&$@&S)&S2,.&.+&2--&2,-&:)5+Q)&34,-9)<&2.&:4,&;5)6&!  G#%##;)+$#?/Q&+/**#))&9#2%;#-"Q3%LI-/$#?+-01)&?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%;"#D763PO#Q+%;&9#:Q&9 b]
  76. 76. (4,-9)&Z$@)&=*?9)& 5"1$(# INSTALLED ,"5"1$(# )&1.8&# ,4J($&# ,"5"1$(# UNINSTALLED RESOLVED 1$()$# STARTING STOPPING &M45E5$# 1$.4# (,$.;(XE# ACTIVED763PO#Q+%;&9#:Q&9 b^
  77. 77. (4,-9)&Z$@)&=*?9)& 5"1$(# INSTALLED ,"5"1$(# )&1.8&# ,4J($&# ,"5"1$(# UNINSTALLED RESOLVED 1$()$# ;&2<9*)./"=8.$9&>#&2<9*&2)32 ?<$&$&,&.$&.?)&2 STOPPING STARTING &M45E5$# 1$.4# (,$.;(XE# ACTIVED763PO#Q+%;&9#:Q&9 bb
  78. 78. (4,-9)&Z$@)&=*?9)& @?-*"-./"=8.$9&>,#<*)$&2". 5"1$(# <,,<#38.)313<).)-"9)A&".$ "??&223B&C#"4&%<#D INSTALLED ,"5"1$(# )&1.8&# ,4J($&# ,"5"1$(# UNINSTALLED RESOLVED 1$()$# STARTING STOPPING &M45E5$# 1$.4# (,$.;(XE# ACTIVED763PO#Q+%;&9#:Q&9 bd
  79. 79. (4,-9)&D?;Q2.+:&B/)&34,-9)&2?;Q2.+:&$<&2&@:25)S+:7&/++7&.+&299+S&34,-9)<&.+&<.2:.4>&2,-& </4.-+S,&D763PO#Q+%;&9#:Q&9 be
  80. 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++03)3%J+0#;3%&9#7a4aV_6[7aDBBV_6)&/&#)D763PO#Q+%;&9#:Q&9 dh
  81. 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++03)3%J+0#;3%&9#7a4aV_6[7aDBBV_6)&/&#)!  4%/*8J/&+-3$="#$#%&)/)3$="#3%&#-I/*#/%;3)3%*"2;#;3%&9#<2%;"#E4 `"#& public interface BundleActivator { void start(BundleContext context) throws Exception; void stop(BundleContext context) throws Exception; }D763PO#Q+%;&9#:Q&9 dg
  82. 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++03)3%J+0#;3%&9#7a4aV_6[7aDBBV_6)&/&#)!  4%/*8J/&+-3$="#$#%&)/)3$="#3%&#-I/*#/%;3)3%*"2;#;3%&9#<2%;"#E4 `"#& public interface BundleActivator { void start(BundleContext context) throws Exception;& void stop(BundleContext context) throws Exception; }&!  4;;38+%/"$/%3I#)&$#&/;/&/3)%##;#;&+;#*"/-#&9#/*8J/&+- Bundle-Activator: <fully-qualified-class-name> &A*A># Bundle-Activator: org.foo.MyActivatorD763PO#Q+%;&9#:Q&9 dH
  83. 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++03)3%J+0#;3%&9#7a4aV_6[7aDBBV_6)&/&#)!  4%/*8J/&+-3$="#$#%&)/)3$="#3%&#-I/*#/%;3)3%*"2;#;3%&9#<2%;"#E4 `"#& public interface BundleActivator { void start(BundleContext context) throws Exception;& void stop(BundleContext context) throws Exception; }&!  4;;38+%/"$/%3I#)&$#&/;/&/3)%##;#;&+;#*"/-#&9#/*8J/&+- Bundle-Activator: <fully-qualified-class-name> &A*A># What are these? Bundle-Activator: org.foo.MyActivatorD763PO#Q+%;&9#:Q&9 dR
  84. 84. (4,-9)&=+,.).&d)>:)<),.<&./)&34,-9)k<&))?4;+,&?+,.).& 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); ... }D763PO#Q+%;&9#:Q&9 dZ
  85. 85. (4,-9)&=+,.).&d)>:)<),.<&./)&34,-9)k<&))?4;+,&?+,.).& Lifecycle methodpublic interface BundleContext { to install other bundles 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); ...}D763PO#Q+%;&9#:Q&9 d]
  86. 86. (4,-9)&=+,.).&d)>:)<),.<&./)&34,-9)k<&))?4;+,&?+,.).& 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); Access to other Bundle[] getBundles(); installed bundles ... void addBundleListener(BundleListener listener); void removeBundleListener(BundleListener listener); void addFrameworkListener(FrameworkListener listener); void removeFrameworkListener(FrameworkListener listener); ... File getDataFile(String filename); ... }D763PO#Q+%;&9#:Q&9 d^
  87. 87. (4,-9)&=+,.).&d)>:)<),.<&./)&34,-9)k<&))?4;+,&?+,.).& public interface BundleContext { String getProperty(String key); Access to our own bundle... Bundle getBundle(); whats that? 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); ... }D763PO#Q+%;&9#:Q&9 db
  88. 88. (4,-9)&d4,c;5)&:)>:)<),.2;+,&+@&2&34,-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();}D763PO#Q+%;&9#:Q&9 dd
  89. 89. (4,-9)&d4,c;5)&:)>:)<),.2;+,&+@&2&34,-9)&public interface Bundle { Lifecycle method to ... start 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();}D763PO#Q+%;&9#:Q&9 de
  90. 90. (4,-9)&d4,c;5)&:)>:)<),.2;+,&+@&2&34,-9)&public interface Bundle { Lifecycle method to ... stop 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();}D763PO#Q+%;&9#:Q&9 eh
  91. 91. (4,-9)&d4,c;5)&:)>:)<),.2;+,&+@&2&34,-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(); Lifecycle method to String getLocation(); update bundle ... URL getResource(String name); Enumeration getResources(String name) throws IOException; Class loadClass(String name) throws ClassNotFoundException; ... BundleContext getBundleContext();}D763PO#Q+%;&9#:Q&9 eg
  92. 92. (4,-9)&d4,c;5)&:)>:)<),.2;+,&+@&2&34,-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(); Lifecycle method to String getLocation(); uninstall bundle ... URL getResource(String name); Enumeration getResources(String name) throws IOException; Class loadClass(String name) throws ClassNotFoundException; ... BundleContext getBundleContext();}D763PO#Q+%;&9#:Q&9 eH
  93. 93. (4,-9)&d4,c;5)&:)>:)<),.2;+,&+@&2&34,-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(); Access to String getLocation(); bundle resources ... URL getResource(String name); Enumeration getResources(String name) throws IOException; Class loadClass(String name) throws ClassNotFoundException; ... BundleContext getBundleContext();}D763PO#Q+%;&9#:Q&9 eR
  94. 94. (4,-9)&d4,c;5)&:)>:)<),.2;+,&+@&2&34,-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(); Access to String getLocation(); accessible classes ... URL getResource(String name); Enumeration getResources(String name) throws IOException; Class loadClass(String name) throws ClassNotFoundException; ... BundleContext getBundleContext();}D763PO#Q+%;&9#:Q&9 eZ
  95. 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#) N.#51$&"#D.)#&8&"$1# BundleContext.addBundleListener()D763PO#Q+%;&9#:Q&9 e]
  96. 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#) !;4&;&"$#51$&"&)#5"$&)D(E&# public interface BundleListener extends EventListener { public void bundleChanged(BundleEvent event); }D763PO#Q+%;&9#:Q&9 e^
  97. 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#) 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() { … } }D763PO#Q+%;&9#:Q&9 eb
  98. 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+%D763PO#Q+%;&9#:Q&9 ed
  99. 99. P.),-):&F2X):,& Installed bundles Tracker Frame W.)&#D763PO#Q+%;&9#:Q&9 ee
  100. 100. P.),-):&F2X):,& Installed bundles e&*51$&)# :,"J&#51$&"&)# Tracker Frame W.)&#D763PO#Q+%;&9#:Q&9 ghh
  101. 101. P.),-):&F2X):,& Installed bundles !"1$(# :,"J&AK()# Tracker Frame W.)&#D763PO#Q+%;&9#:Q&9 ghg
  102. 102. P.),-):&F2X):,& Installed bundles W)&($&# .*5E(#:,"J&# Tracker Frame W.)&# -%(4&# 5;4#D763PO#Q+%;&9#:Q&9 ghH
  103. 103. P.),-):&F2X):,& Installed bundles Tracker Frame -$()X"*#1%(4&# W.)&# :,"J&#)&1.8&1#5$# -%(4&# 5;4#D763PO#Q+%;&9#:Q&9 ghR
  104. 104. P.),-):&F2X):,& Installed bundles R,"J&# 1$()$#&8&"$# Tracker Frame W.)&# -%(4&# 5;4#D763PO#Q+%;&9#:Q&9 ghZ
  105. 105. P.),-):&F2X):,& Installed bundles !"$&)).*($&#D.)#;&$(J($(L# )&1.,)E&1L#E(11&1L#&$EA# Tracker Frame W.)&# -%(4&# 5;4#D763PO#Q+%;&9#:Q&9 gh]
  106. 106. P.),-):&F2X):,& Installed bundles Tracker ).E&?3 Frame W.)&# -%(4&# 5;4#D763PO#Q+%;&9#:Q&9 gh^
  107. 107. P.),-):&F2X):,& Installed bundles Tracker Frame W.)&# -%(4&# 7.)#$%&#)&8&)1&L#5D#$%&#1%(4&#:,"J&# 5;4# 51#1$.44&JL#$%&#$)(EC&)#)&;.8&1#5$1# (11.E5($&J#1%(4&A#D763PO#Q+%;&9#:Q&9 ghb
  108. 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)&D763PO#Q+%;&9#:Q&9 ghd
  109. 109. P.),-):&F2$,.&F:+A:25&V)<$A,&`KaIb& Shape c# Default Extension Shape Tracker b# Paint Simple Frame Shape b# c# Shape Circle Square Triangle ComponentD763PO#Q+%;&9#:Q&9 ghe
  110. 110. P.),-):&F2$,.&F:+A:25&V)<$A,&`IaIb& &M4.)$# .)*AD..A1%(4&# Shape Paint CircleExtension-Name: Circle Extension-Class: Square org.foo.shape.circle.Circle Extension-Icon: org/foo/shape/circle/circle.png TriangleD763PO#Q+%;&9#:Q&9 ggh
  111. 111. d)@:)</$,A&./)&]:25)S+:7&e>-2.)&2,-&4,$,<.299&9$@)?*?9)&+>):2;+,<&2:)&2&9$X9)&?+5>9$?2.)-&!  G9QjD763PO#Q+%;&9#:Q&9 ggg
  112. 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%L2=;/&#;+- 2%3%)&/""#; A  !/%%+&=2""&9#-2L+2&I-+$2%;#-;#=#%;#%&<2%;"#)D763PO#Q+%;&9#:Q&9 ggH
  113. 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%L2=;/&#;+- 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+-%+?555D763PO#Q+%;&9#:Q&9 ggR
  114. 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%L2=;/&#;+- 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+-%+?555l+S&-+&S)&:)@:)</&./)&@:25)S+:76&D763PO#Q+%;&9#:Q&9 ggZ
  115. 115. F2?72A)&D-5$,&]:25)S+:7&>:+Q$-)<&<>)?$29&DFO&.+&-)29&S$./&34,-9)<&$,.):2?;+,<& 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); }D763PO#Q+%;&9#:Q&9 gg]
  116. 116. F2?72A)&D-5$,&]:25)S+:7&>:+Q$-)<&<>)?$29&DFO&.+&-)29&S$./&34,-9)<&$,.):2?;+,<& 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); various methods Provides } to introspect bundle dependenciesD763PO#Q+%;&9#:Q&9 gg^
  117. 117. F2?72A)&D-5$,&]:25)S+:7&>:+Q$-)<&<>)?$29&DFO&.+&-)29&S$./&34,-9)<&$,.):2?;+,<& 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); So, how do we gain Bundle[] getFragments(Bundle bundle); access to this API? RequiredBundle[] getRequiredBundles(String symbolicName); Bundle[] getHosts(Bundle bundle); void refreshPackages(Bundle[] bundles); boolean resolveBundles(Bundle[] bundles); }D763PO#Q+%;&9#:Q&9 ggb
  118. 118. D763PO#Q+%;&9#:Q&9 ggd
  119. 119. "):Q$?)&!:$),.2;+,&B/)&!"#$&@:25)S+:7&>:+5+.)<&2&<):Q$?)c+:$),.)-&$,.):2?;+,&>2X):,&25+,A& 34,-9)<&D763PO#Q+%;&9#:Q&9 gge
  120. 120. "):Q$?)&!:$),.2;+,&B/)&!"#$&@:25)S+:7&>:+5+.)<&2&<):Q$?)c+:$),.)-&$,.):2?;+,&>2X):,&25+,A& 34,-9)<& Service RegistryD763PO#Q+%;&9#:Q&9 gHh
  121. 121. "):Q$?)&!:$),.2;+,&B/)&!"#$&@:25)S+:7&>:+5+.)<&2&<):Q$?)c+:$),.)-&$,.):2?;+,&>2X):,&25+,A& 34,-9)<& Service Registry Y,:51%# Service Description Service ProviderD763PO#Q+%;&9#:Q&9 gHg
  122. 122. "):Q$?)&!:$),.2;+,&B/)&!"#$&@:25)S+:7&>:+5+.)<&2&<):Q$?)c+:$),.)-&$,.):2?;+,&>2X):,&25+,A& 34,-9)<& Service Registry Y,:51%# 75"J# Service Description Service Service Provider RequesterD763PO#Q+%;&9#:Q&9 gHH
  123. 123. "):Q$?)&!:$),.2;+,&B/)&!"#$&@:25)S+:7&>:+5+.)<&2&<):Q$?)c+:$),.)-&$,.):2?;+,&>2X):,&25+,A& 34,-9)<& Service Registry Y,:51%# 75"J# Service Description Service Service Provider Requester R5"J#D763PO#Q+%;&9#:Q&9 gHR
  124. 124. !"#$&"):Q$?)&D>>:+2?/&D-Q2,.2A)<&Z$A/.S)$A/.&<):Q$?)<&!  U3-#*&$#&9+;3%J+*/8+%".:4?.4:)-&?+-)&!  B-+$+&#))#=/-/8+%+I3%&#-I/*#I-+$3$="#$#%&/8+%!  (%/<"#)-#2)#.)2<)8&2&/<3"3&Q."++)#*+2="3%L./%;"/&#<3%;3%LV*,25$?<&!  T++)#*+2="3%L/%;"/&#<3%;3%L$/0#3&=+))3<"#&+)2==+-&-2%K8$# $/%/L#$#%&+I$+;2"#D763PO#Q+%;&9#:Q&9 gHZ
  125. 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)/==#/-/&/%Q8$#&d)<49;,A&2>>9$?2;+,&@+99+S<&2&"):Q$?)c!:$),.)-&=+5>+,),.&0+-)9&2>>:+2?/&!  !+$<3%#)3;#/)I-+$<+&9*+$=+%#%&/%;)#-J3*#+-3#%&/8+%D763PO#Q+%;&9#:Q&9 gH]
  126. 126. (4,-9)&Z$@)&=*?9)&`d)Q$<$.)-b& 5"1$(# INSTALLED ,"5"1$(# )&1.8&# ,4J($&# ,"5"1$(# UNINSTALLED RESOLVED 1$()$# STARTING STOPPING &M45E5$# 1$.4# (,$.;(XE# ACTIVED763PO#Q+%;&9#:Q&9 gH^
  127. 127. (4,-9)&Z$@)&=*?9)&`d)Q$<$.)-b& 5"1$(# INSTALLED @?-*"-./"=8.$9&"99<%2)3 ,"5"1$(# )&1.8&# ,4J($&# 3<,#<*)$&".$82&2&#*)?&2 ,"5"1$(# UNINSTALLED RESOLVED 1$()$# STARTING STOPPING &M45E5$# 1$.4# (,$.;(XE# ACTIVED763PO#Q+%;&9#:Q&9 gHb
  128. 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)?.&D763PO#Q+%;&9#:Q&9 gHd
  129. 129. l)99+&1+:9-&"):Q$?)&P25>9)&Z).k<&2<<45)&S)&/2Q)&./$<&<):Q$?)&$,.):@2?)&& package com.foo.hello; public interface Hello {& void sayHello(String name); }D763PO#Q+%;&9#:Q&9 gHe
  130. 130. l)99+&1+:9-&"):Q$?)&P25>9)&Z).k<&2<<45)&S)&/2Q)&./$<&<):Q$?)&$,.):@2?)&& package com.foo.hello; public interface Hello {& void sayHello(String name); }&D,-&./$<&$5>9)5),.2;+,& package com.foo.hello.impl; import com.foo.hello; public class HelloImpl implements Hello { public void sayHello(String name) { System.out.println("Hello " + name + "!"); } }D763PO#Q+%;&9#:Q&9 gRh
  131. 131. F439$</$,A&2&"):Q$?)&`KaIb&(4,-9)=+,.).&299+S<&34,-9)<&.+&>439$</&<):Q$?)<&public interface BundleContext { … void addServiceListener(ServiceListener listener, Stringfilter) 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, Stringfilter) throws InvalidSyntaxException; ServiceReference getServiceReference(String clazz); Object getService(ServiceReference reference); boolean ungetService(ServiceReference reference);}D763PO#Q+%;&9#:Q&9 gRg
  132. 132. F439$</$,A&2&"):Q$?)&`KaIb&(4,-9)=+,.).&299+S<&34,-9)<&.+&>439$</&<):Q$?)<&public interface BundleContext { … void addServiceListener(ServiceListener listener, Stringfilter) 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, Stringfilter) throws InvalidSyntaxException; ServiceReference getServiceReference(Stringhave two methods We clazz); for publishing services Object getService(ServiceReference reference); boolean ungetService(ServiceReference reference);}D763PO#Q+%;&9#:Q&9 gRH
  133. 133. F439$</$,A&2&"):Q$?)&`IaIb&(4,-9)<&+R),&>439$</&<):Q$?)<&$,&./)$:&2?;Q2.+:& 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(); } }D763PO#Q+%;&9#:Q&9 gRR
  134. 134. F439$</$,A&2&"):Q$?)&`IaIb&(4,-9)<&+R),&>439$</&<):Q$?)<&$,&./)$:&2?;Q2.+:& 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 bundlesD763PO#Q+%;&9#:Q&9 gRZ
  135. 135. F439$</$,A&2&"):Q$?)&`IaIb&(4,-9)<&+R),&>439$</&<):Q$?)<&$,&./)$:&2?;Q2.+:& 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 stoppingD763PO#Q+%;&9#:Q&9 gR]
  136. 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$="D763PO#Q+%;&9#:Q&9 gR^
  137. 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& 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.ActivatorD763PO#Q+%;&9#:Q&9 gRb
  138. 138. e<$,A&2&"):Q$?)&`KaIb&(4,-9)=+,.).&299+S<&34,-9)<&.+&_,-&<):Q$?)<&public interface BundleContext {  

×