SlideShare a Scribd company logo
1
Plugins 2 and OSGi Gotchas
Or: How I learned to stop worrying and love Apache Felix




John Kodumal
 Atlassian Developer




                                                           2
                                                               2
Agenda
• Background
• OSGi Primer
• Protips
 1. Be the master of your manifest
 2. Manage your dependencies
 3. Earn a brown belt in OSGi classloading
 4. Buddy up with the Felix web console
 5. Know what the applications provide



                                             3
                                                 3
OSGi from 10,000 feet


                                Services
         Bundles
                                Lifecycle

                                Modules

                   Execution Environment



                                            4
                                                4
OSGi Benefits




               5
                   5
Migrate to Plugins 2.0


                         • Convert plugin to plugins 2
                           •   http://confluence.atlassian.com/x/bwLvCw

                         • Convert plugin project to SDK
                           •   http://confluence.atlassian.com/x/wRyyCg




                                                                         6
                                                                             6
OSGi as a black box?


      The Atlassian Plugin Framework 2 tries to hide the complexity of OSGi as
      much as possible...
      If you are familiar with OSGi and want to provide an OSGi bundle directly in
      order to leverage all its features, you are free to do so.

      http://confluence.atlassian.com/x/DIBiCg




                                                                                     7
                                                                                         7
OSGi as a black box?
      OSGi
      Knowledge

                                                             crazy plugins
                                                               (dashboards)




                  simple plugins
                     (gadgets)




                                   sweet spot




                                                Plugin
                                                Complexity



                                                                              8
                                                                                  8
Agenda
• Background
• OSGi Primer
• Protips
 1. Be the master of your manifest
 2. Manage your dependencies
 3. Earn a brown belt in OSGi classloading
 4. Buddy up with the Felix web console
 5. Know what the applications provide



                                             9
                                                 9
OSGi Concepts




                10
                 10
Anatomy of an OSGi Bundle


  Package Exports
                      OSGi Bundle
                              Manifest
                              Activator
                              Services
                    Private Classloader
                      Private Packages
                                          Package Imports




                                                            11
                                                             11
How Bundles Interact


         your plugin                                google collections 1.0


                       com.google.collect v1.0




                                             Wire




                                                                             12
                                                                              12
Agenda
• Background
• Overview of OSGi
• Protips
 1. Be the master of your manifest
 2. Manage your dependencies
 3. Earn a brown belt in OSGi classloading
 4. Buddy up with the Felix web console
 5. Know what the applications provide



                                             13
                                              13
#1 Be the master of your manifest

               Manifest-Version: 1.0
               Created-By: 1.5.0_19 (Apple Inc.)
               Bundle-Name: gdata-service-plugin
               Bundle-SymbolicName: com.atlassian.agmp.gdata-service-plugin
               Bundle-Description: This is the com.atlassian.agmp:gdata-service-plugin plugin for Atlassian Refapp.
               Bundle-ClassPath: .,META-INF/lib/commons-lang-2.4.jar,META-INF/lib/joda-time-1.6.jar
               Import-Package: com.atlassian.agmp.integration.common;version="0.0.0",
               com.atlassian.templaterenderer.annotations;version="0.0.0",com.atlassian.templaterenderer.velocity.one.six;version="0.0.0",c
               om.google.common.base;version="0.0.0",com.google.gdata.client;version="1.40.1",com.google.gdata.client.authn.oauth;versi
               on="1.40.1",com.google.gdata.client.calendar;version="1.40.1",com.google.gdata.client.docs;version="1.40.1",com.google.gd
    Bundle-Name: gdata-service-plugin
               ata.client.media;version="1.40.1",com.google.gdata.data;version="1.40.1",com.google.gdata.data.calendar;version="1.40.1",c
    Bundle-SymbolicName: com.atlassian.agmp.gdata-service-plugin
               om.google.gdata.data.docs;version="1.40.1",com.google.gdata.data.media;version="1.40.1",com.google.gdata.util;version="1
               .40.1",com.google.gdata.util.common.base;version="1.40.1",com.google.gdata.util.common.xml;version="1.40.1",javax.servlet
    Bundle-Description: This is the com.atlassian.agmp:gdata-service-plugin plugin for Atlassian Refapp.
               ;version="0.0.0",javax.servlet.http;version="0.0.0",org.apache.commons.io;version="1.3",org.apache.log4j;version="0.0.0",org.
               springframework.beans.factory.annotation;version="0.0.0"
               Export-Package: com.atlassian.agmp.gdata;uses:="com.google.gdata.util";version="1.1.4.SNAPSHOT"
               Bundle-Version: 1.1.4.SNAPSHOT
               Bundle-DocURL: http://www.atlassian.com/
               Bundle-Vendor: Atlassian
               Bundle-ManifestVersion: 2
               Tool: Bnd-0.0.311




                                                                                                                                               14
                                                                                                                                                14
#1 Be the master of your manifest

               Manifest-Version: 1.0
               Created-By: 1.5.0_19 (Apple Inc.)
               Bundle-Name: gdata-service-plugin
               Bundle-SymbolicName: com.atlassian.agmp.gdata-service-plugin
               Bundle-Description: This is the com.atlassian.agmp:gdata-service-plugin plugin for Atlassian Refapp.
               Bundle-ClassPath: .,META-INF/lib/commons-lang-2.4.jar,META-INF/lib/joda-time-1.6.jar
               Import-Package: com.atlassian.agmp.integration.common;version="0.0.0",
               com.atlassian.templaterenderer.annotations;version="0.0.0",com.atlassian.templaterenderer.velocity.one.six;version="0.0.0",c
               om.google.common.base;version="0.0.0",com.google.gdata.client;version="1.40.1",com.google.gdata.client.authn.oauth;versi
               on="1.40.1",com.google.gdata.client.calendar;version="1.40.1",com.google.gdata.client.docs;version="1.40.1",com.google.gd
    Bundle-ClassPath: .,META-INF/lib/commons-lang-2.4.jar,META-INF/lib/joda-time-1.6.jar
               ata.client.media;version="1.40.1",com.google.gdata.data;version="1.40.1",com.google.gdata.data.calendar;version="1.40.1",c
               om.google.gdata.data.docs;version="1.40.1",com.google.gdata.data.media;version="1.40.1",com.google.gdata.util;version="1
               .40.1",com.google.gdata.util.common.base;version="1.40.1",com.google.gdata.util.common.xml;version="1.40.1",javax.servlet
               ;version="0.0.0",javax.servlet.http;version="0.0.0",org.apache.commons.io;version="1.3",org.apache.log4j;version="0.0.0",org.
               springframework.beans.factory.annotation;version="0.0.0"
               Export-Package: com.atlassian.agmp.gdata;uses:="com.google.gdata.util";version="1.1.4.SNAPSHOT"
               Bundle-Version: 1.1.4.SNAPSHOT
               Bundle-DocURL: http://www.atlassian.com/
               Bundle-Vendor: Atlassian
               Bundle-ManifestVersion: 2
               Tool: Bnd-0.0.311




                                                                                                                                               15
                                                                                                                                                15
