SlideShare a Scribd company logo
1 of 72
Download to read offline
OSGi
                          Introduction
                                    By Peter Kriens
                           OSGi Technical Director & Evangelist




donderdag 24 maart 2011
donderdag 24 maart 2011
In the beginnings there
                                were bits ...



donderdag 24 maart 2011
0100111100110010000000001111000
                          0001000010001110010100000010011
      Bits

                          1000100011011111100010001110111
                          1101101001000010011101000000111
                          1110000010100000110111000010000
                          0110110100000001100100010001110
                          10000001110110




donderdag 24 maart 2011
0100111100110010000000001111000
                          0001000010001110010100000010011
      Bits

                          1000100011011111100010001110111
                          1101101001000010011101000000111
                          1110000010100000110111000010000
                          0110110100000001100100010001110
                          10000001110110




donderdag 24 maart 2011
117
                          062
                          000
                          360
                          041
                          034
                          240
                          116
                          043
      Octal

                          176
                          043
                          276
                          322
                          023
                          240
                          176
                          012
                          015
                          302
                          015
                          240
                          062
                          043
                          240
                          166


donderdag 24 maart 2011
4F
                          32   00 F0
                          21   1C A0
                          4E
                          23
                          7E
      Hex

                          23
                          BE
                          D2   13 A0
                          7E
                          0A
                          0D
                          C2   0D A0
                          32   23 A0
                          76



donderdag 24 maart 2011
MOV   C,A
                          STA   F000H
                          LXI   H,A01CH
                          MOV   C,M
                          INX   H
      Code

                          MOV   A,M
                          INX   H
                          CMP   M
                          JNC   A013H
                          MOV   A,M
                          DCR   C
                          JNZ   A00DH
                          STA   A023H
                          HLT



donderdag 24 maart 2011
MOV   C,A
                          STA   F000H
                          LXI   H,A01CH
                          MOV   C,M
                          INX   H
      Code

                          MOV   A,M
                          INX   H
                          CMP   M
                          JNC   A013H
                          MOV   A,M
                          DCR   C
                          JNZ   A00DH
                          STA   A023H
                          HLT



donderdag 24 maart 2011
Code

                          global = shared;
                          for (local=0;
                            local<10; local++)
                            shared *= 10;




donderdag 24 maart 2011
Code

                          global = shared;
                          for (local=0;
                            local<10; local++)
                            shared *= 10;




donderdag 24 maart 2011
int global;
                              int shared;
                              int local;
      Code

                          global = shared;
                          for (local=0;
                            local<10; local++)
                            shared *= 10;




donderdag 24 maart 2011
int global;
                              int shared;
                              int local;
      Functions

                          void foo() {
                            global = shared;
                            for (local=0;
                              local<10; local++)
                              shared *= 10;
                          }




donderdag 24 maart 2011
int global;
                              int shared;
                              int local;
      Functions

                          void foo() {
                            global = shared;
                            for (local=0;
                              local<10; local++)
                              shared *= 10;
                          }




donderdag 24 maart 2011
int global;
                              int shared;
                              int local;
      Functions
                          void foo() {
                            global = shared;
                            for (local=0;
                              local<10; local++)
                              shared *= 10;
                          }




                          void bar() {
                            global = shared;
                            for (local=0;
                              local<10; local++)
                              shared *= 10;
                          }




donderdag 24 maart 2011
int global;
                              int shared;


                           void foo() {
      Functions
                            int local
                            global = shared;
                            for (local=0;
                              local<10; local++)
                              shared *= 10;
                          }




                           void bar() {
                            int local;
                            global = shared;
                            for (local=0;
                              local<10; local++)
                              shared *= 10;
                          }




donderdag 24 maart 2011
int global;
                                        int shared;


                          A
      Modules
                           void foo() {             void bar() {
                            int local                int local
                            global = shared;         global = shared;
                            for (local=0;            for (local=0;
                              local<10; local++)       local<10; local++)
                              shared *= 10;            shared *= 10;
                          }                        }




                          B
                           void foo() {             void xyz() {
                            int local                int local
                            global = shared;         global = shared;
                            for (local=0;            for (local=0;
                              local<10; local++)       local<10; local++)
                              shared *= 10;            shared *= 10;
                          }                        }




donderdag 24 maart 2011
int global;
                                        int shared;


                          A
      Modules
                           void foo() {             void bar() {
                            int local                int local
                            global = shared;         global = shared;
                            for (local=0;            for (local=0;
                              local<10; local++)       local<10; local++)
                              shared *= 10;            shared *= 10;
                          }                        }




                          B
                           void foo() {             void xyz() {
                            int local                int local
                            global = shared;         global = shared;
                            for (local=0;            for (local=0;
                              local<10; local++)       local<10; local++)
                              shared *= 10;            shared *= 10;
                          }                        }




donderdag 24 maart 2011
int global;



                          A             int shared;
      Modules
                           void foo() {             void bar() {
                            int local                int local
                            global = shared;         global = shared;
                            for (local=0;            for (local=0;
                              local<10; local++)       local<10; local++)
                              shared *= 10;            shared *= 10;
                          }                        }




                          B             int shared;
                           void foo() {             void xyz() {
                            int local                int local
                            global = shared;         global = shared;
                            for (local=0;            for (local=0;
                              local<10; local++)       local<10; local++)
                              shared *= 10;            shared *= 10;
                          }                        }




donderdag 24 maart 2011
Class A           int shared;

                           void foo() {             void bar() {
      Objects
                            int local                int local
                            global = shared;         global = shared;
                            for (local=0;            for (local=0;
                              local<10; local++)       local<10; local++)
                              shared *= 10;            shared *= 10;
                          }                        }




                          Class B           int shared;

                           void foo() {             void xyz() {
                            int local                int local
                            global = shared;         global = shared;
                            for (local=0;            for (local=0;
                              local<10; local++)       local<10; local++)
                              shared *= 10;            shared *= 10;
                          }                        }




donderdag 24 maart 2011
Class A           int shared;

                           void foo() {             void bar() {
      Objects
                            int local                int local
                            global = shared;         global = shared;
                            for (local=0;            for (local=0;
                              local<10; local++)       local<10; local++)
                              shared *= 10;            shared *= 10;
                          }                        }




                          Class B           int shared;

                           void foo() {             void xyz() {
                            int local                int local
                            global = shared;         global = shared;
                            for (local=0;            for (local=0;
                              local<10; local++)       local<10; local++)
                              shared *= 10;            shared *= 10;
                          }                        }




donderdag 24 maart 2011
ces
                                    Class A
                     tan
                                   Class A
                                  Class A
                ins
                                 Class A
                                Class A     int shared;

                                 void foo() {             void bar() {
      Objects
                                  int local                int local
                                  global = shared;         global = shared;
                                  for (local=0;            for (local=0;
                                    local<10; local++)       local<10; local++)
                                    shared *= 10;            shared *= 10;
                                }                        }




                                Class B           int shared;

                                 void foo() {             void xyz() {
                                  int local                int local
                                  global = shared;         global = shared;
                                  for (local=0;            for (local=0;
                                    local<10; local++)       local<10; local++)
                                    shared *= 10;            shared *= 10;
                                }                        }




donderdag 24 maart 2011
“Chapter 7 describes the structure of a
                          program which is organized into packages
                                 similar to the modules of Modula.”

                           Java Language Specification, 3rd edition




donderdag 24 maart 2011
“Chapter 7 describes the structure of a
                          program which is organized into packages
                                 similar to the modules of Modula.”

                           Java Language Specification, 3rd edition




donderdag 24 maart 2011
package com.acme.abc
      Packages
                          Class A        int shared;                      Class B        int shared;

                            void foo() {            void bar() {            void foo() {            void xyz() {
                             int local               int local               int local               int local
                             global = shared;        global = shared;        global = shared;        global = shared;
                             for (local=0;           for (local=0;           for (local=0;           for (local=0;
                               local<10; local+        local<10; local+        local<10; local+        local<10; local+
                          +)                      +)                      +)                      +)
                               shared *= 10;           shared *= 10;           shared *= 10;           shared *= 10;
                          }                       }                       }                       }




                          package com.acme.def

                          Class A        int shared;                      Class C        int shared;

                            void foo() {            void bar() {            void foo() {            void xyz() {
                             int local               int local               int local               int local
                             global = shared;        global = shared;        global = shared;        global = shared;
                             for (local=0;           for (local=0;           for (local=0;           for (local=0;
                               local<10; local+        local<10; local+        local<10; local+        local<10; local+
                          +)                      +)                      +)                      +)
                               shared *= 10;           shared *= 10;           shared *= 10;           shared *= 10;
                          }                       }                       }                       }




donderdag 24 maart 2011
The Face of Modularity




donderdag 24 maart 2011
The Face of Modularity




donderdag 24 maart 2011
Modularity’s Secret
               • modules have a private
                      space and share a
                      public space              A   B

               •      modules limit their
                      visibility and exposure
                                                C   D
               •      From geometric to
                      linear complexity
               •      And something extra ...


donderdag 24 maart 2011
Modularity’s Secret
               • modules have a private
                      space and share a
                      public space              A         B

               •      modules limit their           Pub
                      visibility and exposure
                                                C         D
               •      From geometric to
                      linear complexity
               •      And something extra ...


donderdag 24 maart 2011
Modularity’s Secret
               • modules have a private
                      space and share a
                      public space              A         B

               •      modules limit their           Pub
                      visibility and exposure
                                                C         D
               •      From geometric to
                      linear complexity
               •      And something extra ...


