SlideShare a Scribd company logo
1 of 45
Download to read offline
OSGi
   Tales from the Trenches
   Bertrand Delacretaz
   Senior R&D Developer, Day Software, www.day.com
   Apache Software Foundation Member and Director
   bdelacretaz@apache.org
   blog: http://grep.codeconsult.ch
   twitter: @bdelacretaz
                                                 Special thanks to:
   ApacheCon Europe 2009, Amsterdam              Filippo Diotalevi (osgilook.com)
   slides revision: 2009-03-25                   and The Day R&D team
                                                 for additional input!

OSGi tales from the trenches
What?
    Share our experience using Apache Felix at
    Day, for a major rewrite of our content
    management products.

    More than two years working with OSGi, very
    high impact on developers, customers, service
    people, mostly in a positive way.

    OSGi is no silver bullet either.
                                       silve
                                             r


OSGi tales from the trenches
Ok but what?
                                                           the


                                                GOOD
                                                           the


                                                    BAD
                                                           the


                                                 UGLY
                                                        and the


                                            FUTURE
symbols by ppdigital , o0o0xmods0o0oon and clarita, on morguefile.com

OSGi tales from the trenches
Introduction

OSGi tales from the trenches
First a warning
                       is not an OSGi guru!
                      I’m just a poor lonesome user...
OSGi tales from the trenches
OSGi ?
  OSGi™
  The Dynamic Module System for Java™
  http://www.osgi.org (see also Wikipedia)
  Consortium founded 1999, 100 companies.
  Initially meant for mobile devices.
  Now moving to server-side, fast.
  Eclipse, LinkedIn, GlassFish, WSO2,
  WebSphere and many others.
  @apache: Felix, ServiceMix, Sling, CXF,
  Tuscany and more, growing.
OSGi tales from the trenches
Trenches?


            family of content
          management products,
          R&D team of about 30


                                    built on Apache Sling,
http://www.day.com/cq5
http://jackrabbit.apache.org
                                    uses Apache Felix and
http://felix.apache.org
                                           Jackrabbit
http://incubator.apache.org/sling

OSGi tales from the trenches
What we use from OSGi
    Bundles (using Maven plugins)
    Lifecycle, Service Tracker
    Configurations and Felix Web Console
    Declarative Services (using Maven plugins)
    Sling’s jcrinstall module
    (bundles and configs loaded from the JCR repository)

    Log, HTTP, Event services

                                                          presented by Carsten at 10:30

OSGi tales from the trenches
Famous quotes

OSGi tales from the trenches
Famous Quotes, #1
    “Effectively, OSGi brings many of the
    desirable aims of SOA into the JVM.quot;”




    Paul Fremantle
    http://pzf.fremantle.org/2009/02/wso2-carbon-
    part-1.html

OSGi tales from the trenches
Famous Quotes, #2
    “Each (OSGi) bundle can serve as a micro
    application, having it's own lifecycle,
    having it's own citizens and each bundle
    can carefully decide which objects to
    expose to the outside world”
    Peter Rietzler
    http://peterrietzler.blogspot.com/2008/12/is-osgi-going-
    to-become-next-ejb-bubble.html


OSGi tales from the trenches
Famous Quotes, #3
    “OSGi is great, but the tooling is not quite
    there yet. Not every library is a bundle and
    many JARs don’t have OSGi manifests”



    Matt Raible in
    http://blog.linkedin.com/2008/06/23/osgi-at-linkedin-
    integrating-spring-dm-part-1/


OSGi tales from the trenches
Famous Quotes, #4
    “The lifecycle model of OSGi makes life
    complicated. Actually, tracking services
    and managing all the aspects of what to
    do when services come and go is nasty”



    Peter Rietzler
    http://peterrietzler.blogspot.com/2008/12/is-osgi-going-
    to-become-next-ejb-bubble.html
OSGi tales from the trenches
Famous Quotes, #5
    “The challenge for the coming year is to
    make OSGi more in line with the
    expectations of the average J2EE
    programmer because we see that need”



    Peter Kriens in a comment at
    http://peterrietzler.blogspot.com/2008/12/is-osgi-going-
    to-become-next-ejb-bubble.html
OSGi tales from the trenches
Famous Quotes, #6
    “OSGi makes quot;impossiblequot; things easy:
    hot deploy/upgrade, service discovery, ...
    and trivial things hard: hibernate, tag
    libraries, even deploying a simple war!”
    But, for the first time in my
    career, I see software reusability
    that works: service reusability.
    Filippo Diotalevi
OSGi tales from the trenches
Our opinion

OSGi tales from the trenches
The Good

OSGi tales from the trenches
Modularity
                                                            OSGi bundle
    Classloading
    distinct from              Public packages

    class visibility.             Metadata




    Bundles as                                     Private packages

    reusable
    components.
    At last!
                                    Matchless picture: Alvimann on morguefile.com
OSGi tales from the trenches
Declarative Services
    /**
    * Excerpts from a Sling Servlet, processes *.query.json requests
    * Uses Felix’s maven-scr-plugin annotations
    * @scr.component immediate=quot;truequot;
    * @scr.service interface=quot;javax.servlet.Servletquot;
    * @scr.property name=quot;sling.servlet.resourceTypesquot; value=quot;sling/servlet/defaultquot;
    * @scr.property name=quot;sling.servlet.extensionsquot; value=quot;jsonquot;
    * @scr.property name=quot;sling.servlet.selectorsquot; value=quot;queryquot;
    */
    public class JsonQueryServlet extends SlingSafeMethodsServlet {
      /** @scr.reference (injected by framework) */
      private SlingRepository repo;

        // activate(ComponentContext) and deactivate(ComponentContext)
        // methods are called by framework if present
              Annotated Java class +
        ...
    }
              Maven plugins == OSGi service
OSGi tales from the trenches
Clean API




   Just a few
   basic examples...

OSGi tales from the trenches
Dynamic loading / unloading
      Just copy bundle jar
      to Sling’s JCR
      repository (WebDAV)




                               Bundle activated
                               and started.
                               (using Sling’s jcrinstall module)

OSGi tales from the trenches
Plugins for everything
                                        Content editors based on
       Servlets                           JCR node properties

                               Mime-type based handlers
     Debugging/monitoring tools
                    Content renderers and decorators
                                  Legacy integration gateways
     Mail and messaging services
                               etc, etc...