#1 Be the master of your manifest

                     Manifest-Version: 1.0
                     Created-By: 1.5.0_19 (Apple Inc.)
                     Bundle-Name: gdata-service-plugin
                     Bundle-SymbolicName: com.atlassian.agmp.gdata-service-plugin
  Import-Package: Bundle-Description: This is the com.atlassian.agmp:gdata-service-plugin plugin for Atlassian Refapp.
                      com.atlassian.agmp.integration.common;version="0.0.0",
                     Bundle-ClassPath: .,META-INF/lib/commons-lang-2.4.jar,META-INF/lib/joda-time-1.6.jar
  com.atlassian.templaterenderer.annotations;version="0.0.0",com.atlassian.templaterenderer.velocity.
                     Import-Package: com.atlassian.agmp.integration.common;version="0.0.0",
  one.six;version="0.0.0",com.google.common.base;version="0.0.0",com.google.gdata.client;version="
                     com.atlassian.templaterenderer.annotations;version="0.0.0",com.atlassian.templaterenderer.velocity.one.six;version="0.0.0",c
                     om.google.common.base;version="0.0.0",com.google.gdata.client;version="1.40.1",com.google.gdata.client.authn.oauth;versi
  1.40.1",com.google.gdata.client.authn.oauth;version="1.40.1",com.google.gdata.client.calendar;versi
                     on="1.40.1",com.google.gdata.client.calendar;version="1.40.1",com.google.gdata.client.docs;version="1.40.1",com.google.gd
                     ata.client.media;version="1.40.1",com.google.gdata.data;version="1.40.1",com.google.gdata.data.calendar;version="1.40.1",c
  on="1.40.1",com.google.gdata.client.docs;version="1.40.1",com.google.gdata.client.media;version="
                     om.google.gdata.data.docs;version="1.40.1",com.google.gdata.data.media;version="1.40.1",com.google.gdata.util;version="1
  1.40.1",com.google.gdata.data;version="1.40.1",com.google.gdata.data.calendar;version="1.40.1",co
                     .40.1",com.google.gdata.util.common.base;version="1.40.1",com.google.gdata.util.common.xml;version="1.40.1",javax.servlet
                     ;version="0.0.0",javax.servlet.http;version="0.0.0",org.apache.commons.io;version="1.3",org.apache.log4j;version="0.0.0",org.
  m.google.gdata.data.docs;version="1.40.1",com.google.gdata.data.media;version="1.40.1",com.goo
                     springframework.beans.factory.annotation;version="0.0.0"
                     Export-Package: com.atlassian.agmp.gdata;uses:="com.google.gdata.util";version="1.1.4.SNAPSHOT"
  gle.gdata.util;version="1.40.1",com.google.gdata.util.common.base;version="1.40.1",com.google.gda
                     Bundle-Version: 1.1.4.SNAPSHOT
  ta.util.common.xml;version="1.40.1",javax.servlet;version="0.0.0",javax.servlet.http;version="0.0.0",o
                     Bundle-DocURL: http://www.atlassian.com/
                     Bundle-Vendor: Atlassian
  rg.apache.commons.io;version="1.3",org.apache.log4j;version="0.0.0",org.springframework.beans.fa
                     Bundle-ManifestVersion: 2
                     Tool: Bnd-0.0.311
  ctory.annotation;version="0.0.0"




                                                                                                                                                     16
                                                                                                                                                      16
#1 Be the master of your manifest

               Manifest-Version: 1.0
               Created-By: 1.5.0_19 (Apple Inc.)
               Bundle-Name: gdata-service-plugin
               Bundle-SymbolicName: com.atlassian.agmp.gdata-service-plugin
               Bundle-Description: This is the com.atlassian.agmp:gdata-service-plugin plugin for Atlassian Refapp.
               Bundle-ClassPath: .,META-INF/lib/commons-lang-2.4.jar,META-INF/lib/joda-time-1.6.jar
               Import-Package: com.atlassian.agmp.integration.common;version="0.0.0",
               com.atlassian.templaterenderer.annotations;version="0.0.0",com.atlassian.templaterenderer.velocity.one.six;version="0.0.0",c
               om.google.common.base;version="0.0.0",com.google.gdata.client;version="1.40.1",com.google.gdata.client.authn.oauth;versi
               on="1.40.1",com.google.gdata.client.calendar;version="1.40.1",com.google.gdata.client.docs;version="1.40.1",com.google.gd
    Export-Package: com.atlassian.agmp.gdata;uses:="com.google.gdata.util";version="1.1.4.SNAPSHOT"
               ata.client.media;version="1.40.1",com.google.gdata.data;version="1.40.1",com.google.gdata.data.calendar;version="1.40.1",c
               om.google.gdata.data.docs;version="1.40.1",com.google.gdata.data.media;version="1.40.1",com.google.gdata.util;version="1
               .40.1",com.google.gdata.util.common.base;version="1.40.1",com.google.gdata.util.common.xml;version="1.40.1",javax.servlet
               ;version="0.0.0",javax.servlet.http;version="0.0.0",org.apache.commons.io;version="1.3",org.apache.log4j;version="0.0.0",org.
               springframework.beans.factory.annotation;version="0.0.0"
               Export-Package: com.atlassian.agmp.gdata;uses:="com.google.gdata.util";version="1.1.4.SNAPSHOT"
               Bundle-Version: 1.1.4.SNAPSHOT
               Bundle-DocURL: http://www.atlassian.com/
               Bundle-Vendor: Atlassian
               Bundle-ManifestVersion: 2
               Tool: Bnd-0.0.311




                                                                                                                                               17
                                                                                                                                                17
#1 Be the master of your manifest

                       <build>
                             <plugins>
                                  <plugin>
                                       <groupId>com.atlassian.maven.plugins</groupId>
        <instructions>                 <artifactId>maven-refapp-plugin</artifactId>
                   <Import-Package>    <version>3.0.2</version>
                                       <extensions>true</extensions>
                      javax.servlet*;version="0.0.0",
                                       <configuration>
                      org.apache.commons.io;version="1.3",
                                         <productVersion>${refapp.version}</productVersion>
                    com.atlassian.agmp.integration.common*;version="0.0.0",
                                         <instructions>
                                             <Import-Package>
                    com.google.gdata*;version="1.40.1",
                                                javax.servlet*;version="0.0.0",
                    com.google.common*;version="0.0.0",
                                                org.apache.commons.io;version="1.3",
                    org.springframework.beans*;version="0.0.0",
                                                com.atlassian.agmp.integration.common*;version="0.0.0",
                                                com.google.gdata*;version="1.40.1",
                    com.atlassian.templaterenderer.*;version="0.0.0",
                                                com.google.common*;version="0.0.0",
                    org.apache.log4j*;version="0.0.0"
                                                org.springframework.beans*;version="0.0.0",
                   </Import-Package> com.atlassian.templaterenderer.*;version="0.0.0",
                 <Export-Package>               org.apache.log4j*;version="0.0.0"
                                             </Import-Package>
                        com.atlassian.agmp.gdata
                                             <Export-Package>
                   </Export-Package> com.atlassian.agmp.gdata
        <instructions>                       </Export-Package>
                                         </instructions>
                                  </plugin>
                             …
                       </build>


                                                                                                          18
                                                                                                           18
#2 Manage your dependencies
• Prefer Import-Package dependencies over Require-Bundle




                         vs.




       Import-Package              Require-Bundle



                                                           19
                                                            19
#2 Manage your dependencies
• Prefer Import-Package dependencies over Bundle-Classpath




                         vs.




       Import-Package              Bundle-Classpath



                                                             20
                                                              20
#2 Manage your dependencies
• Always specify package versions for imports and exports
 • Versions are specified in <major>.<minor>.<micro>.<qualifier> form
 • Bundle constraints use interval range notation
     • e.g. “[1.0.0, 2.0.0 )”
 • A missing upper bound denotes infinity
     • So version=“1.0.0” really means version >= “1.0.0”
     • version=“0.0.0” means “any version”
     • Thatʼs right! OSGi has redefined equals to mean greater than. Top notch!
 • Put version constraints in quotes




                                                                                 21
                                                                                  21
#2 Manage your dependencies
• Run mvn:dependency-tree and scan your dependencies manually
    • Use the maven dependency tracker plugin if youʼre paranoid
       • https://labs.atlassian.com/browse/MAP

•




                                                                   22
                                                                    22