donderdag 24 maart 2011
JAR abc-1.2.3-SNAPSHOT.jar
                            com.acme.abc                                                                                com.acme.def
                            Class A      int shared;                      Class B      int shared;                      Class A      int shared;                      Class B      int shared;



                              void foo() {            void bar() {          void foo() {            void xyz() {          void foo() {            void bar() {          void foo() {            void xyz() {
                             int local               int local             int local               int local             int local               int local             int local               int local
      JARs

                            global = shared;        global = shared;      global = shared;        global = shared;      global = shared;        global = shared;      global = shared;        global = shared;
                            for (local=0;           for (local=0;         for (local=0;           for (local=0;         for (local=0;           for (local=0;         for (local=0;           for (local=0;
                              local<10; local         local<10; local       local<10; local         local<10; local       local<10; local         local<10; local       local<10; local         local<10; local
                          ++)                     ++)                   ++)                     ++)                   ++)                     ++)                   ++)                     ++)
                              shared *= 10;           shared *= 10;         shared *= 10;           shared *= 10;         shared *= 10;           shared *= 10;         shared *= 10;           shared *= 10;
                          }                       }                     }                       }                     }                       }                     }                       }




                          JAR def-4.5.6.jar
                            com.acme.abc                                                                                com.acme.ghi
                            Class A      int shared;                      Class B      int shared;                      Class A      int shared;                      Class B      int shared;



                              void foo() {            void bar() {          void foo() {            void xyz() {          void foo() {            void bar() {          void foo() {            void xyz() {
                             int local               int local             int local               int local             int local               int local             int local               int local
                            global = shared;        global = shared;      global = shared;        global = shared;      global = shared;        global = shared;      global = shared;        global = shared;
                            for (local=0;           for (local=0;         for (local=0;           for (local=0;         for (local=0;           for (local=0;         for (local=0;           for (local=0;
                              local<10; local         local<10; local       local<10; local         local<10; local       local<10; local         local<10; local       local<10; local         local<10; local
                          ++)                     ++)                   ++)                     ++)                   ++)                     ++)                   ++)                     ++)
                              shared *= 10;           shared *= 10;         shared *= 10;           shared *= 10;         shared *= 10;           shared *= 10;         shared *= 10;           shared *= 10;
                          }                       }                     }                       }                     }                       }                     }                       }




donderdag 24 maart 2011
JAR abc-1.2.3-SNAPSHOT.jar
                            com.acme.abc                                                                                com.acme.def
                            Class A      int shared;                      Class B      int shared;                      Class A      int shared;                      Class B      int shared;



                              void foo() {            void bar() {          void foo() {            void xyz() {          void foo() {            void bar() {          void foo() {            void xyz() {
                             int local               int local             int local               int local             int local               int local             int local               int local
      JARs

                            global = shared;        global = shared;      global = shared;        global = shared;      global = shared;        global = shared;      global = shared;        global = shared;
                            for (local=0;           for (local=0;         for (local=0;           for (local=0;         for (local=0;           for (local=0;         for (local=0;           for (local=0;
                              local<10; local         local<10; local       local<10; local         local<10; local       local<10; local         local<10; local       local<10; local         local<10; local
                          ++)                     ++)                   ++)                     ++)                   ++)                     ++)                   ++)                     ++)
                              shared *= 10;           shared *= 10;         shared *= 10;           shared *= 10;         shared *= 10;           shared *= 10;         shared *= 10;           shared *= 10;
                          }                       }                     }                       }                     }                       }                     }                       }




                          JAR def-4.5.6.jar
                            com.acme.abc                                                                                com.acme.ghi
                            Class A      int shared;                      Class B      int shared;                      Class A      int shared;                      Class B      int shared;



                              void foo() {            void bar() {          void foo() {            void xyz() {          void foo() {            void bar() {          void foo() {            void xyz() {
                             int local               int local             int local               int local             int local               int local             int local               int local
                            global = shared;        global = shared;      global = shared;        global = shared;      global = shared;        global = shared;      global = shared;        global = shared;
                            for (local=0;           for (local=0;         for (local=0;           for (local=0;         for (local=0;           for (local=0;         for (local=0;           for (local=0;
                              local<10; local         local<10; local       local<10; local         local<10; local       local<10; local         local<10; local       local<10; local         local<10; local
                          ++)                     ++)                   ++)                     ++)                   ++)                     ++)                   ++)                     ++)
                              shared *= 10;           shared *= 10;         shared *= 10;           shared *= 10;         shared *= 10;           shared *= 10;         shared *= 10;           shared *= 10;
                          }                       }                     }                       }                     }                       }                     }                       }




donderdag 24 maart 2011
Java VM        party      common       resolver      axis        xerces

Begin                        rt       assetmaint     catalina      mail      ezmorph       xmlapis

                             jce       hhfacility     base        jenks       servlets     xmlrpc
Here                        jsse         pos.        datafile     jakarta      jetty     xmlgraphics

                           plugin      content        entity      log4j        looks

                     sunjce_prov.     manufact.      widget      httpunit      jdbm

                           dnsns       product          …          mx4j         bsf

                             ..           bi          rome        batik         bsh

                          marketing    workflow      jpos18        fop        velocity

                      workeffort      ecommerce        jcl        tomcat    ws-commons

                            ebay         oagis      barcode4j      poi       geronimo

                          minerva         …         freemarker    lucene         ..

                          minilang    googlebase    serializer    jdom         json

                      accounting         order       naming      commons       xalan

                           guiapp        ofbiz        jython      derby       wsdl4j




donderdag 24 maart 2011
Java VM        party      common       resolver      axis         xerces

Begin                        rt       assetmaint     catalina      mail      ezmorph        xmlapis

                             jce       hhfacility     base        jenks       servlets      xmlrpc
Here                        jsse         pos.        datafile     jakarta      jetty      xmlgraphics

                           plugin      content        entity      log4j        looks

                     sunjce_prov.     manufact.      widget      httpunit      jdbm

                           dnsns       product          …          mx4j         bsf

                             ..           bi          rome        batik         bsh
                                                                                           Class
                          marketing    workflow      jpos18        fop        velocity
                                                                                            Not
                      workeffort      ecommerce        jcl        tomcat    ws-commons
                                                                                          Found
                            ebay         oagis      barcode4j      poi       geronimo
                                                                                         Exception
                          minerva         …         freemarker    lucene         ..

                          minilang    googlebase    serializer    jdom         json

                      accounting         order       naming      commons       xalan

                           guiapp        ofbiz        jython      derby       wsdl4j




donderdag 24 maart 2011
bundle com.acme.abc-1.2.3
                            package com.acme.abc                                                                        package com.acme.def
      Bundles
                            Class A      int shared;                      Class B      int shared;                      Class A      int shared;                      Class B      int shared;



                              void foo() {            void bar() {          void foo() {            void xyz() {          void foo() {            void bar() {          void foo() {            void xyz() {
                             int local               int local             int local               int local             int local               int local             int local               int local
                            global = shared;        global = shared;      global = shared;        global = shared;      global = shared;        global = shared;      global = shared;        global = shared;
                            for (local=0;           for (local=0;         for (local=0;           for (local=0;         for (local=0;           for (local=0;         for (local=0;           for (local=0;
                              local<10; local         local<10; local       local<10; local         local<10; local       local<10; local         local<10; local       local<10; local         local<10; local
                          ++)                     ++)                   ++)                     ++)                   ++)                     ++)                   ++)                     ++)
                              shared *= 10;           shared *= 10;         shared *= 10;           shared *= 10;         shared *= 10;           shared *= 10;         shared *= 10;           shared *= 10;
                          }                       }                     }                       }                     }                       }                     }                       }




                          bundle com.acme.def-9.9.1
                            package com.acme.abc                                                                        package com.acme.ghi
                            Class A      int shared;                      Class B      int shared;                      Class A      int shared;                      Class B      int shared;



                              void foo() {            void bar() {          void foo() {            void xyz() {          void foo() {            void bar() {          void foo() {            void xyz() {
                             int local               int local             int local               int local             int local               int local             int local               int local
                            global = shared;        global = shared;      global = shared;        global = shared;      global = shared;        global = shared;      global = shared;        global = shared;
                            for (local=0;           for (local=0;         for (local=0;           for (local=0;         for (local=0;           for (local=0;         for (local=0;           for (local=0;
                              local<10; local         local<10; local       local<10; local         local<10; local       local<10; local         local<10; local       local<10; local         local<10; local
                          ++)                     ++)                   ++)                     ++)                   ++)                     ++)                   ++)                     ++)
                              shared *= 10;           shared *= 10;         shared *= 10;           shared *= 10;         shared *= 10;           shared *= 10;         shared *= 10;           shared *= 10;
                          }                       }                     }                       }                     }                       }                     }                       }