OSGi tales from the trenches
Plugins: ServiceTracker
   // Enumerate currently available AuthenticationHandler
   // services, and select the one to use
   ServiceTracker st = new
     ServiceTracker( bundleContext,
     AuthenticationHandler.class.getName());
   ServiceReference[] sr = st.getServiceReferences();

   for (int i = 0; i < sr.length; i++) {
     AuthenticationHandler h = (AuthenticationHandler)
       authHandlerTracker.getService(services[i]);
   // ...

OSGi tales from the trenches
Legacy/customer code
                                                          OSGi bundle
    Ugly or
    incompatible               Public packages

    code                          Metadata

    segregated
    via private
    packages                                     Private packages




OSGi tales from the trenches
Private / public packages
    maven-bundle-plugin instructions:
    <Export-Package>
     sling.jcr.jackrabbit.server.security
    </Export-Package>

    <Private-Package>
    sling.jcr.jackrabbit.server.impl.*
    </Private-Package>

OSGi tales from the trenches
The Bad

OSGi tales from the trenches
Granularity is a hard problem
    How many bundles?
    > 100 currently in cq5

    How to handle “implementation details”
    libraries.
    Extra bundles or private packages?

    Strict version management required.
    Are we there yet?
OSGi tales from the trenches
Clean up those packages!
                                                           OSGi bundle
    Clean
    separation of              Public packages

    interface and                 Metadata

    implementation
    packages
    required                                      Private packages




                               but               when done!

OSGi tales from the trenches
Integration testing required
                     V4.22                                         V4.5      V7.4
      V1.03                           V3.21
                                                  V3.22

                                                                   V4.2
          V5.11                V5.3                                         V2.13
                                          V6.54
                                                           V1.05
   In-system                                      V1.11                      V6.4
                             V1.03

   testing?                              V3.4                      V6.4
                                                    V3.2
                                                                          V5.43
                               V3.2
              V2.4

                                              but                  when done!
   V5.6


OSGi tales from the trenches
Is OSGi scary?
    “OSGi is difficult to sell - it is adopted in
    some really visible products,like
    websphere, glassfish, eclipse, but people
    don't know that.” (Filippo Diotalevi)


                    Why so many bundles?
      Where’s my J2EE?   Is the book ready?
                 Whaddyamean “provisioning”?
OSGi tales from the trenches
Is it too early?
    me: Starting two years later might have
    helped avoid initial pains and incomplete
    implementations.

    Felix Meschberger: If we would have done
    that, we would be nowhere near where
    we are now!
    Server-side OSGi is still fairly new...
OSGi tales from the trenches
The Ugly

OSGi tales from the trenches
Asynchronous startup
                            7                                               14
                                                11                                       17
                       V4.22                                           V4.5         V7.4
                                                              15
    1 V1.03                                V3.21
                                                          V3.22

                                       11                                   3
                                                                       V4.2
                                                      2                                  10
           V5.11                V5.3                                                V2.13
          19                                   V6.54
                                                                 16
                                                              V1.05
                                                       Threading
                                       5                    6
 “unpredictable”                                        V1.11
                                                                                         18
                                                                                    V6.4
                                                        issues?
                               V1.03
                                                   13
 startup order                                                          8
                                               V3.4                    V6.4
                                       12                         4
                                                           V3.2
                                                                                     9
                                                                                 V5.43
                      19        V3.2
               V2.4
                           Is the system ready now?
          20
   V5.6
                                           Caused by Declarative Services, not by OSGi itself.

OSGi tales from the trenches
Unpredictable assemblies
                     V4.22                                         V4.5      V7.4
      V1.03                           V3.21
                                                  V3.22

                                                                   V4.2
          V5.11                V5.3                                         V2.13
                                          V6.54
                                                           V1.05
                                                  V1.11                      V6.4
                             V1.03
                                         V3.4                      V6.4
                                                    V3.2
                                                                          V5.43
                               V3.2
              V2.4
                       Spot the monsters!
                       Security and lots of discipline would help
   V5.6


OSGi tales from the trenches
Testing

OSGi tales from the trenches
Testing?
                                                                   Integration
         JUnit
                                        JUnit                        testing,
      and mocks,
                                     with OSGI                    OSGi, HTTP
       no OSGi


    Test the code                 Test bundles Test assemblies
      Required.                     in realistic   in realistic
      Sufficient?                   conditions     conditions
     Many examples in Sling    We don’t use this at this time. Sling launchpad and jcrinstall


OSGi tales from the trenches
JUnit testing w/mocks
           JUnit                                                  Example, using jmock.org:
        and mocks,
                                                                  JsonReaderTest in Sling’s contentloader module.
         no OSGi

                                                                  @org.junit.Test public void testEmptyObject()
       No OSGi needed,
                                                                  throws Exception {
       fast!
                                                                    this.mockery.checking(new Expectations() {{
       But what am I
                                                                      allowing(creator).createNode(null, null, null);
       testing exactly?
                                                                      inSequence(mySequence);
       Sometimes hard to
                                                                      allowing(creator).finishNode();
       follow or modify.
                                                                      inSequence(mySequence);
                                                                  }});
                                                                  this.parse(quot;quot;); }
https://svn.eu.apache.org/repos/asf/incubator/sling/trunk/bundles/jcr/contentloader/src/test/java/org/apache/sling/jcr/contentloader/internal/JsonReaderTest.java



OSGi tales from the trenches
Integration tests, OSGi + HTTP
                                                     Bundles under test
             cargo-maven2 plugin starts webapp



             surefire-plugin runs tests
                                         HTTP


                                         HTTP        Felix OSGi console

                                                     Felix OSGi framework

                                                    Sling app (cargo-maven2 plugin)
                 JUnit tests
   Maven
                                          Examples in Sling’s launchpad/testing
                                          and jcrinstall modules.
OSGi tales from the trenches
Integration test: JsonRenderingTest
    public void testRecursiveInfinity() throws IOException {

         final Map<String, String> props = new HashMap<String, String>();
         props.put(quot;textquot;, testText);
         props.put(quot;a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/yquot;, quot;yesquot;);
         final String url = testClient.createNode(postUrl, props);

         final String json = getContent(url + quot;.infinity.jsonquot;,
                                                                     Simulate actual
           CONTENT_TYPE_JSON);                                       usage!
         assertJavascript(testText, json, quot;out.print(data.text)quot;);
         assertJavascript(quot;yesquot;, json,
           quot;out.print(data.a.b.c.d.e.f.g.h.i.j.k.l.m.n.o.p.q.r.s.t.u.v.w.x.y)quot;);
     }

OSGi tales from the trenches
Unpredictable assemblies
                     V4.22                                         V4.5      V7.4
      V1.03                           V3.21
                                                  V3.22

                                                                   V4.2
          V5.11                V5.3                                         V2.13
                                          V6.54
                                                           V1.05
                                                  V1.11                      V6.4
                             V1.03
                                         V3.4                      V6.4
                                                    V3.2
                                                                          V5.43
                               V3.2
              V2.4
                       Integration testing helps!
   V5.6


OSGi tales from the trenches
The Future

OSGi tales from the trenches
OSGi @day, 2 years from now
    Developers got used to it (and
    read the book).

    Frameworks and tools improved.

    Distributed OSGi? Maybe.

    Customers understand OSGi and like it..

    Apache Sling paved the way.
OSGi tales from the trenches
Do we need more features?
    Today we use:
    Bundles (using Maven plugins)
    Lifecycle, Service Tracker
    Configurations and Felix Web Console
    Declarative Services (using Maven plugins)
    Sling’s jcrinstall module
    Log, HTTP, Event services

    Later:
    Deployment packages. Security maybe.
    More? Not really - tame what we use!
OSGi tales from the trenches
Conclusions
    Good? Bad? Ugly?




OSGi tales from the trenches
Conclusions
               OSGi is great for modularity

               OSGi fosters better structured code

               Dynamic services and plugins

               Tooling needs to improve, but usable

               OSGi skills need to improve!

               Asynchronous startup can be problematic
               if using declarative services
OSGi tales from the trenches

More Related Content

What's hot

Service oriented web development with OSGi
Service oriented web development with OSGiService oriented web development with OSGi
Service oriented web development with OSGiCarsten Ziegeler
 
Nuxeo WebEngine and GlassFish v3
Nuxeo WebEngine and GlassFish v3Nuxeo WebEngine and GlassFish v3
Nuxeo WebEngine and GlassFish v3Nuxeo
 
Play! Framework for JavaEE Developers
Play! Framework for JavaEE DevelopersPlay! Framework for JavaEE Developers
Play! Framework for JavaEE DevelopersTeng Shiu Huang
 
The Web on OSGi: Here's How
The Web on OSGi: Here's HowThe Web on OSGi: Here's How
The Web on OSGi: Here's Howmrdon
 
Web application development using Play Framework (with Java)
Web application development using Play Framework (with Java)Web application development using Play Framework (with Java)
Web application development using Play Framework (with Java)Saeed Zarinfam
 
OSGi in 5 minutes
OSGi in 5 minutesOSGi in 5 minutes
OSGi in 5 minutesSerge Huber
 
Introduction to OSGGi
Introduction to OSGGiIntroduction to OSGGi
Introduction to OSGGiMarek Koniew
 
Connect2017 DEV-1550 Why Java 8? Or, What's a Lambda?
Connect2017 DEV-1550 Why Java 8? Or, What's a Lambda?Connect2017 DEV-1550 Why Java 8? Or, What's a Lambda?
Connect2017 DEV-1550 Why Java 8? Or, What's a Lambda?Julian Robichaux
 
Discuss about java 9 with latest features
Discuss about java 9 with latest featuresDiscuss about java 9 with latest features
Discuss about java 9 with latest featuresNexSoftsys
 
Ansible with oci
Ansible with ociAnsible with oci
Ansible with ociDonghuKIM2
 
플랫폼 통합을 위한 Client Module 개발 & 배포
플랫폼 통합을 위한 Client Module 개발 & 배포플랫폼 통합을 위한 Client Module 개발 & 배포
플랫폼 통합을 위한 Client Module 개발 & 배포흥래 김
 

What's hot (20)

Service oriented web development with OSGi
Service oriented web development with OSGiService oriented web development with OSGi
Service oriented web development with OSGi
 
Web Space10 Overview
Web Space10 OverviewWeb Space10 Overview
Web Space10 Overview
 
GlassFish v3 : En Route Java EE 6
GlassFish v3 : En Route Java EE 6GlassFish v3 : En Route Java EE 6
GlassFish v3 : En Route Java EE 6
 
Project Fuji/OpenESB Aquarium Paris
Project Fuji/OpenESB Aquarium ParisProject Fuji/OpenESB Aquarium Paris
Project Fuji/OpenESB Aquarium Paris
 
Nuxeo WebEngine and GlassFish v3
Nuxeo WebEngine and GlassFish v3Nuxeo WebEngine and GlassFish v3
Nuxeo WebEngine and GlassFish v3
 
GlassFish v3 Prelude Aquarium Paris
GlassFish v3 Prelude Aquarium ParisGlassFish v3 Prelude Aquarium Paris
GlassFish v3 Prelude Aquarium Paris
 
Java EE 6
Java EE 6Java EE 6
Java EE 6
 
Play! Framework for JavaEE Developers
Play! Framework for JavaEE DevelopersPlay! Framework for JavaEE Developers
Play! Framework for JavaEE Developers
 
Technology Radar Talks - NuGet
Technology Radar Talks - NuGetTechnology Radar Talks - NuGet
Technology Radar Talks - NuGet
 
The Web on OSGi: Here's How
The Web on OSGi: Here's HowThe Web on OSGi: Here's How
The Web on OSGi: Here's How
 
Web application development using Play Framework (with Java)
Web application development using Play Framework (with Java)Web application development using Play Framework (with Java)
Web application development using Play Framework (with Java)
 
OSGi in 5 minutes
OSGi in 5 minutesOSGi in 5 minutes
OSGi in 5 minutes
 
Java EE 6 Aquarium Paris
Java EE 6 Aquarium ParisJava EE 6 Aquarium Paris
Java EE 6 Aquarium Paris
 
Introduction to OSGGi
Introduction to OSGGiIntroduction to OSGGi
Introduction to OSGGi
 
Java FX Tools Aquarium Paris
Java FX Tools Aquarium ParisJava FX Tools Aquarium Paris
Java FX Tools Aquarium Paris
 
Connect2017 DEV-1550 Why Java 8? Or, What's a Lambda?
Connect2017 DEV-1550 Why Java 8? Or, What's a Lambda?Connect2017 DEV-1550 Why Java 8? Or, What's a Lambda?
Connect2017 DEV-1550 Why Java 8? Or, What's a Lambda?
 
Discuss about java 9 with latest features
Discuss about java 9 with latest featuresDiscuss about java 9 with latest features
Discuss about java 9 with latest features
 
Ansible with oci
Ansible with ociAnsible with oci
Ansible with oci
 
JavaCro'14 - Securing web applications with Spring Security 3 – Fernando Redo...
JavaCro'14 - Securing web applications with Spring Security 3 – Fernando Redo...JavaCro'14 - Securing web applications with Spring Security 3 – Fernando Redo...
JavaCro'14 - Securing web applications with Spring Security 3 – Fernando Redo...
 
플랫폼 통합을 위한 Client Module 개발 & 배포
플랫폼 통합을 위한 Client Module 개발 & 배포플랫폼 통합을 위한 Client Module 개발 & 배포
플랫폼 통합을 위한 Client Module 개발 & 배포
 

Viewers also liked

Open Innovation means Open Source
Open Innovation means Open SourceOpen Innovation means Open Source
Open Innovation means Open SourceBertrand Delacretaz
 
Open Innovation means Open Source
Open Innovation means Open SourceOpen Innovation means Open Source
Open Innovation means Open SourceBertrand Delacretaz
 
It's just a Web server - a plea for simplicity
It's just a Web server - a plea for simplicityIt's just a Web server - a plea for simplicity
It's just a Web server - a plea for simplicityBertrand Delacretaz
 
Tips From the Trenches
Tips From the TrenchesTips From the Trenches
Tips From the TrenchesEric Langhorst
 
Lessons From The Trenches
Lessons From The TrenchesLessons From The Trenches
Lessons From The TrenchesVishwakiran V
 
Life in Open Source Communities, ApacheCon US 2009
Life in Open Source Communities, ApacheCon US 2009Life in Open Source Communities, ApacheCon US 2009
Life in Open Source Communities, ApacheCon US 2009Bertrand Delacretaz
 
Open Source Tools Are Good For You!
Open Source Tools Are Good For You!Open Source Tools Are Good For You!
Open Source Tools Are Good For You!Bertrand Delacretaz
 
Open-Source Collaboration Tools are Good for You - 2009 edition
Open-Source Collaboration Tools are Good for You - 2009 editionOpen-Source Collaboration Tools are Good for You - 2009 edition
Open-Source Collaboration Tools are Good for You - 2009 editionBertrand Delacretaz
 
Rock and Minerals
Rock and MineralsRock and Minerals
Rock and Mineralstcooper66
 
2.2 active faults & other earthquakes source zones
2.2 active faults & other earthquakes source zones2.2 active faults & other earthquakes source zones
2.2 active faults & other earthquakes source zonesMakati Science High School
 
Latitude and longitude
Latitude and longitudeLatitude and longitude
Latitude and longitudeHeidi Parker
 
Earth’s landmasses nn
Earth’s landmasses nnEarth’s landmasses nn
Earth’s landmasses nnArvin Diaz
 
08 Rainfall Ppt 08
08   Rainfall Ppt 0808   Rainfall Ppt 08
08 Rainfall Ppt 08ganesh092929
 
Landforms and water bodies
Landforms and water bodiesLandforms and water bodies
Landforms and water bodiesNikhil Marwaha
 
Landforms and bodies of water
Landforms and bodies of waterLandforms and bodies of water
Landforms and bodies of waterJoGono
 

Viewers also liked (20)

Open Innovation means Open Source
Open Innovation means Open SourceOpen Innovation means Open Source
Open Innovation means Open Source
 
Open Innovation means Open Source
Open Innovation means Open SourceOpen Innovation means Open Source
Open Innovation means Open Source
 
Taming Jcr With Sling
Taming Jcr With SlingTaming Jcr With Sling
Taming Jcr With Sling
 
It's just a Web server - a plea for simplicity
It's just a Web server - a plea for simplicityIt's just a Web server - a plea for simplicity
It's just a Web server - a plea for simplicity
 
Tips From the Trenches
Tips From the TrenchesTips From the Trenches
Tips From the Trenches
 
Lessons From The Trenches
Lessons From The TrenchesLessons From The Trenches
Lessons From The Trenches
 
Life in Open Source Communities, ApacheCon US 2009
Life in Open Source Communities, ApacheCon US 2009Life in Open Source Communities, ApacheCon US 2009
Life in Open Source Communities, ApacheCon US 2009
 
Open Source Tools Are Good For You!
Open Source Tools Are Good For You!Open Source Tools Are Good For You!
Open Source Tools Are Good For You!
 
Open-Source Collaboration Tools are Good for You - 2009 edition
Open-Source Collaboration Tools are Good for You - 2009 editionOpen-Source Collaboration Tools are Good for You - 2009 edition
Open-Source Collaboration Tools are Good for You - 2009 edition
 
Rock and Minerals
Rock and MineralsRock and Minerals
Rock and Minerals
 
Plate Tectonics
Plate TectonicsPlate Tectonics
Plate Tectonics
 
2.2 active faults & other earthquakes source zones
2.2 active faults & other earthquakes source zones2.2 active faults & other earthquakes source zones
2.2 active faults & other earthquakes source zones
 
Latitude and longitude
Latitude and longitudeLatitude and longitude
Latitude and longitude
 
Earth’s landmasses nn
Earth’s landmasses nnEarth’s landmasses nn
Earth’s landmasses nn
 
Rocks and Minerals
Rocks and MineralsRocks and Minerals
Rocks and Minerals
 
08 Rainfall Ppt 08
08   Rainfall Ppt 0808   Rainfall Ppt 08
08 Rainfall Ppt 08
 
Landforms and water bodies
Landforms and water bodiesLandforms and water bodies
Landforms and water bodies
 
Soil As A Resource
Soil As A ResourceSoil As A Resource
Soil As A Resource
 
Landforms and bodies of water
Landforms and bodies of waterLandforms and bodies of water
Landforms and bodies of water
 
JCR In 10 Minutes
JCR In 10 MinutesJCR In 10 Minutes
JCR In 10 Minutes
 

Similar to Tales from the OSGi trenches

OpenDaylight Developer Experience 2.0
 OpenDaylight Developer Experience 2.0 OpenDaylight Developer Experience 2.0
OpenDaylight Developer Experience 2.0Michael Vorburger
 
Introduction to EclipseRT (JAX 2010)
Introduction to EclipseRT (JAX 2010)Introduction to EclipseRT (JAX 2010)
Introduction to EclipseRT (JAX 2010)Chris Aniszczyk
 
Runtime Diagnosis of Stale References in the OSGi Services Platform - Kiev Ga...
Runtime Diagnosis of Stale References in the OSGi Services Platform - Kiev Ga...Runtime Diagnosis of Stale References in the OSGi Services Platform - Kiev Ga...
Runtime Diagnosis of Stale References in the OSGi Services Platform - Kiev Ga...mfrancis
 
Managing large and distributed Eclipse server applications.
Managing large and distributed Eclipse server applications.Managing large and distributed Eclipse server applications.
Managing large and distributed Eclipse server applications.Gunnar Wagenknecht
 
OSGi DevCon 2009 Review
OSGi DevCon 2009 ReviewOSGi DevCon 2009 Review
OSGi DevCon 2009 Reviewnjbartlett
 
Tales from the OSGi Trenches - Bertrand Delacretaz
Tales from the OSGi Trenches - Bertrand DelacretazTales from the OSGi Trenches - Bertrand Delacretaz
Tales from the OSGi Trenches - Bertrand Delacretazmfrancis
 
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
 
OSGi and Java EE in GlassFish - Tech Days 2010 India
OSGi and Java EE in GlassFish - Tech Days 2010 IndiaOSGi and Java EE in GlassFish - Tech Days 2010 India
OSGi and Java EE in GlassFish - Tech Days 2010 IndiaArun Gupta
 
Cannibalising The Google App Engine
Cannibalising The  Google  App  EngineCannibalising The  Google  App  Engine
Cannibalising The Google App Enginecatherinewall
 
The OSGi Framework Multiplication
The OSGi Framework MultiplicationThe OSGi Framework Multiplication
The OSGi Framework MultiplicationClément Escoffier
 
Introduction to Groovy Monkey
Introduction to Groovy MonkeyIntroduction to Groovy Monkey
Introduction to Groovy Monkeyjervin
 
EclipseRT, Equinox and OSGi
EclipseRT, Equinox and OSGiEclipseRT, Equinox and OSGi
EclipseRT, Equinox and OSGiChris Aniszczyk
 
Escape the defaults - Configure Sling like AEM as a Cloud Service
Escape the defaults - Configure Sling like AEM as a Cloud ServiceEscape the defaults - Configure Sling like AEM as a Cloud Service
Escape the defaults - Configure Sling like AEM as a Cloud ServiceRobert Munteanu
 
OSGi-enabled Java EE applications in GlassFish
OSGi-enabled Java EE applications in GlassFishOSGi-enabled Java EE applications in GlassFish
OSGi-enabled Java EE applications in GlassFishArun Gupta
 
IoT gateway dream team - Eclipse Kura and Apache Camel
IoT gateway dream team - Eclipse Kura and Apache CamelIoT gateway dream team - Eclipse Kura and Apache Camel
IoT gateway dream team - Eclipse Kura and Apache CamelHenryk Konsek
 
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
 

Similar to Tales from the OSGi trenches (20)

Polyglot OSGi
Polyglot OSGiPolyglot OSGi
Polyglot OSGi
 
OpenDaylight Developer Experience 2.0
 OpenDaylight Developer Experience 2.0 OpenDaylight Developer Experience 2.0
OpenDaylight Developer Experience 2.0
 
Introduction to EclipseRT (JAX 2010)
Introduction to EclipseRT (JAX 2010)Introduction to EclipseRT (JAX 2010)
Introduction to EclipseRT (JAX 2010)
 
Runtime Diagnosis of Stale References in the OSGi Services Platform - Kiev Ga...
Runtime Diagnosis of Stale References in the OSGi Services Platform - Kiev Ga...Runtime Diagnosis of Stale References in the OSGi Services Platform - Kiev Ga...
Runtime Diagnosis of Stale References in the OSGi Services Platform - Kiev Ga...
 
Managing large and distributed Eclipse server applications.
Managing large and distributed Eclipse server applications.Managing large and distributed Eclipse server applications.
Managing large and distributed Eclipse server applications.
 
OSGi DevCon 2009 Review
OSGi DevCon 2009 ReviewOSGi DevCon 2009 Review
OSGi DevCon 2009 Review
 
Tales from the OSGi Trenches - Bertrand Delacretaz
Tales from the OSGi Trenches - Bertrand DelacretazTales from the OSGi Trenches - Bertrand Delacretaz
Tales from the OSGi Trenches - Bertrand Delacretaz
 
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,...
 
OSGi and Java EE in GlassFish - Tech Days 2010 India
OSGi and Java EE in GlassFish - Tech Days 2010 IndiaOSGi and Java EE in GlassFish - Tech Days 2010 India
OSGi and Java EE in GlassFish - Tech Days 2010 India
 
Jee conf 2015
Jee conf 2015Jee conf 2015
Jee conf 2015
 
Cannibalising The Google App Engine
Cannibalising The  Google  App  EngineCannibalising The  Google  App  Engine
Cannibalising The Google App Engine
 
The OSGi Framework Multiplication
The OSGi Framework MultiplicationThe OSGi Framework Multiplication
The OSGi Framework Multiplication
 
Java modularity: life after Java 9
Java modularity: life after Java 9Java modularity: life after Java 9
Java modularity: life after Java 9
 
Introduction to Groovy Monkey
Introduction to Groovy MonkeyIntroduction to Groovy Monkey
Introduction to Groovy Monkey
 
EclipseRT, Equinox and OSGi
EclipseRT, Equinox and OSGiEclipseRT, Equinox and OSGi
EclipseRT, Equinox and OSGi
 
GlassFish v3 - Architecture
GlassFish v3 - ArchitectureGlassFish v3 - Architecture
GlassFish v3 - Architecture
 
Escape the defaults - Configure Sling like AEM as a Cloud Service
Escape the defaults - Configure Sling like AEM as a Cloud ServiceEscape the defaults - Configure Sling like AEM as a Cloud Service
Escape the defaults - Configure Sling like AEM as a Cloud Service
 
OSGi-enabled Java EE applications in GlassFish
OSGi-enabled Java EE applications in GlassFishOSGi-enabled Java EE applications in GlassFish
OSGi-enabled Java EE applications in GlassFish
 
IoT gateway dream team - Eclipse Kura and Apache Camel
IoT gateway dream team - Eclipse Kura and Apache CamelIoT gateway dream team - Eclipse Kura and Apache Camel
IoT gateway dream team - Eclipse Kura and Apache Camel
 
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...
 

More from Bertrand Delacretaz

VanillaJS & the Web Platform, a match made in heaven?
VanillaJS & the Web Platform, a match made in heaven?VanillaJS & the Web Platform, a match made in heaven?
VanillaJS & the Web Platform, a match made in heaven?Bertrand Delacretaz
 
Surviving large online communities with conciseness and clarity
Surviving large online communities with conciseness and clarity Surviving large online communities with conciseness and clarity
Surviving large online communities with conciseness and clarity Bertrand Delacretaz
 
Repoinit: a mini-language for content repository initialization
Repoinit: a mini-language for content repository initializationRepoinit: a mini-language for content repository initialization
Repoinit: a mini-language for content repository initializationBertrand Delacretaz
 
The Moving House Model, adhocracy and remote collaboration
The Moving House Model, adhocracy and remote collaborationThe Moving House Model, adhocracy and remote collaboration
The Moving House Model, adhocracy and remote collaborationBertrand Delacretaz
 
GraphQL in Apache Sling - but isn't it the opposite of REST?
GraphQL in Apache Sling - but isn't it the opposite of REST?GraphQL in Apache Sling - but isn't it the opposite of REST?
GraphQL in Apache Sling - but isn't it the opposite of REST?Bertrand Delacretaz
 
How to convince your left brain (or manager) to follow the Open Source path t...
How to convince your left brain (or manager) to follow the Open Source path t...How to convince your left brain (or manager) to follow the Open Source path t...
How to convince your left brain (or manager) to follow the Open Source path t...Bertrand Delacretaz
 
L'Open Source change le Monde - BlendWebMix 2019
L'Open Source change le Monde - BlendWebMix 2019L'Open Source change le Monde - BlendWebMix 2019
L'Open Source change le Monde - BlendWebMix 2019Bertrand Delacretaz
 
Shared Neurons - the Secret Sauce of Open Source communities?
Shared Neurons - the Secret Sauce of Open Source communities?Shared Neurons - the Secret Sauce of Open Source communities?
Shared Neurons - the Secret Sauce of Open Source communities?Bertrand Delacretaz
 
Sling and Serverless, Best Friends Forever?
Sling and Serverless, Best Friends Forever?Sling and Serverless, Best Friends Forever?
Sling and Serverless, Best Friends Forever?Bertrand Delacretaz
 
Serverless - introduction et perspectives concrètes
Serverless - introduction et perspectives concrètesServerless - introduction et perspectives concrètes
Serverless - introduction et perspectives concrètesBertrand Delacretaz
 
State of the Feather - ApacheCon North America 2018
State of the Feather - ApacheCon North America 2018State of the Feather - ApacheCon North America 2018
State of the Feather - ApacheCon North America 2018Bertrand Delacretaz
 
Karate, the black belt of HTTP API testing?
Karate, the black belt of HTTP API testing?Karate, the black belt of HTTP API testing?
Karate, the black belt of HTTP API testing?Bertrand Delacretaz
 
Open Source at Scale: the Apache Software Foundation (2018)
Open Source at Scale: the Apache Software Foundation (2018)Open Source at Scale: the Apache Software Foundation (2018)
Open Source at Scale: the Apache Software Foundation (2018)Bertrand Delacretaz
 
They don't understand me! Tales from the multi-cultural trenches
They don't understand me! Tales from the multi-cultural trenchesThey don't understand me! Tales from the multi-cultural trenches
They don't understand me! Tales from the multi-cultural trenchesBertrand Delacretaz
 
Prise de Décisions Asynchrone, Devoxx France 2018 (avec vidéo)
Prise de Décisions Asynchrone, Devoxx France 2018 (avec vidéo)Prise de Décisions Asynchrone, Devoxx France 2018 (avec vidéo)
Prise de Décisions Asynchrone, Devoxx France 2018 (avec vidéo)Bertrand Delacretaz
 
Project and Community Services the Apache Way
Project and Community Services the Apache WayProject and Community Services the Apache Way
Project and Community Services the Apache WayBertrand Delacretaz
 
La Fondation Apache - keynote au Paris Open Source Summit 2017
La Fondation Apache - keynote au Paris Open Source Summit 2017La Fondation Apache - keynote au Paris Open Source Summit 2017
La Fondation Apache - keynote au Paris Open Source Summit 2017Bertrand Delacretaz
 
Asynchronous Decision Making - FOSS Backstage 2017
Asynchronous Decision Making - FOSS Backstage 2017Asynchronous Decision Making - FOSS Backstage 2017
Asynchronous Decision Making - FOSS Backstage 2017Bertrand Delacretaz
 
Building an Apache Sling Rendering Farm
Building an Apache Sling Rendering FarmBuilding an Apache Sling Rendering Farm
Building an Apache Sling Rendering FarmBertrand Delacretaz
 

More from Bertrand Delacretaz (20)

VanillaJS & the Web Platform, a match made in heaven?
VanillaJS & the Web Platform, a match made in heaven?VanillaJS & the Web Platform, a match made in heaven?
VanillaJS & the Web Platform, a match made in heaven?
 
Surviving large online communities with conciseness and clarity
Surviving large online communities with conciseness and clarity Surviving large online communities with conciseness and clarity
Surviving large online communities with conciseness and clarity
 
Repoinit: a mini-language for content repository initialization
Repoinit: a mini-language for content repository initializationRepoinit: a mini-language for content repository initialization
Repoinit: a mini-language for content repository initialization
 
The Moving House Model, adhocracy and remote collaboration
The Moving House Model, adhocracy and remote collaborationThe Moving House Model, adhocracy and remote collaboration
The Moving House Model, adhocracy and remote collaboration
 
GraphQL in Apache Sling - but isn't it the opposite of REST?
GraphQL in Apache Sling - but isn't it the opposite of REST?GraphQL in Apache Sling - but isn't it the opposite of REST?
GraphQL in Apache Sling - but isn't it the opposite of REST?
 
Open Source Changes the World!
Open Source Changes the World!Open Source Changes the World!
Open Source Changes the World!
 
How to convince your left brain (or manager) to follow the Open Source path t...
How to convince your left brain (or manager) to follow the Open Source path t...How to convince your left brain (or manager) to follow the Open Source path t...
How to convince your left brain (or manager) to follow the Open Source path t...
 
L'Open Source change le Monde - BlendWebMix 2019
L'Open Source change le Monde - BlendWebMix 2019L'Open Source change le Monde - BlendWebMix 2019
L'Open Source change le Monde - BlendWebMix 2019
 
Shared Neurons - the Secret Sauce of Open Source communities?
Shared Neurons - the Secret Sauce of Open Source communities?Shared Neurons - the Secret Sauce of Open Source communities?
Shared Neurons - the Secret Sauce of Open Source communities?
 
Sling and Serverless, Best Friends Forever?
Sling and Serverless, Best Friends Forever?Sling and Serverless, Best Friends Forever?
Sling and Serverless, Best Friends Forever?
 
Serverless - introduction et perspectives concrètes
Serverless - introduction et perspectives concrètesServerless - introduction et perspectives concrètes
Serverless - introduction et perspectives concrètes
 
State of the Feather - ApacheCon North America 2018
State of the Feather - ApacheCon North America 2018State of the Feather - ApacheCon North America 2018
State of the Feather - ApacheCon North America 2018
 
Karate, the black belt of HTTP API testing?
Karate, the black belt of HTTP API testing?Karate, the black belt of HTTP API testing?
Karate, the black belt of HTTP API testing?
 
Open Source at Scale: the Apache Software Foundation (2018)
Open Source at Scale: the Apache Software Foundation (2018)Open Source at Scale: the Apache Software Foundation (2018)
Open Source at Scale: the Apache Software Foundation (2018)
 
They don't understand me! Tales from the multi-cultural trenches
They don't understand me! Tales from the multi-cultural trenchesThey don't understand me! Tales from the multi-cultural trenches
They don't understand me! Tales from the multi-cultural trenches
 
Prise de Décisions Asynchrone, Devoxx France 2018 (avec vidéo)
Prise de Décisions Asynchrone, Devoxx France 2018 (avec vidéo)Prise de Décisions Asynchrone, Devoxx France 2018 (avec vidéo)
Prise de Décisions Asynchrone, Devoxx France 2018 (avec vidéo)
 
Project and Community Services the Apache Way
Project and Community Services the Apache WayProject and Community Services the Apache Way
Project and Community Services the Apache Way
 
La Fondation Apache - keynote au Paris Open Source Summit 2017
La Fondation Apache - keynote au Paris Open Source Summit 2017La Fondation Apache - keynote au Paris Open Source Summit 2017
La Fondation Apache - keynote au Paris Open Source Summit 2017
 
Asynchronous Decision Making - FOSS Backstage 2017
Asynchronous Decision Making - FOSS Backstage 2017Asynchronous Decision Making - FOSS Backstage 2017
Asynchronous Decision Making - FOSS Backstage 2017
 
Building an Apache Sling Rendering Farm
Building an Apache Sling Rendering FarmBuilding an Apache Sling Rendering Farm
Building an Apache Sling Rendering Farm
 

Recently uploaded

NIST Cybersecurity Framework (CSF) 2.0 Workshop
NIST Cybersecurity Framework (CSF) 2.0 WorkshopNIST Cybersecurity Framework (CSF) 2.0 Workshop
NIST Cybersecurity Framework (CSF) 2.0 WorkshopBachir Benyammi
 
Bird eye's view on Camunda open source ecosystem
Bird eye's view on Camunda open source ecosystemBird eye's view on Camunda open source ecosystem
Bird eye's view on Camunda open source ecosystemAsko Soukka
 
Artificial Intelligence & SEO Trends for 2024
Artificial Intelligence & SEO Trends for 2024Artificial Intelligence & SEO Trends for 2024
Artificial Intelligence & SEO Trends for 2024D Cloud Solutions
 
Anypoint Code Builder , Google Pub sub connector and MuleSoft RPA
Anypoint Code Builder , Google Pub sub connector and MuleSoft RPAAnypoint Code Builder , Google Pub sub connector and MuleSoft RPA
Anypoint Code Builder , Google Pub sub connector and MuleSoft RPAshyamraj55
 
UiPath Studio Web workshop series - Day 8
UiPath Studio Web workshop series - Day 8UiPath Studio Web workshop series - Day 8
UiPath Studio Web workshop series - Day 8DianaGray10
 
UiPath Studio Web workshop series - Day 6
UiPath Studio Web workshop series - Day 6UiPath Studio Web workshop series - Day 6
UiPath Studio Web workshop series - Day 6DianaGray10
 
Computer 10: Lesson 10 - Online Crimes and Hazards
Computer 10: Lesson 10 - Online Crimes and HazardsComputer 10: Lesson 10 - Online Crimes and Hazards
Computer 10: Lesson 10 - Online Crimes and HazardsSeth Reyes
 
UiPath Community: AI for UiPath Automation Developers
UiPath Community: AI for UiPath Automation DevelopersUiPath Community: AI for UiPath Automation Developers
UiPath Community: AI for UiPath Automation DevelopersUiPathCommunity
 
UiPath Platform: The Backend Engine Powering Your Automation - Session 1
UiPath Platform: The Backend Engine Powering Your Automation - Session 1UiPath Platform: The Backend Engine Powering Your Automation - Session 1
UiPath Platform: The Backend Engine Powering Your Automation - Session 1DianaGray10
 
Machine Learning Model Validation (Aijun Zhang 2024).pdf
Machine Learning Model Validation (Aijun Zhang 2024).pdfMachine Learning Model Validation (Aijun Zhang 2024).pdf
Machine Learning Model Validation (Aijun Zhang 2024).pdfAijun Zhang
 
The Data Metaverse: Unpacking the Roles, Use Cases, and Tech Trends in Data a...
The Data Metaverse: Unpacking the Roles, Use Cases, and Tech Trends in Data a...The Data Metaverse: Unpacking the Roles, Use Cases, and Tech Trends in Data a...
The Data Metaverse: Unpacking the Roles, Use Cases, and Tech Trends in Data a...Aggregage
 
Meet the new FSP 3000 M-Flex800™
Meet the new FSP 3000 M-Flex800™Meet the new FSP 3000 M-Flex800™
Meet the new FSP 3000 M-Flex800™Adtran
 
Digital magic. A small project for controlling smart light bulbs.
Digital magic. A small project for controlling smart light bulbs.Digital magic. A small project for controlling smart light bulbs.
Digital magic. A small project for controlling smart light bulbs.francesco barbera
 
9 Steps For Building Winning Founding Team
9 Steps For Building Winning Founding Team9 Steps For Building Winning Founding Team
9 Steps For Building Winning Founding TeamAdam Moalla
 
UiPath Solutions Management Preview - Northern CA Chapter - March 22.pdf
UiPath Solutions Management Preview - Northern CA Chapter - March 22.pdfUiPath Solutions Management Preview - Northern CA Chapter - March 22.pdf
UiPath Solutions Management Preview - Northern CA Chapter - March 22.pdfDianaGray10
 
GenAI and AI GCC State of AI_Object Automation Inc
GenAI and AI GCC State of AI_Object Automation IncGenAI and AI GCC State of AI_Object Automation Inc
GenAI and AI GCC State of AI_Object Automation IncObject Automation
 
Secure your environment with UiPath and CyberArk technologies - Session 1
Secure your environment with UiPath and CyberArk technologies - Session 1Secure your environment with UiPath and CyberArk technologies - Session 1
Secure your environment with UiPath and CyberArk technologies - Session 1DianaGray10
 
Things you didn't know you can use in your Salesforce
Things you didn't know you can use in your SalesforceThings you didn't know you can use in your Salesforce
Things you didn't know you can use in your SalesforceMartin Humpolec
 
Designing A Time bound resource download URL
Designing A Time bound resource download URLDesigning A Time bound resource download URL
Designing A Time bound resource download URLRuncy Oommen
 
COMPUTER 10: Lesson 7 - File Storage and Online Collaboration
COMPUTER 10: Lesson 7 - File Storage and Online CollaborationCOMPUTER 10: Lesson 7 - File Storage and Online Collaboration
COMPUTER 10: Lesson 7 - File Storage and Online Collaborationbruanjhuli
 

Recently uploaded (20)

NIST Cybersecurity Framework (CSF) 2.0 Workshop
NIST Cybersecurity Framework (CSF) 2.0 WorkshopNIST Cybersecurity Framework (CSF) 2.0 Workshop
NIST Cybersecurity Framework (CSF) 2.0 Workshop
 
Bird eye's view on Camunda open source ecosystem
Bird eye's view on Camunda open source ecosystemBird eye's view on Camunda open source ecosystem
Bird eye's view on Camunda open source ecosystem
 
Artificial Intelligence & SEO Trends for 2024
Artificial Intelligence & SEO Trends for 2024Artificial Intelligence & SEO Trends for 2024
Artificial Intelligence & SEO Trends for 2024
 
Anypoint Code Builder , Google Pub sub connector and MuleSoft RPA
Anypoint Code Builder , Google Pub sub connector and MuleSoft RPAAnypoint Code Builder , Google Pub sub connector and MuleSoft RPA
Anypoint Code Builder , Google Pub sub connector and MuleSoft RPA
 
UiPath Studio Web workshop series - Day 8
UiPath Studio Web workshop series - Day 8UiPath Studio Web workshop series - Day 8
UiPath Studio Web workshop series - Day 8
 
UiPath Studio Web workshop series - Day 6
UiPath Studio Web workshop series - Day 6UiPath Studio Web workshop series - Day 6
UiPath Studio Web workshop series - Day 6
 
Computer 10: Lesson 10 - Online Crimes and Hazards
Computer 10: Lesson 10 - Online Crimes and HazardsComputer 10: Lesson 10 - Online Crimes and Hazards
Computer 10: Lesson 10 - Online Crimes and Hazards
 
UiPath Community: AI for UiPath Automation Developers
UiPath Community: AI for UiPath Automation DevelopersUiPath Community: AI for UiPath Automation Developers
UiPath Community: AI for UiPath Automation Developers
 
UiPath Platform: The Backend Engine Powering Your Automation - Session 1
UiPath Platform: The Backend Engine Powering Your Automation - Session 1UiPath Platform: The Backend Engine Powering Your Automation - Session 1
UiPath Platform: The Backend Engine Powering Your Automation - Session 1
 
Machine Learning Model Validation (Aijun Zhang 2024).pdf
Machine Learning Model Validation (Aijun Zhang 2024).pdfMachine Learning Model Validation (Aijun Zhang 2024).pdf
Machine Learning Model Validation (Aijun Zhang 2024).pdf
 
The Data Metaverse: Unpacking the Roles, Use Cases, and Tech Trends in Data a...
The Data Metaverse: Unpacking the Roles, Use Cases, and Tech Trends in Data a...The Data Metaverse: Unpacking the Roles, Use Cases, and Tech Trends in Data a...
The Data Metaverse: Unpacking the Roles, Use Cases, and Tech Trends in Data a...
 
Meet the new FSP 3000 M-Flex800™
Meet the new FSP 3000 M-Flex800™Meet the new FSP 3000 M-Flex800™
Meet the new FSP 3000 M-Flex800™
 
Digital magic. A small project for controlling smart light bulbs.
Digital magic. A small project for controlling smart light bulbs.Digital magic. A small project for controlling smart light bulbs.
Digital magic. A small project for controlling smart light bulbs.
 
9 Steps For Building Winning Founding Team
9 Steps For Building Winning Founding Team9 Steps For Building Winning Founding Team
9 Steps For Building Winning Founding Team
 
UiPath Solutions Management Preview - Northern CA Chapter - March 22.pdf
UiPath Solutions Management Preview - Northern CA Chapter - March 22.pdfUiPath Solutions Management Preview - Northern CA Chapter - March 22.pdf
UiPath Solutions Management Preview - Northern CA Chapter - March 22.pdf
 
GenAI and AI GCC State of AI_Object Automation Inc
GenAI and AI GCC State of AI_Object Automation IncGenAI and AI GCC State of AI_Object Automation Inc
GenAI and AI GCC State of AI_Object Automation Inc
 
Secure your environment with UiPath and CyberArk technologies - Session 1
Secure your environment with UiPath and CyberArk technologies - Session 1Secure your environment with UiPath and CyberArk technologies - Session 1
Secure your environment with UiPath and CyberArk technologies - Session 1
 
Things you didn't know you can use in your Salesforce
Things you didn't know you can use in your SalesforceThings you didn't know you can use in your Salesforce
Things you didn't know you can use in your Salesforce
 
Designing A Time bound resource download URL
Designing A Time bound resource download URLDesigning A Time bound resource download URL
Designing A Time bound resource download URL
 
COMPUTER 10: Lesson 7 - File Storage and Online Collaboration
COMPUTER 10: Lesson 7 - File Storage and Online CollaborationCOMPUTER 10: Lesson 7 - File Storage and Online Collaboration
COMPUTER 10: Lesson 7 - File Storage and Online Collaboration
 

Tales from the OSGi trenches

  • 1. OSGi Tales from the Trenches Bertrand Delacretaz Senior R&D Developer, Day Software, www.day.com Apache Software Foundation Member and Director bdelacretaz@apache.org blog: http://grep.codeconsult.ch twitter: @bdelacretaz Special thanks to: ApacheCon Europe 2009, Amsterdam Filippo Diotalevi (osgilook.com) slides revision: 2009-03-25 and The Day R&D team for additional input! OSGi tales from the trenches
  • 2. What? Share our experience using Apache Felix at Day, for a major rewrite of our content management products. More than two years working with OSGi, very high impact on developers, customers, service people, mostly in a positive way. OSGi is no silver bullet either. silve r OSGi tales from the trenches
  • 3. Ok but what? the GOOD the BAD the UGLY and the FUTURE symbols by ppdigital , o0o0xmods0o0oon and clarita, on morguefile.com OSGi tales from the trenches
  • 5. First a warning is not an OSGi guru! I’m just a poor lonesome user... OSGi tales from the trenches
  • 6. OSGi ? OSGi™ The Dynamic Module System for Java™ http://www.osgi.org (see also Wikipedia) Consortium founded 1999, 100 companies. Initially meant for mobile devices. Now moving to server-side, fast. Eclipse, LinkedIn, GlassFish, WSO2, WebSphere and many others. @apache: Felix, ServiceMix, Sling, CXF, Tuscany and more, growing. OSGi tales from the trenches
  • 7. Trenches? family of content management products, R&D team of about 30 built on Apache Sling, http://www.day.com/cq5 http://jackrabbit.apache.org uses Apache Felix and http://felix.apache.org Jackrabbit http://incubator.apache.org/sling OSGi tales from the trenches
  • 8. What we use from OSGi Bundles (using Maven plugins) Lifecycle, Service Tracker Configurations and Felix Web Console Declarative Services (using Maven plugins) Sling’s jcrinstall module (bundles and configs loaded from the JCR repository) Log, HTTP, Event services presented by Carsten at 10:30 OSGi tales from the trenches
  • 9. Famous quotes OSGi tales from the trenches
  • 10. Famous Quotes, #1 “Effectively, OSGi brings many of the desirable aims of SOA into the JVM.quot;” Paul Fremantle http://pzf.fremantle.org/2009/02/wso2-carbon- part-1.html OSGi tales from the trenches
  • 11. Famous Quotes, #2 “Each (OSGi) bundle can serve as a micro application, having it's own lifecycle, having it's own citizens and each bundle can carefully decide which objects to expose to the outside world” Peter Rietzler http://peterrietzler.blogspot.com/2008/12/is-osgi-going- to-become-next-ejb-bubble.html OSGi tales from the trenches
  • 12. Famous Quotes, #3 “OSGi is great, but the tooling is not quite there yet. Not every library is a bundle and many JARs don’t have OSGi manifests” Matt Raible in http://blog.linkedin.com/2008/06/23/osgi-at-linkedin- integrating-spring-dm-part-1/ OSGi tales from the trenches
  • 13. Famous Quotes, #4 “The lifecycle model of OSGi makes life complicated. Actually, tracking services and managing all the aspects of what to do when services come and go is nasty” Peter Rietzler http://peterrietzler.blogspot.com/2008/12/is-osgi-going- to-become-next-ejb-bubble.html OSGi tales from the trenches
  • 14. Famous Quotes, #5 “The challenge for the coming year is to make OSGi more in line with the expectations of the average J2EE programmer because we see that need” Peter Kriens in a comment at http://peterrietzler.blogspot.com/2008/12/is-osgi-going- to-become-next-ejb-bubble.html OSGi tales from the trenches
  • 15. Famous Quotes, #6 “OSGi makes quot;impossiblequot; things easy: hot deploy/upgrade, service discovery, ... and trivial things hard: hibernate, tag libraries, even deploying a simple war!” But, for the first time in my career, I see software reusability that works: service reusability. Filippo Diotalevi OSGi tales from the trenches
  • 16. Our opinion OSGi tales from the trenches
  • 17. The Good OSGi tales from the trenches
  • 18. Modularity OSGi bundle Classloading distinct from Public packages class visibility. Metadata Bundles as Private packages reusable components. At last! Matchless picture: Alvimann on morguefile.com OSGi tales from the trenches
  • 19. Declarative Services /** * Excerpts from a Sling Servlet, processes *.query.json requests * Uses Felix’s maven-scr-plugin annotations * @scr.component immediate=quot;truequot; * @scr.service interface=quot;javax.servlet.Servletquot; * @scr.property name=quot;sling.servlet.resourceTypesquot; value=quot;sling/servlet/defaultquot; * @scr.property name=quot;sling.servlet.extensionsquot; value=quot;jsonquot; * @scr.property name=quot;sling.servlet.selectorsquot; value=quot;queryquot; */ public class JsonQueryServlet extends SlingSafeMethodsServlet { /** @scr.reference (injected by framework) */ private SlingRepository repo; // activate(ComponentContext) and deactivate(ComponentContext) // methods are called by framework if present Annotated Java class + ... } Maven plugins == OSGi service OSGi tales from the trenches
  • 20. Clean API Just a few basic examples... OSGi tales from the trenches
  • 21. Dynamic loading / unloading Just copy bundle jar to Sling’s JCR repository (WebDAV) Bundle activated and started. (using Sling’s jcrinstall module) OSGi tales from the trenches
  • 22. Plugins for everything Content editors based on Servlets JCR node properties Mime-type based handlers Debugging/monitoring tools Content renderers and decorators Legacy integration gateways Mail and messaging services etc, etc... OSGi tales from the trenches
  • 23. Plugins: ServiceTracker // Enumerate currently available AuthenticationHandler // services, and select the one to use ServiceTracker st = new ServiceTracker( bundleContext, AuthenticationHandler.class.getName()); ServiceReference[] sr = st.getServiceReferences(); for (int i = 0; i < sr.length; i++) { AuthenticationHandler h = (AuthenticationHandler) authHandlerTracker.getService(services[i]); // ... OSGi tales from the trenches
  • 24. Legacy/customer code OSGi bundle Ugly or incompatible Public packages code Metadata segregated via private packages Private packages OSGi tales from the trenches
  • 25. Private / public packages maven-bundle-plugin instructions: <Export-Package> sling.jcr.jackrabbit.server.security </Export-Package> <Private-Package> sling.jcr.jackrabbit.server.impl.* </Private-Package> OSGi tales from the trenches
  • 26. The Bad OSGi tales from the trenches
  • 27. Granularity is a hard problem How many bundles? > 100 currently in cq5 How to handle “implementation details” libraries. Extra bundles or private packages? Strict version management required. Are we there yet? OSGi tales from the trenches
  • 28. Clean up those packages! OSGi bundle Clean separation of Public packages interface and Metadata implementation packages required Private packages but when done! OSGi tales from the trenches
  • 29. Integration testing required V4.22 V4.5 V7.4 V1.03 V3.21 V3.22 V4.2 V5.11 V5.3 V2.13 V6.54 V1.05 In-system V1.11 V6.4 V1.03 testing? V3.4 V6.4 V3.2 V5.43 V3.2 V2.4 but when done! V5.6 OSGi tales from the trenches
  • 30. Is OSGi scary? “OSGi is difficult to sell - it is adopted in some really visible products,like websphere, glassfish, eclipse, but people don't know that.” (Filippo Diotalevi) Why so many bundles? Where’s my J2EE? Is the book ready? Whaddyamean “provisioning”? OSGi tales from the trenches
  • 31. Is it too early? me: Starting two years later might have helped avoid initial pains and incomplete implementations. Felix Meschberger: If we would have done that, we would be nowhere near where we are now! Server-side OSGi is still fairly new... OSGi tales from the trenches
  • 32. The Ugly OSGi tales from the trenches
  • 33. Asynchronous startup 7 14 11 17 V4.22 V4.5 V7.4 15 1 V1.03 V3.21 V3.22 11 3 V4.2 2 10 V5.11 V5.3 V2.13 19 V6.54 16 V1.05 Threading 5 6 “unpredictable” V1.11 18 V6.4 issues? V1.03 13 startup order 8 V3.4 V6.4 12 4 V3.2 9 V5.43 19 V3.2 V2.4 Is the system ready now? 20 V5.6 Caused by Declarative Services, not by OSGi itself. OSGi tales from the trenches
  • 34. Unpredictable assemblies V4.22 V4.5 V7.4 V1.03 V3.21 V3.22 V4.2 V5.11 V5.3 V2.13 V6.54 V1.05 V1.11 V6.4 V1.03 V3.4 V6.4 V3.2 V5.43 V3.2 V2.4 Spot the monsters! Security and lots of discipline would help V5.6 OSGi tales from the trenches
  • 35. Testing OSGi tales from the trenches
  • 36. Testing? Integration JUnit JUnit testing, and mocks, with OSGI OSGi, HTTP no OSGi Test the code Test bundles Test assemblies Required. in realistic in realistic Sufficient? conditions conditions Many examples in Sling We don’t use this at this time. Sling launchpad and jcrinstall OSGi tales from the trenches
  • 37. JUnit testing w/mocks JUnit Example, using jmock.org: and mocks, JsonReaderTest in Sling’s contentloader module. no OSGi @org.junit.Test public void testEmptyObject() No OSGi needed, throws Exception { fast! this.mockery.checking(new Expectations() {{ But what am I allowing(creator).createNode(null, null, null); testing exactly? inSequence(mySequence); Sometimes hard to allowing(creator).finishNode(); follow or modify. inSequence(mySequence); }}); this.parse(quot;quot;); } https://svn.eu.apache.org/repos/asf/incubator/sling/trunk/bundles/jcr/contentloader/src/test/java/org/apache/sling/jcr/contentloader/internal/JsonReaderTest.java OSGi tales from the trenches
  • 38. Integration tests, OSGi + HTTP Bundles under test cargo-maven2 plugin starts webapp surefire-plugin runs tests HTTP HTTP Felix OSGi console Felix OSGi framework Sling app (cargo-maven2 plugin) JUnit tests Maven Examples in Sling’s launchpad/testing and jcrinstall modules. OSGi tales from the trenches
  • 39. Integration test: JsonRenderingTest public void testRecursiveInfinity() throws IOException { final Map<String, String> props = new HashMap<String, String>(); props.put(quot;textquot;, testText); props.put(quot;a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/yquot;, quot;yesquot;); final String url = testClient.createNode(postUrl, props); final String json = getContent(url + quot;.infinity.jsonquot;, Simulate actual CONTENT_TYPE_JSON); usage! assertJavascript(testText, json, quot;out.print(data.text)quot;); assertJavascript(quot;yesquot;, json, quot;out.print(data.a.b.c.d.e.f.g.h.i.j.k.l.m.n.o.p.q.r.s.t.u.v.w.x.y)quot;); } OSGi tales from the trenches
  • 40. Unpredictable assemblies V4.22 V4.5 V7.4 V1.03 V3.21 V3.22 V4.2 V5.11 V5.3 V2.13 V6.54 V1.05 V1.11 V6.4 V1.03 V3.4 V6.4 V3.2 V5.43 V3.2 V2.4 Integration testing helps! V5.6 OSGi tales from the trenches
  • 41. The Future OSGi tales from the trenches
  • 42. OSGi @day, 2 years from now Developers got used to it (and read the book). Frameworks and tools improved. Distributed OSGi? Maybe. Customers understand OSGi and like it.. Apache Sling paved the way. OSGi tales from the trenches
  • 43. Do we need more features? Today we use: Bundles (using Maven plugins) Lifecycle, Service Tracker Configurations and Felix Web Console Declarative Services (using Maven plugins) Sling’s jcrinstall module Log, HTTP, Event services Later: Deployment packages. Security maybe. More? Not really - tame what we use! OSGi tales from the trenches
  • 44. Conclusions Good? Bad? Ugly? OSGi tales from the trenches
  • 45. Conclusions OSGi is great for modularity OSGi fosters better structured code Dynamic services and plugins Tooling needs to improve, but usable OSGi skills need to improve! Asynchronous startup can be problematic if using declarative services OSGi tales from the trenches