#3 Earn a brown belt in OSGi classloading

        Start



                      Delegate to parent       found?
       java.*?
                         classloader



        boot          Delegate to parent       found?
                         classloader




       package-                                found?
        import?    Delegate to wire exporter




        bundle                                 found?
      classpath?

                                                        23
                                                         23
#3 Earn a brown belt in OSGi classloading
• Boot delegated packages cannot be overridden
 • Even with packages in your bundle classpath!

• Plugins 2.x boot delegates several packages
 • Packages for profiling tools (e.g. com.yourkit)
 • And xerces




                                                    24
                                                     24
#4 Buddy up with the Felix web console

         • http://${baseURL}/plugins/servlet/system/console
         • username : admin
         • password : admin




                                                              25
                                                               25
#4 Or try the OSGi Explorer plugin

              https://plugins.atlassian.com/plugin/details/23455




                                                                   26
                                                                    26
#5 Know what the applications provide

                                                           ion
                        aseURL}/admin/p luginexports.act
           http://${b




                                                                 27
                                                                  27
#5 Know what the applications provide

         • http://${ baseURL}/plugins/servlet/system/console
         • username : admin
         • password : admin




                                                               28
                                                                28
Recap
• Background
• OSGi Primer
• Protips
 1. Be the master of your manifest
 2. Manage your dependencies
 3. Earn a brown belt in OSGi classloading
 4. Buddy up with the Felix web console
 5. Know what the applications provide



                                             29
                                              29
Resources
• Convert plugin to plugins 2
 • http://confluence.atlassian.com/x/bwLvCw

• Convert plugin project to SDK
 • http://confluence.atlassian.com/x/wRyyCg

• Felix web console
 • http://${baseURL}/plugins/servlet/system/console

• Confluence exported beans
 • http://${baseURL}/admin/pluginexports.action


                                                      30
                                                       30

More Related Content

What's hot

Easily Manage Patching and Application Updates with Chocolatey + Puppet - Apr...
Easily Manage Patching and Application Updates with Chocolatey + Puppet - Apr...Easily Manage Patching and Application Updates with Chocolatey + Puppet - Apr...
Easily Manage Patching and Application Updates with Chocolatey + Puppet - Apr...
Puppet
 
Virtual Bolt Workshop - March 16, 2020
Virtual Bolt Workshop - March 16, 2020Virtual Bolt Workshop - March 16, 2020
Virtual Bolt Workshop - March 16, 2020
Puppet
 
OSGi Presentation
OSGi PresentationOSGi Presentation
OSGi Presentation
Michal Malohlava
 
OSGi & Java EE in GlassFish - Best of both worlds
OSGi & Java EE in GlassFish - Best of both worldsOSGi & Java EE in GlassFish - Best of both worlds
OSGi & Java EE in GlassFish - Best of both worlds
Arun Gupta
 
Intro to OSGi
Intro to OSGiIntro to OSGi
Intro to OSGi
Tricode (part of Dept)
 
OSGi in 5 minutes
OSGi in 5 minutesOSGi in 5 minutes
OSGi in 5 minutes
Serge Huber
 
Managing Change
Managing ChangeManaging Change
Managing Change
Mirko Jahn
 
Java9 and the impact on Maven Projects (JFall 2016)
Java9 and the impact on Maven Projects (JFall 2016)Java9 and the impact on Maven Projects (JFall 2016)
Java9 and the impact on Maven Projects (JFall 2016)
Robert Scholte
 
Java 9 Modularity and Project Jigsaw
Java 9 Modularity and Project JigsawJava 9 Modularity and Project Jigsaw
Java 9 Modularity and Project Jigsaw
Comsysto Reply GmbH
 
Uyuni, the solution to manage your IT infrastructure
Uyuni, the solution to manage your IT infrastructure Uyuni, the solution to manage your IT infrastructure
Uyuni, the solution to manage your IT infrastructure
Pau Garcia Quiles
 