donderdag 24 maart 2011
bundle com.acme.abc-1.2.3
                            package com.acme.abc                                                                        package com.acme.def
      Bundles
                            Class A      int shared;                      Class B      int shared;                      Class A      int shared;                      Class B      int shared;




                                                  Private                                                                                   Exported
                              void foo() {            void bar() {          void foo() {            void xyz() {          void foo() {            void bar() {          void foo() {            void xyz() {
                             int local               int local             int local               int local             int local               int local             int local               int local
                            global = shared;        global = shared;      global = shared;        global = shared;      global = shared;        global = shared;      global = shared;        global = shared;
                            for (local=0;           for (local=0;         for (local=0;           for (local=0;         for (local=0;           for (local=0;         for (local=0;           for (local=0;
                              local<10; local         local<10; local       local<10; local         local<10; local       local<10; local         local<10; local       local<10; local         local<10; local
                          ++)                     ++)                   ++)                     ++)                   ++)                     ++)                   ++)                     ++)
                              shared *= 10;           shared *= 10;         shared *= 10;           shared *= 10;         shared *= 10;           shared *= 10;         shared *= 10;           shared *= 10;
                          }                       }                     }                       }                     }                       }                     }                       }




                          bundle com.acme.def-9.9.1
                            package com.acme.abc                                                                        package com.acme.ghi
                            Class A      int shared;                      Class B      int shared;                      Class A      int shared;                      Class B      int shared;




                                                   Private                                                                                  Exported
                              void foo() {            void bar() {          void foo() {            void xyz() {          void foo() {            void bar() {          void foo() {            void xyz() {
                             int local               int local             int local               int local             int local               int local             int local               int local
                            global = shared;        global = shared;      global = shared;        global = shared;      global = shared;        global = shared;      global = shared;        global = shared;
                            for (local=0;           for (local=0;         for (local=0;           for (local=0;         for (local=0;           for (local=0;         for (local=0;           for (local=0;
                              local<10; local         local<10; local       local<10; local         local<10; local       local<10; local         local<10; local       local<10; local         local<10; local
                          ++)                     ++)                   ++)                     ++)                   ++)                     ++)                   ++)                     ++)
                              shared *= 10;           shared *= 10;         shared *= 10;           shared *= 10;         shared *= 10;           shared *= 10;         shared *= 10;           shared *= 10;
                          }                       }                     }                       }                     }                       }                     }                       }




donderdag 24 maart 2011
bundle com.acme.abc-1.2.3
                            package com.acme.abc                                                                        package com.acme.def
      Bundles
                            Class A      int shared;                      Class B      int shared;                      Class A      int shared;                      Class B      int shared;




                                                  Private                                                                                   Exported
                              void foo() {            void bar() {          void foo() {            void xyz() {          void foo() {            void bar() {          void foo() {            void xyz() {
                             int local               int local             int local               int local             int local               int local             int local               int local
                            global = shared;        global = shared;      global = shared;        global = shared;      global = shared;        global = shared;      global = shared;        global = shared;
                            for (local=0;           for (local=0;         for (local=0;           for (local=0;         for (local=0;           for (local=0;         for (local=0;           for (local=0;
                              local<10; local         local<10; local       local<10; local         local<10; local       local<10; local         local<10; local       local<10; local         local<10; local
                          ++)                     ++)                   ++)                     ++)                   ++)                     ++)                   ++)                     ++)
                              shared *= 10;           shared *= 10;         shared *= 10;           shared *= 10;         shared *= 10;           shared *= 10;         shared *= 10;           shared *= 10;
                          }                       }                     }                       }                     }                       }                     }                       }




                          bundle com.acme.def-9.9.1
                            package com.acme.abc                                                                        package com.acme.ghi
                            Class A      int shared;                      Class B      int shared;                      Class A      int shared;                      Class B      int shared;




                                                   Private                                                                                  Exported
                              void foo() {            void bar() {          void foo() {            void xyz() {          void foo() {            void bar() {          void foo() {            void xyz() {
                             int local               int local             int local               int local             int local               int local             int local               int local
                            global = shared;        global = shared;      global = shared;        global = shared;      global = shared;        global = shared;      global = shared;        global = shared;
                            for (local=0;           for (local=0;         for (local=0;           for (local=0;         for (local=0;           for (local=0;         for (local=0;           for (local=0;
                              local<10; local         local<10; local       local<10; local         local<10; local       local<10; local         local<10; local       local<10; local         local<10; local
                          ++)                     ++)                   ++)                     ++)                   ++)                     ++)                   ++)                     ++)
                              shared *= 10;           shared *= 10;         shared *= 10;           shared *= 10;         shared *= 10;           shared *= 10;         shared *= 10;           shared *= 10;
                          }                       }                     }                       }                     }                       }                     }                       }




donderdag 24 maart 2011
bundle com.acme.abc-1.2.3
                            package com.acme.abc                                                                        package com.acme.def
      Bundles
                            Class A      int shared;                      Class B      int shared;                      Class A      int shared;                      Class B      int shared;




                                                  Private                                                                                   Exported
                              void foo() {            void bar() {          void foo() {            void xyz() {          void foo() {            void bar() {          void foo() {            void xyz() {
                             int local               int local             int local               int local             int local               int local             int local               int local
                            global = shared;        global = shared;      global = shared;        global = shared;      global = shared;        global = shared;      global = shared;        global = shared;
                            for (local=0;           for (local=0;         for (local=0;           for (local=0;         for (local=0;           for (local=0;         for (local=0;           for (local=0;
                              local<10; local         local<10; local       local<10; local         local<10; local       local<10; local         local<10; local       local<10; local         local<10; local
                          ++)                     ++)                   ++)                     ++)                   ++)                     ++)                   ++)                     ++)
                              shared *= 10;           shared *= 10;         shared *= 10;           shared *= 10;         shared *= 10;           shared *= 10;         shared *= 10;           shared *= 10;
                          }                       }                     }                       }                     }                       }                     }                       }




                          bundle com.acme.def-9.9.1
                            package com.acme.abc                                                                        package com.acme.ghi
                            Class A      int shared;                      Class B      int shared;                      Class A      int shared;                      Class B      int shared;




                                                   Private                                                                                  Exported
                              void foo() {            void bar() {          void foo() {            void xyz() {          void foo() {            void bar() {          void foo() {            void xyz() {
                             int local               int local             int local               int local             int local               int local             int local               int local
                            global = shared;        global = shared;      global = shared;        global = shared;      global = shared;        global = shared;      global = shared;        global = shared;
                            for (local=0;           for (local=0;         for (local=0;           for (local=0;         for (local=0;           for (local=0;         for (local=0;           for (local=0;
                              local<10; local         local<10; local       local<10; local         local<10; local       local<10; local         local<10; local       local<10; local         local<10; local
                          ++)                     ++)                   ++)                     ++)                   ++)                     ++)                   ++)                     ++)
                              shared *= 10;           shared *= 10;         shared *= 10;           shared *= 10;         shared *= 10;           shared *= 10;         shared *= 10;           shared *= 10;
                          }                       }                     }                       }                     }                       }                     }                       }




donderdag 24 maart 2011
bundle com.acme.abc-1.2.3
                            package com.acme.abc                                                                        package com.acme.def
      Bundles
                            Class A      int shared;                      Class B      int shared;                      Class A      int shared;                      Class B      int shared;




                                                  Private                                                                                   Exported
                              void foo() {            void bar() {          void foo() {            void xyz() {          void foo() {            void bar() {          void foo() {            void xyz() {
                             int local               int local             int local               int local             int local               int local             int local               int local
                            global = shared;        global = shared;      global = shared;        global = shared;      global = shared;        global = shared;      global = shared;        global = shared;
                            for (local=0;           for (local=0;         for (local=0;           for (local=0;         for (local=0;           for (local=0;         for (local=0;           for (local=0;
                              local<10; local         local<10; local       local<10; local         local<10; local       local<10; local         local<10; local       local<10; local         local<10; local
                          ++)                     ++)                   ++)                     ++)                   ++)                     ++)                   ++)                     ++)
                              shared *= 10;           shared *= 10;         shared *= 10;           shared *= 10;         shared *= 10;           shared *= 10;         shared *= 10;           shared *= 10;
                          }                       }                     }                       }                     }                       }                     }                       }




                                            X

                          bundle com.acme.def-9.9.1
                            package com.acme.abc                                                                        package com.acme.ghi
                            Class A      int shared;                      Class B      int shared;                      Class A      int shared;                      Class B      int shared;




                                                   Private                                                                                  Exported
                              void foo() {            void bar() {          void foo() {            void xyz() {          void foo() {            void bar() {          void foo() {            void xyz() {
                             int local               int local             int local               int local             int local               int local             int local               int local
                            global = shared;        global = shared;      global = shared;        global = shared;      global = shared;        global = shared;      global = shared;        global = shared;
                            for (local=0;           for (local=0;         for (local=0;           for (local=0;         for (local=0;           for (local=0;         for (local=0;           for (local=0;
                              local<10; local         local<10; local       local<10; local         local<10; local       local<10; local         local<10; local       local<10; local         local<10; local
                          ++)                     ++)                   ++)                     ++)                   ++)                     ++)                   ++)                     ++)
                              shared *= 10;           shared *= 10;         shared *= 10;           shared *= 10;         shared *= 10;           shared *= 10;         shared *= 10;           shared *= 10;
                          }                       }                     }                       }                     }                       }                     }                       }




donderdag 24 maart 2011
Manifest
               Manifest-Version: 1
               Bundle-ManifestVersion: 2
               Bundle-SymbolicName: com.acme.bundle
               Bundle-Version: 1.2.3.v201103221001
               Import-Package:
                 javax.activation,
                 javax.persistence,
                 org.osgi.framework;version=”[1.3,2)”
               Export-Package:
                 com.acme.bundle.service;version=2.3,
                 com.acme.api; version=45.2
               Bundle-License:
                 http://www.apache.org/license/ASL2.0.txt
               Tool: bnd-1.43.0




donderdag 24 maart 2011
Manifest
               Manifest-Version: 1
               Bundle-ManifestVersion: 2
               Bundle-SymbolicName: com.acme.bundle
               Bundle-Version: 1.2.3.v201103221001
               Import-Package:




                        d
                 javax.activation,
                 javax.persistence,
                 org.osgi.framework;version=”[1.3,2)”
                     bn
               Export-Package:
                 com.acme.bundle.service;version=2.3,
                 com.acme.api; version=45.2
               Bundle-License:
                 http://www.apache.org/license/ASL2.0.txt
               Tool: bnd-1.43.0




donderdag 24 maart 2011
bundle com.acme.abc-1.2.3
                            package com.acme.abc                                                                        package com.acme.def
      Bundles
                            Class A      int shared;                      Class B      int shared;                      Class A      int shared;                      Class B      int shared;



                              void foo() {            void bar() {          void foo() {            void xyz() {          void foo() {            void bar() {          void foo() {            void xyz() {
                             int local               int local             int local               int local             int local               int local             int local               int local
                            global = shared;        global = shared;      global = shared;        global = shared;      global = shared;        global = shared;      global = shared;        global = shared;
                            for (local=0;           for (local=0;         for (local=0;           for (local=0;         for (local=0;           for (local=0;         for (local=0;           for (local=0;
                              local<10; local         local<10; local       local<10; local         local<10; local       local<10; local         local<10; local       local<10; local         local<10; local
                          ++)                     ++)                   ++)                     ++)                   ++)                     ++)                   ++)                     ++)
                              shared *= 10;           shared *= 10;         shared *= 10;           shared *= 10;         shared *= 10;           shared *= 10;         shared *= 10;           shared *= 10;
                          }                       }                     }                       }                     }                       }                     }                       }




                          bundle com.acme.def-9.9.1
                            package com.acme.abc                                                                        package com.acme.ghi
                            Class A      int shared;                      Class B      int shared;                      Class A      int shared;                      Class B      int shared;



                              void foo() {            void bar() {          void foo() {            void xyz() {          void foo() {            void bar() {          void foo() {            void xyz() {
                             int local               int local             int local               int local             int local               int local             int local               int local
                            global = shared;        global = shared;      global = shared;        global = shared;      global = shared;        global = shared;      global = shared;        global = shared;
                            for (local=0;           for (local=0;         for (local=0;           for (local=0;         for (local=0;           for (local=0;         for (local=0;           for (local=0;
                              local<10; local         local<10; local       local<10; local         local<10; local       local<10; local         local<10; local       local<10; local         local<10; local
                          ++)                     ++)                   ++)                     ++)                   ++)                     ++)                   ++)                     ++)
                              shared *= 10;           shared *= 10;         shared *= 10;           shared *= 10;         shared *= 10;           shared *= 10;         shared *= 10;           shared *= 10;
                          }                       }                     }                       }                     }                       }                     }                       }




donderdag 24 maart 2011
bundle com.acme.abc-1.2.3
      Bundles



                          bundle com.acme.def-9.9.1




donderdag 24 maart 2011
bundle com.acme.abc-1.2.3
      Bundles




                                             ed
                                     ifi
                          bundle com.acme.def-9.9.1
                            re

donderdag 24 maart 2011
POJO Programming is
                             Best Practice



donderdag 24 maart 2011
Interfaces/API


                    Consumer                    Provider
                                    Interface
                      Class                       Class




donderdag 24 maart 2011
Interfaces/API

           package com.consumer.impl   package com.api   package com.provider.impl


                    Consumer                                    Provider
                                             Interface
                      Class                                       Class




donderdag 24 maart 2011
Interfaces/API

           package com.consumer.impl   package com.api   package com.provider.impl


                    Consumer                                    Provider
                                             Interface
                      Class                                       Class




                   Your App

donderdag 24 maart 2011
Interfaces/API

           package com.consumer.impl    package com.api   package com.provider.impl


                    Consumer                                     Provider
                                              Interface
                      Class                                        Class




                   Your App            DocumentBuilder

donderdag 24 maart 2011
Interfaces/API

           package com.consumer.impl    package com.api   package com.provider.impl


                    Consumer                                     Provider
                                              Interface
                      Class                                        Class




                   Your App            DocumentBuilder           Xerces

donderdag 24 maart 2011
Access to
                            Implementations
           package com.consumer.impl   package com.api   package com.provider.impl


                    Consumer                                    Provider
                                             Interface
                      Class                                       Class




donderdag 24 maart 2011
Access to
                            Implementations
           package com.consumer.impl   package com.api   package com.provider.impl


                    Consumer                                    Provider
                                             Interface
                      Class                                       Class




donderdag 24 maart 2011
Access to
                            Implementations
           package com.consumer.impl   package com.api   package com.provider.impl




                                                                     te
                    Consumer                                    Provider
                                             Interface




                                                                iva
                      Class                                       Class




donderdag 24 maart 2011                                    pr
Access to
                            Implementations
           package com.consumer.impl
           com.consumer.impl           package
                                       com.api com.api   package com.provider.impl
                                                         com.provider.impl


                    Consumer
                      Con-                                      Provider
                                             Interface          Provider
                     sumer
                      Class                                       Class




donderdag 24 maart 2011
µServices




donderdag 24 maart 2011
µServices


                            package com.api




                                specifies




donderdag 24 maart 2011
µServices


                            package com.api

                                                   bundle
                                              com.provider.impl



                                specifies




donderdag 24 maart 2011
µServices


                            package com.api

                                                   bundle
                                              com.provider.impl



                                specifies          provides




donderdag 24 maart 2011
µServices


                                 package com.api

                bundle                                  bundle
           com.consumer.impl                       com.provider.impl



                                     specifies          provides




donderdag 24 maart 2011
µServices


                                     package com.api

                bundle                                      bundle
           com.consumer.impl                           com.provider.impl



                          refers         specifies          provides




donderdag 24 maart 2011
Trivial To Use With DS
               package com.consumer.impl;
               @Component
               public class Consumer {
                 Interface service;

                   @Activate
                   void begin();

                   @Reference
                   void setLog( Interface service) {
                     this.service = service;
                   }
               }

               package com.provider.impl;
               @Component
               public class Provider implements Interface {
                 public void method() {
                   … // do something
                 }
               }
donderdag 24 maart 2011
µServices

                                 factory

                bundle                          bundle
           com.consumer.impl               com.provider.impl




donderdag 24 maart 2011
µServices


                bundle                            bundle
           com.consumer.impl                 com.provider.impl

                                 listeners




donderdag 24 maart 2011
µServices


                bundle                             bundle
           com.consumer.impl                  com.provider.impl

                                  listeners



                               “Whiteboard”

donderdag 24 maart 2011
µServices


                bundle                             bundle
           com.consumer.impl                  com.provider.impl

                                  listeners



                               “Whiteboard”

donderdag 24 maart 2011
µServices

                                              bundle
                                               com.
                                           provider.impl

                bundle
           com.consumer.impl
                                              bundle
                                            com.other.
                                               impl




donderdag 24 maart 2011
µServices

                            bundle
                                                      bundle
                             com.
                                                       com.
                          consumer.
                                                   provider.impl
                             impl




                            bundle
                                                      bundle
                          com.other.
                                                    com.other.
                          consumer.
                                                   provider.impl
                             impl




donderdag 24 maart 2011
µServices

                            bundle
                                                      bundle
                             com.




                                         ed
                                                       com.
                          consumer.
                                                   provider.impl
                             impl




                            bundle
                          com.other.
                                       ifi            bundle
                               re
                                                    com.other.
                          consumer.
                                                   provider.impl
                             impl




donderdag 24 maart 2011
Service Specifications
                            condpermadmin        permission admin    measurement
                                  url             service hooks         position
                             bundle hooks          info.dmtree            xml
                              application           blueprint        jpa persistence
                                  cm               component        web applications
                           deployment admin           device             JDBC
                                 event                 http         sca configuration
                                   io                  log              Blueprint
                               metatype              monitor             mobile
                                 prefs             provisioning          tracker
                          remote service admin        UPNP            coordinator
                              user admin           wire admin             jndi
                                 cdma                  gsm            transactions
                                  JMX                                   autoconf

donderdag 24 maart 2011
OSGi
                   •      Next generation of strong modularity in Bundles
                          • Imports and Exports Packages
                          • Extensive support for legacy use cases
                   •      Communicates via µServices
                          •   Dynamic Binding
                          •   Unifies Factories, Listeners, Brokers, DI
                   •      Bundles and Services are all reified with small but powerful API
                   •      Security
                   •      Provides growing library of standard services


donderdag 24 maart 2011
JAX London London
                             jaxlondon.com   11-13 April 2011

donderdag 24 maart 2011
Join us
                                 !
                          JAX London London
                             jaxlondon.com   11-13 April 2011

donderdag 24 maart 2011

More Related Content

Viewers also liked

Field injection, type safe configuration, and more new goodies in Declarative...
Field injection, type safe configuration, and more new goodies in Declarative...Field injection, type safe configuration, and more new goodies in Declarative...
Field injection, type safe configuration, and more new goodies in Declarative...bjhargrave
 
Liferay & Big Data Dev Con 2014
Liferay & Big Data Dev Con 2014Liferay & Big Data Dev Con 2014
Liferay & Big Data Dev Con 2014Miguel Pastor
 