Modularity of The Java Platform Javaday (http://javaday.org.ua/)
Modularity of The Java Platform Javaday (http://javaday.org.ua/)Modularity of The Java Platform Javaday (http://javaday.org.ua/)
Modularity of The Java Platform Javaday (http://javaday.org.ua/)
Martin Toshev
 
Introduction to-osgi
Introduction to-osgiIntroduction to-osgi
Introduction to-osgi
Ioannis Canellos
 
Open Services Gateway Initiative (OSGI)
Open Services Gateway Initiative (OSGI)Open Services Gateway Initiative (OSGI)
Open Services Gateway Initiative (OSGI)
Peter R. Egli
 
Concierge - Bringing OSGi (back) to Embedded Devices
Concierge - Bringing OSGi (back) to Embedded DevicesConcierge - Bringing OSGi (back) to Embedded Devices
Concierge - Bringing OSGi (back) to Embedded Devices
Jan S. Rellermeyer
 
Java 9 and the impact on Maven Projects (ApacheCon Europe 2016)
Java 9 and the impact on Maven Projects (ApacheCon Europe 2016)Java 9 and the impact on Maven Projects (ApacheCon Europe 2016)
Java 9 and the impact on Maven Projects (ApacheCon Europe 2016)
Robert Scholte
 
Java 10 New Features
Java 10 New FeaturesJava 10 New Features
Java 10 New Features
Ali BAKAN
 
OpenDaylight nluug_november
OpenDaylight nluug_novemberOpenDaylight nluug_november
OpenDaylight nluug_november
Christopher Price
 
Manage your Windows Infrastructure with Puppet Bolt - August 26 - 2020
Manage your Windows Infrastructure with Puppet Bolt - August 26 - 2020Manage your Windows Infrastructure with Puppet Bolt - August 26 - 2020
Manage your Windows Infrastructure with Puppet Bolt - August 26 - 2020
Puppet
 
Uyuni Community Hours 29.05.2020
Uyuni Community Hours 29.05.2020Uyuni Community Hours 29.05.2020
Uyuni Community Hours 29.05.2020
Pau Garcia Quiles
 

What's hot (19)

Easily Manage Patching and Application Updates with Chocolatey + Puppet - Apr...
Easily Manage Patching and Application Updates with Chocolatey + Puppet - Apr...Easily Manage Patching and Application Updates with Chocolatey + Puppet - Apr...
Easily Manage Patching and Application Updates with Chocolatey + Puppet - Apr...
 
Virtual Bolt Workshop - March 16, 2020
Virtual Bolt Workshop - March 16, 2020Virtual Bolt Workshop - March 16, 2020
Virtual Bolt Workshop - March 16, 2020
 
OSGi Presentation
OSGi PresentationOSGi Presentation
OSGi Presentation
 
OSGi & Java EE in GlassFish - Best of both worlds
OSGi & Java EE in GlassFish - Best of both worldsOSGi & Java EE in GlassFish - Best of both worlds
OSGi & Java EE in GlassFish - Best of both worlds
 
Intro to OSGi
Intro to OSGiIntro to OSGi
Intro to OSGi
 
OSGi in 5 minutes
OSGi in 5 minutesOSGi in 5 minutes
OSGi in 5 minutes
 
Managing Change
Managing ChangeManaging Change
Managing Change
 
Java9 and the impact on Maven Projects (JFall 2016)
Java9 and the impact on Maven Projects (JFall 2016)Java9 and the impact on Maven Projects (JFall 2016)
Java9 and the impact on Maven Projects (JFall 2016)
 
Java 9 Modularity and Project Jigsaw
Java 9 Modularity and Project JigsawJava 9 Modularity and Project Jigsaw
Java 9 Modularity and Project Jigsaw
 
Uyuni, the solution to manage your IT infrastructure
Uyuni, the solution to manage your IT infrastructure Uyuni, the solution to manage your IT infrastructure
Uyuni, the solution to manage your IT infrastructure
 
Modularity of The Java Platform Javaday (http://javaday.org.ua/)
Modularity of The Java Platform Javaday (http://javaday.org.ua/)Modularity of The Java Platform Javaday (http://javaday.org.ua/)
Modularity of The Java Platform Javaday (http://javaday.org.ua/)
 
Introduction to-osgi
Introduction to-osgiIntroduction to-osgi
Introduction to-osgi
 
Open Services Gateway Initiative (OSGI)
Open Services Gateway Initiative (OSGI)Open Services Gateway Initiative (OSGI)
Open Services Gateway Initiative (OSGI)
 
Concierge - Bringing OSGi (back) to Embedded Devices
Concierge - Bringing OSGi (back) to Embedded DevicesConcierge - Bringing OSGi (back) to Embedded Devices
Concierge - Bringing OSGi (back) to Embedded Devices
 
Java 9 and the impact on Maven Projects (ApacheCon Europe 2016)
Java 9 and the impact on Maven Projects (ApacheCon Europe 2016)Java 9 and the impact on Maven Projects (ApacheCon Europe 2016)
Java 9 and the impact on Maven Projects (ApacheCon Europe 2016)
 
Java 10 New Features
Java 10 New FeaturesJava 10 New Features
Java 10 New Features
 
OpenDaylight nluug_november
OpenDaylight nluug_novemberOpenDaylight nluug_november
OpenDaylight nluug_november
 
Manage your Windows Infrastructure with Puppet Bolt - August 26 - 2020
Manage your Windows Infrastructure with Puppet Bolt - August 26 - 2020Manage your Windows Infrastructure with Puppet Bolt - August 26 - 2020
Manage your Windows Infrastructure with Puppet Bolt - August 26 - 2020
 
Uyuni Community Hours 29.05.2020
Uyuni Community Hours 29.05.2020Uyuni Community Hours 29.05.2020
Uyuni Community Hours 29.05.2020
 

Similar to Plugins 2.0 & OSGi Gotchas - Atlassian Summit 2010

Plugins 2.0: The Overview
Plugins 2.0: The OverviewPlugins 2.0: The Overview
Plugins 2.0: The Overview
mrdon
 
GlassFish v3 Update Center
GlassFish v3 Update CenterGlassFish v3 Update Center
GlassFish v3 Update Center
Eduardo Pelegri-Llopart
 
Unlocked package
Unlocked packageUnlocked package
Moved to https://slidr.io/azzazzel/leveraging-osgi-to-create-extensible-plugi...
Moved to https://slidr.io/azzazzel/leveraging-osgi-to-create-extensible-plugi...Moved to https://slidr.io/azzazzel/leveraging-osgi-to-create-extensible-plugi...
Moved to https://slidr.io/azzazzel/leveraging-osgi-to-create-extensible-plugi...
Milen Dyankov
 
Alfresco DevCon 2018: SDK 3 Multi Module project using Nexus 3 for releases a...
Alfresco DevCon 2018: SDK 3 Multi Module project using Nexus 3 for releases a...Alfresco DevCon 2018: SDK 3 Multi Module project using Nexus 3 for releases a...
Alfresco DevCon 2018: SDK 3 Multi Module project using Nexus 3 for releases a...
Martin Bergljung
 
Os gi introduction made by Ly MInh Phuong-SOC team
Os gi introduction made by Ly MInh Phuong-SOC teamOs gi introduction made by Ly MInh Phuong-SOC team
Os gi introduction made by Ly MInh Phuong-SOC teamThuy_Dang
 
Opendaylight SDN Controller
Opendaylight SDN ControllerOpendaylight SDN Controller
Opendaylight SDN Controller
Sumit Arora
 
Django deployment with PaaS
Django deployment with PaaSDjango deployment with PaaS
Django deployment with PaaS
Appsembler
 
Osgi Webinar
Osgi WebinarOsgi Webinar
Osgi WebinarWSO2
 
Python Automation With Gauge + Selenium + API + Jenkins
Python Automation With Gauge + Selenium + API + JenkinsPython Automation With Gauge + Selenium + API + Jenkins
Python Automation With Gauge + Selenium + API + Jenkins
Fagun Priyadarshi
 
VIB - Very Important Bundles
VIB - Very Important BundlesVIB - Very Important Bundles
VIB - Very Important Bundles
Roman Roelofsen
 
Intro to OSGi and Eclipse Virgo
Intro to OSGi and Eclipse VirgoIntro to OSGi and Eclipse Virgo
Intro to OSGi and Eclipse Virgo
Gordon Dickens
 
Prizm Installation Guide
Prizm Installation GuidePrizm Installation Guide
Prizm Installation Guide
vjvarenya
 
Plugins And Making Your Own
Plugins And Making Your OwnPlugins And Making Your Own
Plugins And Making Your Own
Lambert Beekhuis
 
Slack Bot: upload NUGET package to Artifactory
Slack Bot: upload NUGET package to ArtifactorySlack Bot: upload NUGET package to Artifactory
Slack Bot: upload NUGET package to Artifactory
Sergey Dzyuban
 
OpenDayLight (ODL) Project
OpenDayLight (ODL) ProjectOpenDayLight (ODL) Project
OpenDayLight (ODL) ProjectVahid Sadri
 
OSGi & Java EE: A hybrid approach to Enterprise Java Application Development,...
OSGi & Java EE: A hybrid approach to Enterprise Java Application Development,...OSGi & Java EE: A hybrid approach to Enterprise Java Application Development,...
OSGi & Java EE: A hybrid approach to Enterprise Java Application Development,...
OpenBlend society
 
Paving the way to a native Sling
Paving the way to a native SlingPaving the way to a native Sling
Paving the way to a native Sling
Radu Cotescu
 
Modular Java
Modular JavaModular Java
Modular Java
Martin Toshev
 
NI Package Manager
NI Package ManagerNI Package Manager
NI Package Manager
DMC, Inc.
 

Similar to Plugins 2.0 & OSGi Gotchas - Atlassian Summit 2010 (20)

Plugins 2.0: The Overview
Plugins 2.0: The OverviewPlugins 2.0: The Overview
Plugins 2.0: The Overview
 
GlassFish v3 Update Center
GlassFish v3 Update CenterGlassFish v3 Update Center
GlassFish v3 Update Center
 
Unlocked package
Unlocked packageUnlocked package
Unlocked package
 
Moved to https://slidr.io/azzazzel/leveraging-osgi-to-create-extensible-plugi...
Moved to https://slidr.io/azzazzel/leveraging-osgi-to-create-extensible-plugi...Moved to https://slidr.io/azzazzel/leveraging-osgi-to-create-extensible-plugi...
Moved to https://slidr.io/azzazzel/leveraging-osgi-to-create-extensible-plugi...
 
Alfresco DevCon 2018: SDK 3 Multi Module project using Nexus 3 for releases a...
Alfresco DevCon 2018: SDK 3 Multi Module project using Nexus 3 for releases a...Alfresco DevCon 2018: SDK 3 Multi Module project using Nexus 3 for releases a...
Alfresco DevCon 2018: SDK 3 Multi Module project using Nexus 3 for releases a...
 
Os gi introduction made by Ly MInh Phuong-SOC team
Os gi introduction made by Ly MInh Phuong-SOC teamOs gi introduction made by Ly MInh Phuong-SOC team
Os gi introduction made by Ly MInh Phuong-SOC team
 
Opendaylight SDN Controller
Opendaylight SDN ControllerOpendaylight SDN Controller
Opendaylight SDN Controller
 
Django deployment with PaaS
Django deployment with PaaSDjango deployment with PaaS
Django deployment with PaaS
 
Osgi Webinar
Osgi WebinarOsgi Webinar
Osgi Webinar
 
Python Automation With Gauge + Selenium + API + Jenkins
Python Automation With Gauge + Selenium + API + JenkinsPython Automation With Gauge + Selenium + API + Jenkins
Python Automation With Gauge + Selenium + API + Jenkins
 
VIB - Very Important Bundles
VIB - Very Important BundlesVIB - Very Important Bundles
VIB - Very Important Bundles
 
Intro to OSGi and Eclipse Virgo
Intro to OSGi and Eclipse VirgoIntro to OSGi and Eclipse Virgo
Intro to OSGi and Eclipse Virgo
 
Prizm Installation Guide
Prizm Installation GuidePrizm Installation Guide
Prizm Installation Guide
 
Plugins And Making Your Own
Plugins And Making Your OwnPlugins And Making Your Own
Plugins And Making Your Own
 
Slack Bot: upload NUGET package to Artifactory
Slack Bot: upload NUGET package to ArtifactorySlack Bot: upload NUGET package to Artifactory
Slack Bot: upload NUGET package to Artifactory
 
OpenDayLight (ODL) Project
OpenDayLight (ODL) ProjectOpenDayLight (ODL) Project
OpenDayLight (ODL) Project
 
OSGi & Java EE: A hybrid approach to Enterprise Java Application Development,...
OSGi & Java EE: A hybrid approach to Enterprise Java Application Development,...OSGi & Java EE: A hybrid approach to Enterprise Java Application Development,...
OSGi & Java EE: A hybrid approach to Enterprise Java Application Development,...
 
Paving the way to a native Sling
Paving the way to a native SlingPaving the way to a native Sling
Paving the way to a native Sling
 
Modular Java
Modular JavaModular Java
Modular Java
 
NI Package Manager
NI Package ManagerNI Package Manager
NI Package Manager
 

More from Atlassian

International Women's Day 2020
International Women's Day 2020International Women's Day 2020
International Women's Day 2020
Atlassian
 
10 emerging trends that will unbreak your workplace in 2020
10 emerging trends that will unbreak your workplace in 202010 emerging trends that will unbreak your workplace in 2020
10 emerging trends that will unbreak your workplace in 2020
Atlassian
 
Forge App Showcase
Forge App ShowcaseForge App Showcase
Forge App Showcase
Atlassian
 
Let's Build an Editor Macro with Forge UI
Let's Build an Editor Macro with Forge UILet's Build an Editor Macro with Forge UI
Let's Build an Editor Macro with Forge UI
Atlassian
 
Meet the Forge Runtime
Meet the Forge RuntimeMeet the Forge Runtime
Meet the Forge Runtime
Atlassian
 
Forge UI: A New Way to Customize the Atlassian User Experience
Forge UI: A New Way to Customize the Atlassian User ExperienceForge UI: A New Way to Customize the Atlassian User Experience
Forge UI: A New Way to Customize the Atlassian User Experience
Atlassian
 
Take Action with Forge Triggers
Take Action with Forge TriggersTake Action with Forge Triggers
Take Action with Forge Triggers
Atlassian
 
Observability and Troubleshooting in Forge
Observability and Troubleshooting in ForgeObservability and Troubleshooting in Forge
Observability and Troubleshooting in Forge
Atlassian
 
Trusted by Default: The Forge Security & Privacy Model
Trusted by Default: The Forge Security & Privacy ModelTrusted by Default: The Forge Security & Privacy Model
Trusted by Default: The Forge Security & Privacy Model
Atlassian
 
Designing Forge UI: A Story of Designing an App UI System
Designing Forge UI: A Story of Designing an App UI SystemDesigning Forge UI: A Story of Designing an App UI System
Designing Forge UI: A Story of Designing an App UI System
Atlassian
 
Forge: Under the Hood
Forge: Under the HoodForge: Under the Hood
Forge: Under the Hood
Atlassian
 
Access to User Activities - Activity Platform APIs
Access to User Activities - Activity Platform APIsAccess to User Activities - Activity Platform APIs
Access to User Activities - Activity Platform APIs
Atlassian
 
Design Your Next App with the Atlassian Vendor Sketch Plugin
Design Your Next App with the Atlassian Vendor Sketch PluginDesign Your Next App with the Atlassian Vendor Sketch Plugin
Design Your Next App with the Atlassian Vendor Sketch Plugin
Atlassian
 
Tear Up Your Roadmap and Get Out of the Building
Tear Up Your Roadmap and Get Out of the BuildingTear Up Your Roadmap and Get Out of the Building
Tear Up Your Roadmap and Get Out of the Building
Atlassian
 
Nailing Measurement: a Framework for Measuring Metrics that Matter
Nailing Measurement: a Framework for Measuring Metrics that MatterNailing Measurement: a Framework for Measuring Metrics that Matter
Nailing Measurement: a Framework for Measuring Metrics that Matter
Atlassian
 
Building Apps With Color Blind Users in Mind
Building Apps With Color Blind Users in MindBuilding Apps With Color Blind Users in Mind
Building Apps With Color Blind Users in Mind
Atlassian
 
Creating Inclusive Experiences: Balancing Personality and Accessibility in UX...
Creating Inclusive Experiences: Balancing Personality and Accessibility in UX...Creating Inclusive Experiences: Balancing Personality and Accessibility in UX...
Creating Inclusive Experiences: Balancing Personality and Accessibility in UX...
Atlassian
 
Beyond Diversity: A Guide to Building Balanced Teams
Beyond Diversity: A Guide to Building Balanced TeamsBeyond Diversity: A Guide to Building Balanced Teams
Beyond Diversity: A Guide to Building Balanced Teams
Atlassian
 
The Road(map) to Las Vegas - The Story of an Emerging Self-Managed Team
The Road(map) to Las Vegas - The Story of an Emerging Self-Managed TeamThe Road(map) to Las Vegas - The Story of an Emerging Self-Managed Team
The Road(map) to Las Vegas - The Story of an Emerging Self-Managed Team
Atlassian
 
Building Apps With Enterprise in Mind
Building Apps With Enterprise in MindBuilding Apps With Enterprise in Mind
Building Apps With Enterprise in Mind
Atlassian
 

More from Atlassian (20)

International Women's Day 2020
International Women's Day 2020International Women's Day 2020
International Women's Day 2020
 
10 emerging trends that will unbreak your workplace in 2020
10 emerging trends that will unbreak your workplace in 202010 emerging trends that will unbreak your workplace in 2020
10 emerging trends that will unbreak your workplace in 2020
 
Forge App Showcase
Forge App ShowcaseForge App Showcase
Forge App Showcase
 
Let's Build an Editor Macro with Forge UI
Let's Build an Editor Macro with Forge UILet's Build an Editor Macro with Forge UI
Let's Build an Editor Macro with Forge UI
 
Meet the Forge Runtime
Meet the Forge RuntimeMeet the Forge Runtime
Meet the Forge Runtime
 
Forge UI: A New Way to Customize the Atlassian User Experience
Forge UI: A New Way to Customize the Atlassian User ExperienceForge UI: A New Way to Customize the Atlassian User Experience
Forge UI: A New Way to Customize the Atlassian User Experience
 
Take Action with Forge Triggers
Take Action with Forge TriggersTake Action with Forge Triggers
Take Action with Forge Triggers
 
Observability and Troubleshooting in Forge
Observability and Troubleshooting in ForgeObservability and Troubleshooting in Forge
Observability and Troubleshooting in Forge
 
Trusted by Default: The Forge Security & Privacy Model
Trusted by Default: The Forge Security & Privacy ModelTrusted by Default: The Forge Security & Privacy Model
Trusted by Default: The Forge Security & Privacy Model
 
Designing Forge UI: A Story of Designing an App UI System
Designing Forge UI: A Story of Designing an App UI SystemDesigning Forge UI: A Story of Designing an App UI System
Designing Forge UI: A Story of Designing an App UI System
 
Forge: Under the Hood
Forge: Under the HoodForge: Under the Hood
Forge: Under the Hood
 
Access to User Activities - Activity Platform APIs
Access to User Activities - Activity Platform APIsAccess to User Activities - Activity Platform APIs
Access to User Activities - Activity Platform APIs
 
Design Your Next App with the Atlassian Vendor Sketch Plugin
Design Your Next App with the Atlassian Vendor Sketch PluginDesign Your Next App with the Atlassian Vendor Sketch Plugin
Design Your Next App with the Atlassian Vendor Sketch Plugin
 
Tear Up Your Roadmap and Get Out of the Building
Tear Up Your Roadmap and Get Out of the BuildingTear Up Your Roadmap and Get Out of the Building
Tear Up Your Roadmap and Get Out of the Building
 
Nailing Measurement: a Framework for Measuring Metrics that Matter
Nailing Measurement: a Framework for Measuring Metrics that MatterNailing Measurement: a Framework for Measuring Metrics that Matter
Nailing Measurement: a Framework for Measuring Metrics that Matter
 
Building Apps With Color Blind Users in Mind
Building Apps With Color Blind Users in MindBuilding Apps With Color Blind Users in Mind
Building Apps With Color Blind Users in Mind
 
Creating Inclusive Experiences: Balancing Personality and Accessibility in UX...
Creating Inclusive Experiences: Balancing Personality and Accessibility in UX...Creating Inclusive Experiences: Balancing Personality and Accessibility in UX...
Creating Inclusive Experiences: Balancing Personality and Accessibility in UX...
 
Beyond Diversity: A Guide to Building Balanced Teams
Beyond Diversity: A Guide to Building Balanced TeamsBeyond Diversity: A Guide to Building Balanced Teams
Beyond Diversity: A Guide to Building Balanced Teams
 
The Road(map) to Las Vegas - The Story of an Emerging Self-Managed Team
The Road(map) to Las Vegas - The Story of an Emerging Self-Managed TeamThe Road(map) to Las Vegas - The Story of an Emerging Self-Managed Team
The Road(map) to Las Vegas - The Story of an Emerging Self-Managed Team
 
Building Apps With Enterprise in Mind
Building Apps With Enterprise in MindBuilding Apps With Enterprise in Mind
Building Apps With Enterprise in Mind
 

Recently uploaded

Essentials of Automations: Optimizing FME Workflows with Parameters
Essentials of Automations: Optimizing FME Workflows with ParametersEssentials of Automations: Optimizing FME Workflows with Parameters
Essentials of Automations: Optimizing FME Workflows with Parameters
Safe Software
 
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdfFIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance
 
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Thierry Lestable
 
Key Trends Shaping the Future of Infrastructure.pdf
Key Trends Shaping the Future of Infrastructure.pdfKey Trends Shaping the Future of Infrastructure.pdf
Key Trends Shaping the Future of Infrastructure.pdf
Cheryl Hung
 
When stars align: studies in data quality, knowledge graphs, and machine lear...
When stars align: studies in data quality, knowledge graphs, and machine lear...When stars align: studies in data quality, knowledge graphs, and machine lear...
When stars align: studies in data quality, knowledge graphs, and machine lear...
Elena Simperl
 
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
James Anderson
 
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdf
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdfSmart TV Buyer Insights Survey 2024 by 91mobiles.pdf
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdf
91mobiles
 
The Art of the Pitch: WordPress Relationships and Sales
The Art of the Pitch: WordPress Relationships and SalesThe Art of the Pitch: WordPress Relationships and Sales
The Art of the Pitch: WordPress Relationships and Sales
Laura Byrne
 
Epistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI supportEpistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI support
Alan Dix
 
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Albert Hoitingh
 
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...
Ramesh Iyer
 
Designing Great Products: The Power of Design and Leadership by Chief Designe...
Designing Great Products: The Power of Design and Leadership by Chief Designe...Designing Great Products: The Power of Design and Leadership by Chief Designe...
Designing Great Products: The Power of Design and Leadership by Chief Designe...
Product School
 
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
DanBrown980551
 
How world-class product teams are winning in the AI era by CEO and Founder, P...
How world-class product teams are winning in the AI era by CEO and Founder, P...How world-class product teams are winning in the AI era by CEO and Founder, P...
How world-class product teams are winning in the AI era by CEO and Founder, P...
Product School
 
FIDO Alliance Osaka Seminar: Overview.pdf
FIDO Alliance Osaka Seminar: Overview.pdfFIDO Alliance Osaka Seminar: Overview.pdf
FIDO Alliance Osaka Seminar: Overview.pdf
FIDO Alliance
 
GraphRAG is All You need? LLM & Knowledge Graph
GraphRAG is All You need? LLM & Knowledge GraphGraphRAG is All You need? LLM & Knowledge Graph
GraphRAG is All You need? LLM & Knowledge Graph
Guy Korland
 
To Graph or Not to Graph Knowledge Graph Architectures and LLMs
To Graph or Not to Graph Knowledge Graph Architectures and LLMsTo Graph or Not to Graph Knowledge Graph Architectures and LLMs
To Graph or Not to Graph Knowledge Graph Architectures and LLMs
Paul Groth
 
Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...
Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...
Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...
Jeffrey Haguewood
 
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
Sri Ambati
 
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdfFIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance
 

Recently uploaded (20)

Essentials of Automations: Optimizing FME Workflows with Parameters
Essentials of Automations: Optimizing FME Workflows with ParametersEssentials of Automations: Optimizing FME Workflows with Parameters
Essentials of Automations: Optimizing FME Workflows with Parameters
 
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdfFIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
 
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
 
Key Trends Shaping the Future of Infrastructure.pdf
Key Trends Shaping the Future of Infrastructure.pdfKey Trends Shaping the Future of Infrastructure.pdf
Key Trends Shaping the Future of Infrastructure.pdf
 
When stars align: studies in data quality, knowledge graphs, and machine lear...
When stars align: studies in data quality, knowledge graphs, and machine lear...When stars align: studies in data quality, knowledge graphs, and machine lear...
When stars align: studies in data quality, knowledge graphs, and machine lear...
 
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
 
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdf
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdfSmart TV Buyer Insights Survey 2024 by 91mobiles.pdf
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdf
 
The Art of the Pitch: WordPress Relationships and Sales
The Art of the Pitch: WordPress Relationships and SalesThe Art of the Pitch: WordPress Relationships and Sales
The Art of the Pitch: WordPress Relationships and Sales
 
Epistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI supportEpistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI support
 
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
 
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...
 
Designing Great Products: The Power of Design and Leadership by Chief Designe...
Designing Great Products: The Power of Design and Leadership by Chief Designe...Designing Great Products: The Power of Design and Leadership by Chief Designe...
Designing Great Products: The Power of Design and Leadership by Chief Designe...
 
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
 
How world-class product teams are winning in the AI era by CEO and Founder, P...
How world-class product teams are winning in the AI era by CEO and Founder, P...How world-class product teams are winning in the AI era by CEO and Founder, P...
How world-class product teams are winning in the AI era by CEO and Founder, P...
 
FIDO Alliance Osaka Seminar: Overview.pdf
FIDO Alliance Osaka Seminar: Overview.pdfFIDO Alliance Osaka Seminar: Overview.pdf
FIDO Alliance Osaka Seminar: Overview.pdf
 
GraphRAG is All You need? LLM & Knowledge Graph
GraphRAG is All You need? LLM & Knowledge GraphGraphRAG is All You need? LLM & Knowledge Graph
GraphRAG is All You need? LLM & Knowledge Graph
 
To Graph or Not to Graph Knowledge Graph Architectures and LLMs
To Graph or Not to Graph Knowledge Graph Architectures and LLMsTo Graph or Not to Graph Knowledge Graph Architectures and LLMs
To Graph or Not to Graph Knowledge Graph Architectures and LLMs
 
Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...
Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...
Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...
 
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
 
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdfFIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
 

Plugins 2.0 & OSGi Gotchas - Atlassian Summit 2010

  • 1. 1
  • 2. Plugins 2 and OSGi Gotchas Or: How I learned to stop worrying and love Apache Felix John Kodumal Atlassian Developer 2 2
  • 3. Agenda • Background • OSGi Primer • Protips 1. Be the master of your manifest 2. Manage your dependencies 3. Earn a brown belt in OSGi classloading 4. Buddy up with the Felix web console 5. Know what the applications provide 3 3
  • 4. OSGi from 10,000 feet Services Bundles Lifecycle Modules Execution Environment 4 4
  • 6. Migrate to Plugins 2.0 • Convert plugin to plugins 2 • http://confluence.atlassian.com/x/bwLvCw • Convert plugin project to SDK • http://confluence.atlassian.com/x/wRyyCg 6 6
  • 7. OSGi as a black box? The Atlassian Plugin Framework 2 tries to hide the complexity of OSGi as much as possible... If you are familiar with OSGi and want to provide an OSGi bundle directly in order to leverage all its features, you are free to do so. http://confluence.atlassian.com/x/DIBiCg 7 7
  • 8. OSGi as a black box? OSGi Knowledge crazy plugins (dashboards) simple plugins (gadgets) sweet spot Plugin Complexity 8 8
  • 9. Agenda • Background • OSGi Primer • Protips 1. Be the master of your manifest 2. Manage your dependencies 3. Earn a brown belt in OSGi classloading 4. Buddy up with the Felix web console 5. Know what the applications provide 9 9
  • 10. OSGi Concepts 10 10
  • 11. Anatomy of an OSGi Bundle Package Exports OSGi Bundle Manifest Activator Services Private Classloader Private Packages Package Imports 11 11
  • 12. How Bundles Interact your plugin google collections 1.0 com.google.collect v1.0 Wire 12 12
  • 13. Agenda • Background • Overview of OSGi • Protips 1. Be the master of your manifest 2. Manage your dependencies 3. Earn a brown belt in OSGi classloading 4. Buddy up with the Felix web console 5. Know what the applications provide 13 13
  • 14. #1 Be the master of your manifest Manifest-Version: 1.0 Created-By: 1.5.0_19 (Apple Inc.) Bundle-Name: gdata-service-plugin Bundle-SymbolicName: com.atlassian.agmp.gdata-service-plugin Bundle-Description: This is the com.atlassian.agmp:gdata-service-plugin plugin for Atlassian Refapp. Bundle-ClassPath: .,META-INF/lib/commons-lang-2.4.jar,META-INF/lib/joda-time-1.6.jar Import-Package: com.atlassian.agmp.integration.common;version="0.0.0", com.atlassian.templaterenderer.annotations;version="0.0.0",com.atlassian.templaterenderer.velocity.one.six;version="0.0.0",c om.google.common.base;version="0.0.0",com.google.gdata.client;version="1.40.1",com.google.gdata.client.authn.oauth;versi on="1.40.1",com.google.gdata.client.calendar;version="1.40.1",com.google.gdata.client.docs;version="1.40.1",com.google.gd Bundle-Name: gdata-service-plugin ata.client.media;version="1.40.1",com.google.gdata.data;version="1.40.1",com.google.gdata.data.calendar;version="1.40.1",c Bundle-SymbolicName: com.atlassian.agmp.gdata-service-plugin om.google.gdata.data.docs;version="1.40.1",com.google.gdata.data.media;version="1.40.1",com.google.gdata.util;version="1 .40.1",com.google.gdata.util.common.base;version="1.40.1",com.google.gdata.util.common.xml;version="1.40.1",javax.servlet Bundle-Description: This is the com.atlassian.agmp:gdata-service-plugin plugin for Atlassian Refapp. ;version="0.0.0",javax.servlet.http;version="0.0.0",org.apache.commons.io;version="1.3",org.apache.log4j;version="0.0.0",org. springframework.beans.factory.annotation;version="0.0.0" Export-Package: com.atlassian.agmp.gdata;uses:="com.google.gdata.util";version="1.1.4.SNAPSHOT" Bundle-Version: 1.1.4.SNAPSHOT Bundle-DocURL: http://www.atlassian.com/ Bundle-Vendor: Atlassian Bundle-ManifestVersion: 2 Tool: Bnd-0.0.311 14 14
  • 15. #1 Be the master of your manifest Manifest-Version: 1.0 Created-By: 1.5.0_19 (Apple Inc.) Bundle-Name: gdata-service-plugin Bundle-SymbolicName: com.atlassian.agmp.gdata-service-plugin Bundle-Description: This is the com.atlassian.agmp:gdata-service-plugin plugin for Atlassian Refapp. Bundle-ClassPath: .,META-INF/lib/commons-lang-2.4.jar,META-INF/lib/joda-time-1.6.jar Import-Package: com.atlassian.agmp.integration.common;version="0.0.0", com.atlassian.templaterenderer.annotations;version="0.0.0",com.atlassian.templaterenderer.velocity.one.six;version="0.0.0",c om.google.common.base;version="0.0.0",com.google.gdata.client;version="1.40.1",com.google.gdata.client.authn.oauth;versi on="1.40.1",com.google.gdata.client.calendar;version="1.40.1",com.google.gdata.client.docs;version="1.40.1",com.google.gd Bundle-ClassPath: .,META-INF/lib/commons-lang-2.4.jar,META-INF/lib/joda-time-1.6.jar ata.client.media;version="1.40.1",com.google.gdata.data;version="1.40.1",com.google.gdata.data.calendar;version="1.40.1",c om.google.gdata.data.docs;version="1.40.1",com.google.gdata.data.media;version="1.40.1",com.google.gdata.util;version="1 .40.1",com.google.gdata.util.common.base;version="1.40.1",com.google.gdata.util.common.xml;version="1.40.1",javax.servlet ;version="0.0.0",javax.servlet.http;version="0.0.0",org.apache.commons.io;version="1.3",org.apache.log4j;version="0.0.0",org. springframework.beans.factory.annotation;version="0.0.0" Export-Package: com.atlassian.agmp.gdata;uses:="com.google.gdata.util";version="1.1.4.SNAPSHOT" Bundle-Version: 1.1.4.SNAPSHOT Bundle-DocURL: http://www.atlassian.com/ Bundle-Vendor: Atlassian Bundle-ManifestVersion: 2 Tool: Bnd-0.0.311 15 15
  • 16. #1 Be the master of your manifest Manifest-Version: 1.0 Created-By: 1.5.0_19 (Apple Inc.) Bundle-Name: gdata-service-plugin Bundle-SymbolicName: com.atlassian.agmp.gdata-service-plugin Import-Package: Bundle-Description: This is the com.atlassian.agmp:gdata-service-plugin plugin for Atlassian Refapp. com.atlassian.agmp.integration.common;version="0.0.0", Bundle-ClassPath: .,META-INF/lib/commons-lang-2.4.jar,META-INF/lib/joda-time-1.6.jar com.atlassian.templaterenderer.annotations;version="0.0.0",com.atlassian.templaterenderer.velocity. Import-Package: com.atlassian.agmp.integration.common;version="0.0.0", one.six;version="0.0.0",com.google.common.base;version="0.0.0",com.google.gdata.client;version=" com.atlassian.templaterenderer.annotations;version="0.0.0",com.atlassian.templaterenderer.velocity.one.six;version="0.0.0",c om.google.common.base;version="0.0.0",com.google.gdata.client;version="1.40.1",com.google.gdata.client.authn.oauth;versi 1.40.1",com.google.gdata.client.authn.oauth;version="1.40.1",com.google.gdata.client.calendar;versi on="1.40.1",com.google.gdata.client.calendar;version="1.40.1",com.google.gdata.client.docs;version="1.40.1",com.google.gd ata.client.media;version="1.40.1",com.google.gdata.data;version="1.40.1",com.google.gdata.data.calendar;version="1.40.1",c on="1.40.1",com.google.gdata.client.docs;version="1.40.1",com.google.gdata.client.media;version=" om.google.gdata.data.docs;version="1.40.1",com.google.gdata.data.media;version="1.40.1",com.google.gdata.util;version="1 1.40.1",com.google.gdata.data;version="1.40.1",com.google.gdata.data.calendar;version="1.40.1",co .40.1",com.google.gdata.util.common.base;version="1.40.1",com.google.gdata.util.common.xml;version="1.40.1",javax.servlet ;version="0.0.0",javax.servlet.http;version="0.0.0",org.apache.commons.io;version="1.3",org.apache.log4j;version="0.0.0",org. m.google.gdata.data.docs;version="1.40.1",com.google.gdata.data.media;version="1.40.1",com.goo springframework.beans.factory.annotation;version="0.0.0" Export-Package: com.atlassian.agmp.gdata;uses:="com.google.gdata.util";version="1.1.4.SNAPSHOT" gle.gdata.util;version="1.40.1",com.google.gdata.util.common.base;version="1.40.1",com.google.gda Bundle-Version: 1.1.4.SNAPSHOT ta.util.common.xml;version="1.40.1",javax.servlet;version="0.0.0",javax.servlet.http;version="0.0.0",o Bundle-DocURL: http://www.atlassian.com/ Bundle-Vendor: Atlassian rg.apache.commons.io;version="1.3",org.apache.log4j;version="0.0.0",org.springframework.beans.fa Bundle-ManifestVersion: 2 Tool: Bnd-0.0.311 ctory.annotation;version="0.0.0" 16 16
  • 17. #1 Be the master of your manifest Manifest-Version: 1.0 Created-By: 1.5.0_19 (Apple Inc.) Bundle-Name: gdata-service-plugin Bundle-SymbolicName: com.atlassian.agmp.gdata-service-plugin Bundle-Description: This is the com.atlassian.agmp:gdata-service-plugin plugin for Atlassian Refapp. Bundle-ClassPath: .,META-INF/lib/commons-lang-2.4.jar,META-INF/lib/joda-time-1.6.jar Import-Package: com.atlassian.agmp.integration.common;version="0.0.0", com.atlassian.templaterenderer.annotations;version="0.0.0",com.atlassian.templaterenderer.velocity.one.six;version="0.0.0",c om.google.common.base;version="0.0.0",com.google.gdata.client;version="1.40.1",com.google.gdata.client.authn.oauth;versi on="1.40.1",com.google.gdata.client.calendar;version="1.40.1",com.google.gdata.client.docs;version="1.40.1",com.google.gd Export-Package: com.atlassian.agmp.gdata;uses:="com.google.gdata.util";version="1.1.4.SNAPSHOT" ata.client.media;version="1.40.1",com.google.gdata.data;version="1.40.1",com.google.gdata.data.calendar;version="1.40.1",c om.google.gdata.data.docs;version="1.40.1",com.google.gdata.data.media;version="1.40.1",com.google.gdata.util;version="1 .40.1",com.google.gdata.util.common.base;version="1.40.1",com.google.gdata.util.common.xml;version="1.40.1",javax.servlet ;version="0.0.0",javax.servlet.http;version="0.0.0",org.apache.commons.io;version="1.3",org.apache.log4j;version="0.0.0",org. springframework.beans.factory.annotation;version="0.0.0" Export-Package: com.atlassian.agmp.gdata;uses:="com.google.gdata.util";version="1.1.4.SNAPSHOT" Bundle-Version: 1.1.4.SNAPSHOT Bundle-DocURL: http://www.atlassian.com/ Bundle-Vendor: Atlassian Bundle-ManifestVersion: 2 Tool: Bnd-0.0.311 17 17
  • 18. #1 Be the master of your manifest <build> <plugins> <plugin> <groupId>com.atlassian.maven.plugins</groupId> <instructions> <artifactId>maven-refapp-plugin</artifactId> <Import-Package> <version>3.0.2</version> <extensions>true</extensions> javax.servlet*;version="0.0.0", <configuration> org.apache.commons.io;version="1.3", <productVersion>${refapp.version}</productVersion> com.atlassian.agmp.integration.common*;version="0.0.0", <instructions> <Import-Package> com.google.gdata*;version="1.40.1", javax.servlet*;version="0.0.0", com.google.common*;version="0.0.0", org.apache.commons.io;version="1.3", org.springframework.beans*;version="0.0.0", com.atlassian.agmp.integration.common*;version="0.0.0", com.google.gdata*;version="1.40.1", com.atlassian.templaterenderer.*;version="0.0.0", com.google.common*;version="0.0.0", org.apache.log4j*;version="0.0.0" org.springframework.beans*;version="0.0.0", </Import-Package> com.atlassian.templaterenderer.*;version="0.0.0", <Export-Package> org.apache.log4j*;version="0.0.0" </Import-Package> com.atlassian.agmp.gdata <Export-Package> </Export-Package> com.atlassian.agmp.gdata <instructions> </Export-Package> </instructions> </plugin> … </build> 18 18
  • 19. #2 Manage your dependencies • Prefer Import-Package dependencies over Require-Bundle vs. Import-Package Require-Bundle 19 19
  • 20. #2 Manage your dependencies • Prefer Import-Package dependencies over Bundle-Classpath vs. Import-Package Bundle-Classpath 20 20
  • 21. #2 Manage your dependencies • Always specify package versions for imports and exports • Versions are specified in <major>.<minor>.<micro>.<qualifier> form • Bundle constraints use interval range notation • e.g. “[1.0.0, 2.0.0 )” • A missing upper bound denotes infinity • So version=“1.0.0” really means version >= “1.0.0” • version=“0.0.0” means “any version” • Thatʼs right! OSGi has redefined equals to mean greater than. Top notch! • Put version constraints in quotes 21 21
  • 22. #2 Manage your dependencies • Run mvn:dependency-tree and scan your dependencies manually • Use the maven dependency tracker plugin if youʼre paranoid • https://labs.atlassian.com/browse/MAP • 22 22
  • 23. #3 Earn a brown belt in OSGi classloading Start Delegate to parent found? java.*? classloader boot Delegate to parent found? classloader package- found? import? Delegate to wire exporter bundle found? classpath? 23 23
  • 24. #3 Earn a brown belt in OSGi classloading • Boot delegated packages cannot be overridden • Even with packages in your bundle classpath! • Plugins 2.x boot delegates several packages • Packages for profiling tools (e.g. com.yourkit) • And xerces 24 24
  • 25. #4 Buddy up with the Felix web console • http://${baseURL}/plugins/servlet/system/console • username : admin • password : admin 25 25
  • 26. #4 Or try the OSGi Explorer plugin https://plugins.atlassian.com/plugin/details/23455 26 26
  • 27. #5 Know what the applications provide ion aseURL}/admin/p luginexports.act http://${b 27 27
  • 28. #5 Know what the applications provide • http://${ baseURL}/plugins/servlet/system/console • username : admin • password : admin 28 28
  • 29. Recap • Background • OSGi Primer • Protips 1. Be the master of your manifest 2. Manage your dependencies 3. Earn a brown belt in OSGi classloading 4. Buddy up with the Felix web console 5. Know what the applications provide 29 29
  • 30. Resources • Convert plugin to plugins 2 • http://confluence.atlassian.com/x/bwLvCw • Convert plugin project to SDK • http://confluence.atlassian.com/x/wRyyCg • Felix web console • http://${baseURL}/plugins/servlet/system/console • Confluence exported beans • http://${baseURL}/admin/pluginexports.action 30 30