How to manage software complexity with OSGi
How to manage software complexity with OSGiHow to manage software complexity with OSGi
How to manage software complexity with OSGiPeter Kriens
 
Dynamically assembled REST Microservices using JAX-RS and... Microservices? -...
Dynamically assembled REST Microservices using JAX-RS and... Microservices? -...Dynamically assembled REST Microservices using JAX-RS and... Microservices? -...
Dynamically assembled REST Microservices using JAX-RS and... Microservices? -...mfrancis
 
OSGi toolchain from the ground up - Matteo Rulli
OSGi toolchain from the ground up - Matteo RulliOSGi toolchain from the ground up - Matteo Rulli
OSGi toolchain from the ground up - Matteo Rullimfrancis
 
Eclipse + Maven + OSGi has never been so easy - Atllia Kiss
Eclipse + Maven + OSGi has never been so easy - Atllia KissEclipse + Maven + OSGi has never been so easy - Atllia Kiss
Eclipse + Maven + OSGi has never been so easy - Atllia Kissmfrancis
 
Moved to https://slidr.io/azzazzel/software-craftsmanship-in-the-era-of-softw...
Moved to https://slidr.io/azzazzel/software-craftsmanship-in-the-era-of-softw...Moved to https://slidr.io/azzazzel/software-craftsmanship-in-the-era-of-softw...
Moved to https://slidr.io/azzazzel/software-craftsmanship-in-the-era-of-softw...Milen Dyankov
 
WebSockets and Equinox OSGi in a Servlet Container - Nedelcho Delchev
WebSockets and Equinox OSGi in a Servlet Container - Nedelcho DelchevWebSockets and Equinox OSGi in a Servlet Container - Nedelcho Delchev
WebSockets and Equinox OSGi in a Servlet Container - Nedelcho Delchevmfrancis
 
It's beautiful enRoute - Paul Fraser
It's beautiful enRoute - Paul FraserIt's beautiful enRoute - Paul Fraser
It's beautiful enRoute - Paul Frasermfrancis
 
Dockerizing apps for the Deployment Platform of the Month with OSGi - David B...
Dockerizing apps for the Deployment Platform of the Month with OSGi - David B...Dockerizing apps for the Deployment Platform of the Month with OSGi - David B...
Dockerizing apps for the Deployment Platform of the Month with OSGi - David B...mfrancis
 
Microservices and OSGi: Better together?
Microservices and OSGi: Better together?Microservices and OSGi: Better together?
Microservices and OSGi: Better together?Graham Charters
 
Use Case: Building OSGi Enterprise Applications (QCon 14)
Use Case: Building OSGi Enterprise Applications (QCon 14)Use Case: Building OSGi Enterprise Applications (QCon 14)
Use Case: Building OSGi Enterprise Applications (QCon 14)Carsten Ziegeler
 
Moved to https://slidr.io/azzazzel/osgi-for-outsiders
Moved to https://slidr.io/azzazzel/osgi-for-outsidersMoved to https://slidr.io/azzazzel/osgi-for-outsiders
Moved to https://slidr.io/azzazzel/osgi-for-outsidersMilen Dyankov
 
Евгений Бова: "Modularity in Java: introduction to Jigsaw through the prism o...
Евгений Бова: "Modularity in Java: introduction to Jigsaw through the prism o...Евгений Бова: "Modularity in Java: introduction to Jigsaw through the prism o...
Евгений Бова: "Modularity in Java: introduction to Jigsaw through the prism o...Anna Shymchenko
 
Maximize the power of OSGi
Maximize the power of OSGiMaximize the power of OSGi
Maximize the power of OSGiDavid Bosschaert
 
Moved to https://slidr.io/azzazzel/things-you-cannot-do-before-7
Moved to https://slidr.io/azzazzel/things-you-cannot-do-before-7Moved to https://slidr.io/azzazzel/things-you-cannot-do-before-7
Moved to https://slidr.io/azzazzel/things-you-cannot-do-before-7Milen Dyankov
 
Moved to https://slidr.io/azzazzel/business-wins-in-modularity-microservices-...
Moved to https://slidr.io/azzazzel/business-wins-in-modularity-microservices-...Moved to https://slidr.io/azzazzel/business-wins-in-modularity-microservices-...
Moved to https://slidr.io/azzazzel/business-wins-in-modularity-microservices-...Milen Dyankov
 
New and cool in OSGi R7 - David Bosschaert & Carsten Ziegeler
New and cool in OSGi R7 - David Bosschaert & Carsten ZiegelerNew and cool in OSGi R7 - David Bosschaert & Carsten Ziegeler
New and cool in OSGi R7 - David Bosschaert & Carsten Ziegelermfrancis
 
Service oriented web development with OSGi
Service oriented web development with OSGiService oriented web development with OSGi
Service oriented web development with OSGiCarsten Ziegeler
 

Viewers also liked (19)

Field injection, type safe configuration, and more new goodies in Declarative...
Field injection, type safe configuration, and more new goodies in Declarative...Field injection, type safe configuration, and more new goodies in Declarative...
Field injection, type safe configuration, and more new goodies in Declarative...
 
Liferay & Big Data Dev Con 2014
Liferay & Big Data Dev Con 2014Liferay & Big Data Dev Con 2014
Liferay & Big Data Dev Con 2014
 
How to manage software complexity with OSGi
How to manage software complexity with OSGiHow to manage software complexity with OSGi
How to manage software complexity with OSGi
 
Dynamically assembled REST Microservices using JAX-RS and... Microservices? -...
Dynamically assembled REST Microservices using JAX-RS and... Microservices? -...Dynamically assembled REST Microservices using JAX-RS and... Microservices? -...
Dynamically assembled REST Microservices using JAX-RS and... Microservices? -...
 
OSGi toolchain from the ground up - Matteo Rulli
OSGi toolchain from the ground up - Matteo RulliOSGi toolchain from the ground up - Matteo Rulli
OSGi toolchain from the ground up - Matteo Rulli
 
Eclipse + Maven + OSGi has never been so easy - Atllia Kiss
Eclipse + Maven + OSGi has never been so easy - Atllia KissEclipse + Maven + OSGi has never been so easy - Atllia Kiss
Eclipse + Maven + OSGi has never been so easy - Atllia Kiss
 
Moved to https://slidr.io/azzazzel/software-craftsmanship-in-the-era-of-softw...
Moved to https://slidr.io/azzazzel/software-craftsmanship-in-the-era-of-softw...Moved to https://slidr.io/azzazzel/software-craftsmanship-in-the-era-of-softw...
Moved to https://slidr.io/azzazzel/software-craftsmanship-in-the-era-of-softw...
 
WebSockets and Equinox OSGi in a Servlet Container - Nedelcho Delchev
WebSockets and Equinox OSGi in a Servlet Container - Nedelcho DelchevWebSockets and Equinox OSGi in a Servlet Container - Nedelcho Delchev
WebSockets and Equinox OSGi in a Servlet Container - Nedelcho Delchev
 
It's beautiful enRoute - Paul Fraser
It's beautiful enRoute - Paul FraserIt's beautiful enRoute - Paul Fraser
It's beautiful enRoute - Paul Fraser
 
Dockerizing apps for the Deployment Platform of the Month with OSGi - David B...
Dockerizing apps for the Deployment Platform of the Month with OSGi - David B...Dockerizing apps for the Deployment Platform of the Month with OSGi - David B...
Dockerizing apps for the Deployment Platform of the Month with OSGi - David B...
 
Microservices and OSGi: Better together?
Microservices and OSGi: Better together?Microservices and OSGi: Better together?
Microservices and OSGi: Better together?
 
Use Case: Building OSGi Enterprise Applications (QCon 14)
Use Case: Building OSGi Enterprise Applications (QCon 14)Use Case: Building OSGi Enterprise Applications (QCon 14)
Use Case: Building OSGi Enterprise Applications (QCon 14)
 
Moved to https://slidr.io/azzazzel/osgi-for-outsiders
Moved to https://slidr.io/azzazzel/osgi-for-outsidersMoved to https://slidr.io/azzazzel/osgi-for-outsiders
Moved to https://slidr.io/azzazzel/osgi-for-outsiders
 
Евгений Бова: "Modularity in Java: introduction to Jigsaw through the prism o...
Евгений Бова: "Modularity in Java: introduction to Jigsaw through the prism o...Евгений Бова: "Modularity in Java: introduction to Jigsaw through the prism o...
Евгений Бова: "Modularity in Java: introduction to Jigsaw through the prism o...
 
Maximize the power of OSGi
Maximize the power of OSGiMaximize the power of OSGi
Maximize the power of OSGi
 
Moved to https://slidr.io/azzazzel/things-you-cannot-do-before-7
Moved to https://slidr.io/azzazzel/things-you-cannot-do-before-7Moved to https://slidr.io/azzazzel/things-you-cannot-do-before-7
Moved to https://slidr.io/azzazzel/things-you-cannot-do-before-7
 
Moved to https://slidr.io/azzazzel/business-wins-in-modularity-microservices-...
Moved to https://slidr.io/azzazzel/business-wins-in-modularity-microservices-...Moved to https://slidr.io/azzazzel/business-wins-in-modularity-microservices-...
Moved to https://slidr.io/azzazzel/business-wins-in-modularity-microservices-...
 
New and cool in OSGi R7 - David Bosschaert & Carsten Ziegeler
New and cool in OSGi R7 - David Bosschaert & Carsten ZiegelerNew and cool in OSGi R7 - David Bosschaert & Carsten Ziegeler
New and cool in OSGi R7 - David Bosschaert & Carsten Ziegeler
 
Service oriented web development with OSGi
Service oriented web development with OSGiService oriented web development with OSGi
Service oriented web development with OSGi
 

Introduction into OSGi

  • 1. OSGi Introduction By Peter Kriens OSGi Technical Director & Evangelist donderdag 24 maart 2011
  • 3. In the beginnings there were bits ... donderdag 24 maart 2011
  • 4. 0100111100110010000000001111000 0001000010001110010100000010011 Bits 1000100011011111100010001110111 1101101001000010011101000000111 1110000010100000110111000010000 0110110100000001100100010001110 10000001110110 donderdag 24 maart 2011
  • 5. 0100111100110010000000001111000 0001000010001110010100000010011 Bits 1000100011011111100010001110111 1101101001000010011101000000111 1110000010100000110111000010000 0110110100000001100100010001110 10000001110110 donderdag 24 maart 2011
  • 6. 117 062 000 360 041 034 240 116 043 Octal 176 043 276 322 023 240 176 012 015 302 015 240 062 043 240 166 donderdag 24 maart 2011
  • 7. 4F 32 00 F0 21 1C A0 4E 23 7E Hex 23 BE D2 13 A0 7E 0A 0D C2 0D A0 32 23 A0 76 donderdag 24 maart 2011
  • 8. MOV C,A STA F000H LXI H,A01CH MOV C,M INX H Code MOV A,M INX H CMP M JNC A013H MOV A,M DCR C JNZ A00DH STA A023H HLT donderdag 24 maart 2011
  • 9. MOV C,A STA F000H LXI H,A01CH MOV C,M INX H Code MOV A,M INX H CMP M JNC A013H MOV A,M DCR C JNZ A00DH STA A023H HLT donderdag 24 maart 2011
  • 10. Code global = shared; for (local=0; local<10; local++) shared *= 10; donderdag 24 maart 2011
  • 11. Code global = shared; for (local=0; local<10; local++) shared *= 10; donderdag 24 maart 2011
  • 12. int global; int shared; int local; Code global = shared; for (local=0; local<10; local++) shared *= 10; donderdag 24 maart 2011
  • 13. int global; int shared; int local; Functions void foo() { global = shared; for (local=0; local<10; local++) shared *= 10; } donderdag 24 maart 2011
  • 14. int global; int shared; int local; Functions void foo() { global = shared; for (local=0; local<10; local++) shared *= 10; } donderdag 24 maart 2011
  • 15. int global; int shared; int local; Functions void foo() { global = shared; for (local=0; local<10; local++) shared *= 10; } void bar() { global = shared; for (local=0; local<10; local++) shared *= 10; } donderdag 24 maart 2011
  • 16. int global; int shared; void foo() { Functions int local global = shared; for (local=0; local<10; local++) shared *= 10; } void bar() { int local; global = shared; for (local=0; local<10; local++) shared *= 10; } donderdag 24 maart 2011
  • 17. int global; int shared; A Modules void foo() { void bar() { int local int local global = shared; global = shared; for (local=0; for (local=0; local<10; local++) local<10; local++) shared *= 10; shared *= 10; } } B void foo() { void xyz() { int local int local global = shared; global = shared; for (local=0; for (local=0; local<10; local++) local<10; local++) shared *= 10; shared *= 10; } } donderdag 24 maart 2011
  • 18. int global; int shared; A Modules void foo() { void bar() { int local int local global = shared; global = shared; for (local=0; for (local=0; local<10; local++) local<10; local++) shared *= 10; shared *= 10; } } B void foo() { void xyz() { int local int local global = shared; global = shared; for (local=0; for (local=0; local<10; local++) local<10; local++) shared *= 10; shared *= 10; } } donderdag 24 maart 2011
  • 19. int global; A int shared; Modules void foo() { void bar() { int local int local global = shared; global = shared; for (local=0; for (local=0; local<10; local++) local<10; local++) shared *= 10; shared *= 10; } } B int shared; void foo() { void xyz() { int local int local global = shared; global = shared; for (local=0; for (local=0; local<10; local++) local<10; local++) shared *= 10; shared *= 10; } } donderdag 24 maart 2011
  • 20. Class A int shared; void foo() { void bar() { Objects int local int local global = shared; global = shared; for (local=0; for (local=0; local<10; local++) local<10; local++) shared *= 10; shared *= 10; } } Class B int shared; void foo() { void xyz() { int local int local global = shared; global = shared; for (local=0; for (local=0; local<10; local++) local<10; local++) shared *= 10; shared *= 10; } } donderdag 24 maart 2011
  • 21. Class A int shared; void foo() { void bar() { Objects int local int local global = shared; global = shared; for (local=0; for (local=0; local<10; local++) local<10; local++) shared *= 10; shared *= 10; } } Class B int shared; void foo() { void xyz() { int local int local global = shared; global = shared; for (local=0; for (local=0; local<10; local++) local<10; local++) shared *= 10; shared *= 10; } } donderdag 24 maart 2011
  • 22. ces Class A tan Class A Class A ins Class A Class A int shared; void foo() { void bar() { Objects int local int local global = shared; global = shared; for (local=0; for (local=0; local<10; local++) local<10; local++) shared *= 10; shared *= 10; } } Class B int shared; void foo() { void xyz() { int local int local global = shared; global = shared; for (local=0; for (local=0; local<10; local++) local<10; local++) shared *= 10; shared *= 10; } } donderdag 24 maart 2011
  • 23. “Chapter 7 describes the structure of a program which is organized into packages similar to the modules of Modula.” Java Language Specification, 3rd edition donderdag 24 maart 2011
  • 24. “Chapter 7 describes the structure of a program which is organized into packages similar to the modules of Modula.” Java Language Specification, 3rd edition donderdag 24 maart 2011
  • 25. package com.acme.abc Packages Class A int shared; Class B int shared; void foo() { void bar() { void foo() { void xyz() { int local int local int local int local global = shared; global = shared; global = shared; global = shared; for (local=0; for (local=0; for (local=0; for (local=0; local<10; local+ local<10; local+ local<10; local+ local<10; local+ +) +) +) +) shared *= 10; shared *= 10; shared *= 10; shared *= 10; } } } } package com.acme.def Class A int shared; Class C int shared; void foo() { void bar() { void foo() { void xyz() { int local int local int local int local global = shared; global = shared; global = shared; global = shared; for (local=0; for (local=0; for (local=0; for (local=0; local<10; local+ local<10; local+ local<10; local+ local<10; local+ +) +) +) +) shared *= 10; shared *= 10; shared *= 10; shared *= 10; } } } } donderdag 24 maart 2011
  • 26. The Face of Modularity donderdag 24 maart 2011
  • 27. The Face of Modularity donderdag 24 maart 2011
  • 28. Modularity’s Secret • modules have a private space and share a public space A B • modules limit their visibility and exposure C D • From geometric to linear complexity • And something extra ... donderdag 24 maart 2011
  • 29. Modularity’s Secret • modules have a private space and share a public space A B • modules limit their Pub visibility and exposure C D • From geometric to linear complexity • And something extra ... donderdag 24 maart 2011
  • 30. Modularity’s Secret • modules have a private space and share a public space A B • modules limit their Pub visibility and exposure C D • From geometric to linear complexity • And something extra ... donderdag 24 maart 2011
  • 31. JAR abc-1.2.3-SNAPSHOT.jar com.acme.abc com.acme.def Class A int shared; Class B int shared; Class A int shared; Class B int shared; void foo() { void bar() { void foo() { void xyz() { void foo() { void bar() { void foo() { void xyz() { int local int local int local int local int local int local int local int local JARs global = shared; global = shared; global = shared; global = shared; global = shared; global = shared; global = shared; global = shared; for (local=0; for (local=0; for (local=0; for (local=0; for (local=0; for (local=0; for (local=0; for (local=0; local<10; local local<10; local local<10; local local<10; local local<10; local local<10; local local<10; local local<10; local ++) ++) ++) ++) ++) ++) ++) ++) shared *= 10; shared *= 10; shared *= 10; shared *= 10; shared *= 10; shared *= 10; shared *= 10; shared *= 10; } } } } } } } } JAR def-4.5.6.jar com.acme.abc com.acme.ghi Class A int shared; Class B int shared; Class A int shared; Class B int shared; void foo() { void bar() { void foo() { void xyz() { void foo() { void bar() { void foo() { void xyz() { int local int local int local int local int local int local int local int local global = shared; global = shared; global = shared; global = shared; global = shared; global = shared; global = shared; global = shared; for (local=0; for (local=0; for (local=0; for (local=0; for (local=0; for (local=0; for (local=0; for (local=0; local<10; local local<10; local local<10; local local<10; local local<10; local local<10; local local<10; local local<10; local ++) ++) ++) ++) ++) ++) ++) ++) shared *= 10; shared *= 10; shared *= 10; shared *= 10; shared *= 10; shared *= 10; shared *= 10; shared *= 10; } } } } } } } } donderdag 24 maart 2011
  • 32. JAR abc-1.2.3-SNAPSHOT.jar com.acme.abc com.acme.def Class A int shared; Class B int shared; Class A int shared; Class B int shared; void foo() { void bar() { void foo() { void xyz() { void foo() { void bar() { void foo() { void xyz() { int local int local int local int local int local int local int local int local JARs global = shared; global = shared; global = shared; global = shared; global = shared; global = shared; global = shared; global = shared; for (local=0; for (local=0; for (local=0; for (local=0; for (local=0; for (local=0; for (local=0; for (local=0; local<10; local local<10; local local<10; local local<10; local local<10; local local<10; local local<10; local local<10; local ++) ++) ++) ++) ++) ++) ++) ++) shared *= 10; shared *= 10; shared *= 10; shared *= 10; shared *= 10; shared *= 10; shared *= 10; shared *= 10; } } } } } } } } JAR def-4.5.6.jar com.acme.abc com.acme.ghi Class A int shared; Class B int shared; Class A int shared; Class B int shared; void foo() { void bar() { void foo() { void xyz() { void foo() { void bar() { void foo() { void xyz() { int local int local int local int local int local int local int local int local global = shared; global = shared; global = shared; global = shared; global = shared; global = shared; global = shared; global = shared; for (local=0; for (local=0; for (local=0; for (local=0; for (local=0; for (local=0; for (local=0; for (local=0; local<10; local local<10; local local<10; local local<10; local local<10; local local<10; local local<10; local local<10; local ++) ++) ++) ++) ++) ++) ++) ++) shared *= 10; shared *= 10; shared *= 10; shared *= 10; shared *= 10; shared *= 10; shared *= 10; shared *= 10; } } } } } } } } donderdag 24 maart 2011
  • 33. Java VM party common resolver axis xerces Begin rt assetmaint catalina mail ezmorph xmlapis jce hhfacility base jenks servlets xmlrpc Here jsse pos. datafile jakarta jetty xmlgraphics plugin content entity log4j looks sunjce_prov. manufact. widget httpunit jdbm dnsns product … mx4j bsf .. bi rome batik bsh marketing workflow jpos18 fop velocity workeffort ecommerce jcl tomcat ws-commons ebay oagis barcode4j poi geronimo minerva … freemarker lucene .. minilang googlebase serializer jdom json accounting order naming commons xalan guiapp ofbiz jython derby wsdl4j donderdag 24 maart 2011
  • 34. Java VM party common resolver axis xerces Begin rt assetmaint catalina mail ezmorph xmlapis jce hhfacility base jenks servlets xmlrpc Here jsse pos. datafile jakarta jetty xmlgraphics plugin content entity log4j looks sunjce_prov. manufact. widget httpunit jdbm dnsns product … mx4j bsf .. bi rome batik bsh Class marketing workflow jpos18 fop velocity Not workeffort ecommerce jcl tomcat ws-commons Found ebay oagis barcode4j poi geronimo Exception minerva … freemarker lucene .. minilang googlebase serializer jdom json accounting order naming commons xalan guiapp ofbiz jython derby wsdl4j donderdag 24 maart 2011
  • 35. bundle com.acme.abc-1.2.3 package com.acme.abc package com.acme.def Bundles Class A int shared; Class B int shared; Class A int shared; Class B int shared; void foo() { void bar() { void foo() { void xyz() { void foo() { void bar() { void foo() { void xyz() { int local int local int local int local int local int local int local int local global = shared; global = shared; global = shared; global = shared; global = shared; global = shared; global = shared; global = shared; for (local=0; for (local=0; for (local=0; for (local=0; for (local=0; for (local=0; for (local=0; for (local=0; local<10; local local<10; local local<10; local local<10; local local<10; local local<10; local local<10; local local<10; local ++) ++) ++) ++) ++) ++) ++) ++) shared *= 10; shared *= 10; shared *= 10; shared *= 10; shared *= 10; shared *= 10; shared *= 10; shared *= 10; } } } } } } } } bundle com.acme.def-9.9.1 package com.acme.abc package com.acme.ghi Class A int shared; Class B int shared; Class A int shared; Class B int shared; void foo() { void bar() { void foo() { void xyz() { void foo() { void bar() { void foo() { void xyz() { int local int local int local int local int local int local int local int local global = shared; global = shared; global = shared; global = shared; global = shared; global = shared; global = shared; global = shared; for (local=0; for (local=0; for (local=0; for (local=0; for (local=0; for (local=0; for (local=0; for (local=0; local<10; local local<10; local local<10; local local<10; local local<10; local local<10; local local<10; local local<10; local ++) ++) ++) ++) ++) ++) ++) ++) shared *= 10; shared *= 10; shared *= 10; shared *= 10; shared *= 10; shared *= 10; shared *= 10; shared *= 10; } } } } } } } } donderdag 24 maart 2011
  • 36. bundle com.acme.abc-1.2.3 package com.acme.abc package com.acme.def Bundles Class A int shared; Class B int shared; Class A int shared; Class B int shared; Private Exported void foo() { void bar() { void foo() { void xyz() { void foo() { void bar() { void foo() { void xyz() { int local int local int local int local int local int local int local int local global = shared; global = shared; global = shared; global = shared; global = shared; global = shared; global = shared; global = shared; for (local=0; for (local=0; for (local=0; for (local=0; for (local=0; for (local=0; for (local=0; for (local=0; local<10; local local<10; local local<10; local local<10; local local<10; local local<10; local local<10; local local<10; local ++) ++) ++) ++) ++) ++) ++) ++) shared *= 10; shared *= 10; shared *= 10; shared *= 10; shared *= 10; shared *= 10; shared *= 10; shared *= 10; } } } } } } } } bundle com.acme.def-9.9.1 package com.acme.abc package com.acme.ghi Class A int shared; Class B int shared; Class A int shared; Class B int shared; Private Exported void foo() { void bar() { void foo() { void xyz() { void foo() { void bar() { void foo() { void xyz() { int local int local int local int local int local int local int local int local global = shared; global = shared; global = shared; global = shared; global = shared; global = shared; global = shared; global = shared; for (local=0; for (local=0; for (local=0; for (local=0; for (local=0; for (local=0; for (local=0; for (local=0; local<10; local local<10; local local<10; local local<10; local local<10; local local<10; local local<10; local local<10; local ++) ++) ++) ++) ++) ++) ++) ++) shared *= 10; shared *= 10; shared *= 10; shared *= 10; shared *= 10; shared *= 10; shared *= 10; shared *= 10; } } } } } } } } donderdag 24 maart 2011
  • 37. bundle com.acme.abc-1.2.3 package com.acme.abc package com.acme.def Bundles Class A int shared; Class B int shared; Class A int shared; Class B int shared; Private Exported void foo() { void bar() { void foo() { void xyz() { void foo() { void bar() { void foo() { void xyz() { int local int local int local int local int local int local int local int local global = shared; global = shared; global = shared; global = shared; global = shared; global = shared; global = shared; global = shared; for (local=0; for (local=0; for (local=0; for (local=0; for (local=0; for (local=0; for (local=0; for (local=0; local<10; local local<10; local local<10; local local<10; local local<10; local local<10; local local<10; local local<10; local ++) ++) ++) ++) ++) ++) ++) ++) shared *= 10; shared *= 10; shared *= 10; shared *= 10; shared *= 10; shared *= 10; shared *= 10; shared *= 10; } } } } } } } } bundle com.acme.def-9.9.1 package com.acme.abc package com.acme.ghi Class A int shared; Class B int shared; Class A int shared; Class B int shared; Private Exported void foo() { void bar() { void foo() { void xyz() { void foo() { void bar() { void foo() { void xyz() { int local int local int local int local int local int local int local int local global = shared; global = shared; global = shared; global = shared; global = shared; global = shared; global = shared; global = shared; for (local=0; for (local=0; for (local=0; for (local=0; for (local=0; for (local=0; for (local=0; for (local=0; local<10; local local<10; local local<10; local local<10; local local<10; local local<10; local local<10; local local<10; local ++) ++) ++) ++) ++) ++) ++) ++) shared *= 10; shared *= 10; shared *= 10; shared *= 10; shared *= 10; shared *= 10; shared *= 10; shared *= 10; } } } } } } } } donderdag 24 maart 2011
  • 38. bundle com.acme.abc-1.2.3 package com.acme.abc package com.acme.def Bundles Class A int shared; Class B int shared; Class A int shared; Class B int shared; Private Exported void foo() { void bar() { void foo() { void xyz() { void foo() { void bar() { void foo() { void xyz() { int local int local int local int local int local int local int local int local global = shared; global = shared; global = shared; global = shared; global = shared; global = shared; global = shared; global = shared; for (local=0; for (local=0; for (local=0; for (local=0; for (local=0; for (local=0; for (local=0; for (local=0; local<10; local local<10; local local<10; local local<10; local local<10; local local<10; local local<10; local local<10; local ++) ++) ++) ++) ++) ++) ++) ++) shared *= 10; shared *= 10; shared *= 10; shared *= 10; shared *= 10; shared *= 10; shared *= 10; shared *= 10; } } } } } } } } bundle com.acme.def-9.9.1 package com.acme.abc package com.acme.ghi Class A int shared; Class B int shared; Class A int shared; Class B int shared; Private Exported void foo() { void bar() { void foo() { void xyz() { void foo() { void bar() { void foo() { void xyz() { int local int local int local int local int local int local int local int local global = shared; global = shared; global = shared; global = shared; global = shared; global = shared; global = shared; global = shared; for (local=0; for (local=0; for (local=0; for (local=0; for (local=0; for (local=0; for (local=0; for (local=0; local<10; local local<10; local local<10; local local<10; local local<10; local local<10; local local<10; local local<10; local ++) ++) ++) ++) ++) ++) ++) ++) shared *= 10; shared *= 10; shared *= 10; shared *= 10; shared *= 10; shared *= 10; shared *= 10; shared *= 10; } } } } } } } } donderdag 24 maart 2011
  • 39. bundle com.acme.abc-1.2.3 package com.acme.abc package com.acme.def Bundles Class A int shared; Class B int shared; Class A int shared; Class B int shared; Private Exported void foo() { void bar() { void foo() { void xyz() { void foo() { void bar() { void foo() { void xyz() { int local int local int local int local int local int local int local int local global = shared; global = shared; global = shared; global = shared; global = shared; global = shared; global = shared; global = shared; for (local=0; for (local=0; for (local=0; for (local=0; for (local=0; for (local=0; for (local=0; for (local=0; local<10; local local<10; local local<10; local local<10; local local<10; local local<10; local local<10; local local<10; local ++) ++) ++) ++) ++) ++) ++) ++) shared *= 10; shared *= 10; shared *= 10; shared *= 10; shared *= 10; shared *= 10; shared *= 10; shared *= 10; } } } } } } } } X bundle com.acme.def-9.9.1 package com.acme.abc package com.acme.ghi Class A int shared; Class B int shared; Class A int shared; Class B int shared; Private Exported void foo() { void bar() { void foo() { void xyz() { void foo() { void bar() { void foo() { void xyz() { int local int local int local int local int local int local int local int local global = shared; global = shared; global = shared; global = shared; global = shared; global = shared; global = shared; global = shared; for (local=0; for (local=0; for (local=0; for (local=0; for (local=0; for (local=0; for (local=0; for (local=0; local<10; local local<10; local local<10; local local<10; local local<10; local local<10; local local<10; local local<10; local ++) ++) ++) ++) ++) ++) ++) ++) shared *= 10; shared *= 10; shared *= 10; shared *= 10; shared *= 10; shared *= 10; shared *= 10; shared *= 10; } } } } } } } } donderdag 24 maart 2011
  • 40. Manifest Manifest-Version: 1 Bundle-ManifestVersion: 2 Bundle-SymbolicName: com.acme.bundle Bundle-Version: 1.2.3.v201103221001 Import-Package: javax.activation, javax.persistence, org.osgi.framework;version=”[1.3,2)” Export-Package: com.acme.bundle.service;version=2.3, com.acme.api; version=45.2 Bundle-License: http://www.apache.org/license/ASL2.0.txt Tool: bnd-1.43.0 donderdag 24 maart 2011
  • 41. Manifest Manifest-Version: 1 Bundle-ManifestVersion: 2 Bundle-SymbolicName: com.acme.bundle Bundle-Version: 1.2.3.v201103221001 Import-Package: d javax.activation, javax.persistence, org.osgi.framework;version=”[1.3,2)” bn Export-Package: com.acme.bundle.service;version=2.3, com.acme.api; version=45.2 Bundle-License: http://www.apache.org/license/ASL2.0.txt Tool: bnd-1.43.0 donderdag 24 maart 2011
  • 42. bundle com.acme.abc-1.2.3 package com.acme.abc package com.acme.def Bundles Class A int shared; Class B int shared; Class A int shared; Class B int shared; void foo() { void bar() { void foo() { void xyz() { void foo() { void bar() { void foo() { void xyz() { int local int local int local int local int local int local int local int local global = shared; global = shared; global = shared; global = shared; global = shared; global = shared; global = shared; global = shared; for (local=0; for (local=0; for (local=0; for (local=0; for (local=0; for (local=0; for (local=0; for (local=0; local<10; local local<10; local local<10; local local<10; local local<10; local local<10; local local<10; local local<10; local ++) ++) ++) ++) ++) ++) ++) ++) shared *= 10; shared *= 10; shared *= 10; shared *= 10; shared *= 10; shared *= 10; shared *= 10; shared *= 10; } } } } } } } } bundle com.acme.def-9.9.1 package com.acme.abc package com.acme.ghi Class A int shared; Class B int shared; Class A int shared; Class B int shared; void foo() { void bar() { void foo() { void xyz() { void foo() { void bar() { void foo() { void xyz() { int local int local int local int local int local int local int local int local global = shared; global = shared; global = shared; global = shared; global = shared; global = shared; global = shared; global = shared; for (local=0; for (local=0; for (local=0; for (local=0; for (local=0; for (local=0; for (local=0; for (local=0; local<10; local local<10; local local<10; local local<10; local local<10; local local<10; local local<10; local local<10; local ++) ++) ++) ++) ++) ++) ++) ++) shared *= 10; shared *= 10; shared *= 10; shared *= 10; shared *= 10; shared *= 10; shared *= 10; shared *= 10; } } } } } } } } donderdag 24 maart 2011
  • 43. bundle com.acme.abc-1.2.3 Bundles bundle com.acme.def-9.9.1 donderdag 24 maart 2011
  • 44. bundle com.acme.abc-1.2.3 Bundles ed ifi bundle com.acme.def-9.9.1 re donderdag 24 maart 2011
  • 45. POJO Programming is Best Practice donderdag 24 maart 2011
  • 46. Interfaces/API Consumer Provider Interface Class Class donderdag 24 maart 2011
  • 47. Interfaces/API package com.consumer.impl package com.api package com.provider.impl Consumer Provider Interface Class Class donderdag 24 maart 2011
  • 48. Interfaces/API package com.consumer.impl package com.api package com.provider.impl Consumer Provider Interface Class Class Your App donderdag 24 maart 2011
  • 49. Interfaces/API package com.consumer.impl package com.api package com.provider.impl Consumer Provider Interface Class Class Your App DocumentBuilder donderdag 24 maart 2011
  • 50. Interfaces/API package com.consumer.impl package com.api package com.provider.impl Consumer Provider Interface Class Class Your App DocumentBuilder Xerces donderdag 24 maart 2011
  • 51. Access to Implementations package com.consumer.impl package com.api package com.provider.impl Consumer Provider Interface Class Class donderdag 24 maart 2011
  • 52. Access to Implementations package com.consumer.impl package com.api package com.provider.impl Consumer Provider Interface Class Class donderdag 24 maart 2011
  • 53. Access to Implementations package com.consumer.impl package com.api package com.provider.impl te Consumer Provider Interface iva Class Class donderdag 24 maart 2011 pr
  • 54. Access to Implementations package com.consumer.impl com.consumer.impl package com.api com.api package com.provider.impl com.provider.impl Consumer Con- Provider Interface Provider sumer Class Class donderdag 24 maart 2011
  • 56. µServices package com.api specifies donderdag 24 maart 2011
  • 57. µServices package com.api bundle com.provider.impl specifies donderdag 24 maart 2011
  • 58. µServices package com.api bundle com.provider.impl specifies provides donderdag 24 maart 2011
  • 59. µServices package com.api bundle bundle com.consumer.impl com.provider.impl specifies provides donderdag 24 maart 2011
  • 60. µServices package com.api bundle bundle com.consumer.impl com.provider.impl refers specifies provides donderdag 24 maart 2011
  • 61. Trivial To Use With DS package com.consumer.impl; @Component public class Consumer { Interface service; @Activate void begin(); @Reference void setLog( Interface service) { this.service = service; } } package com.provider.impl; @Component public class Provider implements Interface { public void method() { … // do something } } donderdag 24 maart 2011
  • 62. µServices factory bundle bundle com.consumer.impl com.provider.impl donderdag 24 maart 2011
  • 63. µServices bundle bundle com.consumer.impl com.provider.impl listeners donderdag 24 maart 2011
  • 64. µServices bundle bundle com.consumer.impl com.provider.impl listeners “Whiteboard” donderdag 24 maart 2011
  • 65. µServices bundle bundle com.consumer.impl com.provider.impl listeners “Whiteboard” donderdag 24 maart 2011
  • 66. µServices bundle com. provider.impl bundle com.consumer.impl bundle com.other. impl donderdag 24 maart 2011
  • 67. µServices bundle bundle com. com. consumer. provider.impl impl bundle bundle com.other. com.other. consumer. provider.impl impl donderdag 24 maart 2011
  • 68. µServices bundle bundle com. ed com. consumer. provider.impl impl bundle com.other. ifi bundle re com.other. consumer. provider.impl impl donderdag 24 maart 2011
  • 69. Service Specifications condpermadmin permission admin measurement url service hooks position bundle hooks info.dmtree xml application blueprint jpa persistence cm component web applications deployment admin device JDBC event http sca configuration io log Blueprint metatype monitor mobile prefs provisioning tracker remote service admin UPNP coordinator user admin wire admin jndi cdma gsm transactions JMX autoconf donderdag 24 maart 2011
  • 70. OSGi • Next generation of strong modularity in Bundles • Imports and Exports Packages • Extensive support for legacy use cases • Communicates via µServices • Dynamic Binding • Unifies Factories, Listeners, Brokers, DI • Bundles and Services are all reified with small but powerful API • Security • Provides growing library of standard services donderdag 24 maart 2011
  • 71. JAX London London jaxlondon.com 11-13 April 2011 donderdag 24 maart 2011
  • 72. Join us ! JAX London London jaxlondon.com 11-13 April 2011 donderdag 24 maart 2011