SlideShare ist ein Scribd-Unternehmen logo
1 von 79
Downloaden Sie, um offline zu lesen
OSGi
 Embrace                          Change
A Developer's Quickstart



     Carsten Ziegeler
     cziegeler@apache.org

     Apache Con US Presentation – November 2009 - Oakland
About
• Member of the ASF
  – Sling, Felix, Cocoon, Portals, Sanselan,
    Excalibur, Incubator
  – PMC: Felix, Portals, Sling, Incubator,
    Excalibur (Chair)
• RnD Team at Day Software
• Article/Book Author, Technical Reviewer
• JSR 286 Spec Group (Portlet API 2.0)


                                               2
Agenda
1 Motivation
2 And Action...
3 Why OSGi?
4 Apache Felix
5-7 Bundles, Services, Dynamics
8 Famous Final Words



                                  3

1 Example Application
   Motivation
               


                        4
Motivation
• Modularity is key
  – Manage growing complexity
  – Support dynamic extensibility
• No solution in standard Java
  – OSGi: tried and trusted
• Embrace change – Embrace OSGi
  – Only a few concepts – easy to get started




                                                5

2 Example Action...
   And Application
           


                  6
Paint Program
• Swing-based paint program
• Interface SimpleShape for drawing
  – Different implementations
  – Each shape has name and icon properties
  – Available shapes are displayed in tool bar
• Select shape and then select location
  – Shapes can be dragged, but not resized
• Support dynamic deployment of shapes



                                                 7
Shape Abstraction
• Conceptual SimpleShape interface

public interface SimpleShape
{
    /**
     * Method to draw the shape of the service.
     * @param g2 The graphics object used for
     *           painting.
     * @param p The position to paint the shape.
    **/
    public void draw(Graphics2D g2, Point p);
}




                                               8
Paint Program Mock Up




                        9
High-Level Architecture


Shape     1   1    Drawing    1   *   Default
Tracker             Frame             Shape
                  1    1               1

                  1    *               1

                    Shape             Simple
                  Component           Shape




                                                10
High-Level Architecture
                   Best practice – Try to
                    centralize interaction
          1   1    with OSGi API * that
                             1      so
Shape            Drawing componentsDefault
                     other
Tracker           Frame POJOs...only
                    remain               Shape
                1
                     Shape Tracker will 1
                      1
                  interact with OSGi API.
                 1     *                1

                  Shape                Simple
                Component              Shape




                                                 11
High-Level Architecture


Shape     1      1   Drawing    1     *   Default
Tracker               Frame               Shape
                     1    1                1

                     1    *                1
                 Main application
                  window – gets
                       Shape              Simple
              dynamically injected
                    Component             Shape
              with available shapes
                 from the Shape
                     Tracker.

                                                    12
High-Level Architecture


Shape     1     1   Drawing     1   *   Default
Tracker              Frame              Shape
                    1   1                1

                    1   *                1

                       Shape            Simple
                Actual shape
                    Component           Shape
              implementation.



                                                  13
High-Level Architecture

    Injected “proxied” shape
Shape      1     1
     implementation to hide
                      Drawing   1   *   Default
      aspects of dynamism
Tracker                Frame            Shape
      and provide a default
        implementation. 1
                     1                   1

                   1     *               1

                      Shape             Simple
               Actual shape
                   Component            Shape
             implementation.



                                                  14
High-Level Architecture
           Component that draws the
          shape in parent frame; looks
Shape     up shape via Drawing 1
          1     1     Drawing Frame    *   Default
Tracker                Frame
           rather than having a direct     Shape
                    reference.
                    1     1                 1

                    1     *                 1

                     Shape                 Simple
                   Component               Shape




                                                     15

    LIVE DEMO
    Example Application

                 


                          16

3 Example Application
   Why OSGi?
               


                        17
Class Path Hell




• Can you spot some potential problems?




                                      18
Class Path Hell




• What libs are used? Versions?
• Which jar is used? Version?
• No difference between private and public
  classes

                                        19
Java's Shortcomings
• Simplistic version handling
  – “First” class from class path
  – JAR files assume backwards compatibility at
    best
• Implicit dependencies
  – Dependencies are implicit in class path
    ordering
  – JAR files add improvements for extensions,
    but cannot control visibility



                                            20
Java's Shortcomings
• Split packages by default
  – Class path approach searches until it finds,
    which leads to shadowing or version mixing
• Limited scoping mechanisms
  – No module access modifier
  – Impossible to declare all private stuff as
    private
• Missing module concept
  – Classes are too fine grained, packages are
    too simplistic, class loaders are too low level
• No deployment/lifecycle support
                                                 21
Java Dynamism Limitations
• Low-level support for dynamics
  – Class loaders are complicated to use and
    error prone
• Support for dynamics is still purely
  manual
  – Must be completely managed by the
    programmer
  – Leads to many ad hoc, incompatible
    solutions
• Limited deployment support

                                               22
OSGi Technology
• Adds modularity and dynamics
  – Module concept
    • Explicit sharing (importing and exporting)
  – Automatic management of code
    dependencies
    • Enforces sophisticated consistency rules for class
      loading
  – Life-cycle management
    • Manages dynamic deployment and configuration
• Service Registry
  – Publish/find/bind

                                                    23
OSGi Alliance
• Industry consortium
• OSGi Service Platform specification
  – Framework specification for hosting
    dynamically downloadable services
  – Standard service specifications
• Several expert groups define the
  specifications
  – Core Platform Expert Group (CPEG)
  – Mobile Expert Group (MEG)
  – Vehicle Expert Group (VEG)
  – Enterprise Expert Group (EEG)
                                          24

4 Example Application
   Apache Felix
             


                   25
Apache Felix
• Top-level project (March 2007)
• OSGi R4 (R4.2) implementation
  – Framework (frequent releases)
  – Services (continued development)
    • Log, Package Admin, Event Admin,
      Configuration Admin, Declarative Services,
      Meta Type, Deployment Admin (and more)
  – Moving towards completing R4.2
• Tools
  – Maven Plugins, Web Console, iPojo
  – Karaf, Sigil
                                                   26
Apache Felix
• Growing community
  – Diverse and healthy!
  – Several code grants and contributions
  – Various (Apache) projects use Felix / have
    expressed interest in Felix and/or OSGi
    • e.g., ServiceMix, Directory, Sling, Tuscany
• Roadmap
  – Continue toward R4.2 compliance
  – New Tools (Karaf, Sigil)


                                                    27

5 Example Application 1
   OSGi – Part
   Bundles     


                     28
OSGi Architectural Overview



              Bundle




                                                 k
                                               or
                                             ew
                                           am
                                        Fr
                               OSGi
                        Java
         Operating System
    Driver     Driver          Driver

             Hardware
                                                     29
OSGi Framework Layering
                 L3 – Provides a publish/find/bind service model to
 SERVICE MODEL   decouple bundles


                 L2 - Manages the life cycle of bundle in a bundle
                 repository without requiring the VM be restarted
   LIFECYCLE


                 L1 - Creates the concept of modules (aka. bundles)
                 that use classes from each other in a controlled way
    MODULE       according to system and bundle constraints




  Execution      L0 -
                 •OSGi Minimum Execution Environment
 Environment
       CDC       •CDC/Foundation
        CDC      •JavaSE




                                                                     30
OSGi Framework
• Component-oriented framework
• Module concept: Bundles
  – Separate class loader -> graph
  – Package sharing and version management
  – Life-cycle management and notification
• Dynamic!
  – Install, update, and uninstall at runtime
• Runs multiple applications and services in
  a single VM

                                                31
OSGi Modularity
• Explicit code boundaries and
  dependencies
  – Package imports and exports
• Multi-version support
  – Version ranges for dependencies
• Class space is managed by OSGi
• Managed life cycle
  – Dynamic install, update, uninstall



                                         32
OSGi Modularity - Example
• Dynamic module deployment and
  dependency resolution




                Provided package

                                   existing
                                   bundle

               OSGi framework



                                          33
OSGi Modularity - Example
• Dynamic module deployment and
  dependency resolution




                                  existing
                                  bundle
  install
bundle.jar
               OSGi framework

                                         34
OSGi Modularity - Example
• Dynamic module deployment and
  dependency resolution




                                  existing
       resolve                    bundle
       bundle


                 OSGi framework

                                         35
OSGi Modularity - Example
• Dynamic module deployment and
  dependency resolution




                 automatic package
                    dependency       existing
                     resolution      bundle


               OSGi framework

                                            36
Creating a Bundle
• Plain old JAR with additional metadata in
  the manifest
  – Bundle identifier, version, exports, imports
• Tools
  – Text editor (Manifest)
  – Eclipse (PDE)
  – Bundle packaging tools
     • BND from Peter Kriens
     • Apache Felix maven-bundle-plugin based on
       BND


                                               37
Maven is Your Friend
• Apache Felix Maven Bundle Plugin
• Creates metadata based on POM
  – Automatically: import packages
  – Manually: export and private packages
• Analyses classes for consistency
• Allows to include dependencies
• Creates final bundle JAR file



                                            38
Maven Bundle Plugin Sample
 <artifactId>org.apache.sling.engine</artifactId>
 <packaging>bundle</packaging>
 <version>2.0.7-SNAPSHOT</version>
 <build>
   <plugins>
     <plugin>
       <groupId>org.apache.felix</groupId>
       <artifactId>maven-bundle-plugin</artifactId>
       <extensions>true</extensions>
       <configuration>
         <instructions>
           <Export-Package>
              org.apache.sling.engine;version=${pom.version}
           </Export-Package>
           <Private-Package>
              org.apache.sling.engine.impl
           </Private-Package>
           <Embed-Dependency>
              commons-fileupload
           </Embed-Dependency>
         </instructions>


                                                               39
Maven Bundle Plugin Sample
 <artifactId>org.apache.sling.engine</artifactId>
 <packaging>bundle</packaging>
 <version>2.0.7-SNAPSHOT</version>
 <build>
   <plugins>
     <plugin>
       <groupId>org.apache.felix</groupId>
       <artifactId>maven-bundle-plugin</artifactId>
       <extensions>true</extensions>
       <configuration>
         <instructions>
           <Export-Package>
              org.apache.sling.engine;version=${pom.version}
           </Export-Package>
           <Private-Package>
              org.apache.sling.engine.impl
           </Private-Package>
           <Embed-Dependency>
              commons-fileupload
           </Embed-Dependency>
         </instructions>


                                                               40
Maven Bundle Plugin Sample
 <artifactId>org.apache.sling.engine</artifactId>
 <packaging>bundle</packaging>
 <version>2.0.7-SNAPSHOT</version>
 <build>
   <plugins>
     <plugin>
       <groupId>org.apache.felix</groupId>
       <artifactId>maven-bundle-plugin</artifactId>
       <extensions>true</extensions>
       <configuration>
         <instructions>
           <Export-Package>
              org.apache.sling.engine;version=${pom.version}
           </Export-Package>
           <Private-Package>
              org.apache.sling.engine.impl
           </Private-Package>
           <Embed-Dependency>
              commons-fileupload
           </Embed-Dependency>
         </instructions>


                                                               41
Maven Bundle Plugin Sample
 <artifactId>org.apache.sling.engine</artifactId>
 <packaging>bundle</packaging>
 <version>2.0.7-SNAPSHOT</version>
 <build>
   <plugins>
     <plugin>
       <groupId>org.apache.felix</groupId>
       <artifactId>maven-bundle-plugin</artifactId>
       <extensions>true</extensions>
       <configuration>
         <instructions>
           <Export-Package>
              org.apache.sling.engine;version=${pom.version}
           </Export-Package>
           <Private-Package>
              org.apache.sling.engine.impl
           </Private-Package>
           <Embed-Dependency>
              commons-fileupload
           </Embed-Dependency>
         </instructions>


                                                               42
Be Modular!
• Create clean package spaces
  – public vs private
• Provide Bundles
  – Add manifest information
• Think about dependencies
  – Additional bundle vs include
  – Optional
  – Version ranges
• Manage releases and versions properly
• Benefits even without OSGi
                                      43

6 Example Application 2
   OSGi – Part
   Services    


                     44
OSGi Services (1/3)
• Service-oriented architecture
  – Publish/find/bind
  – Possible to use modules without services
                   Service
                   Registry
       Publish                     Find
                     Service
                    Description

     Service                       Service
     Provider        Interact     Requester


                                               45
OSGi Services (2/3)
• An OSGi application is...
  – A collection of bundles that interact via
    service interfaces
  – Bundles may be independently developed
    and deployed
  – Bundles and their associated services may
    appear or disappear at any time

• Resulting application follows a Service-
  Oriented Component Model approach

                                            46
OSGi Services (3/3)
• Dynamic service lookup



                   Provided service


                 Provided package

                                        existing
                                        bundle
                                      component

                OSGi framework

                                              47
OSGi Services (3/3)
• Dynamic service lookup




                                      existing
                                      bundle
  install                           component
bundle.jar
                   OSGi framework

                                            48
OSGi Services (3/3)
• Dynamic service lookup




                                      existing
        activate                      bundle
        bundle                      component

                   OSGi framework

                                            49
OSGi Services (3/3)
• Dynamic service lookup




                    automatic package
                  dependency resolution     existing
                                            bundle
                                          component

                OSGi framework

                                                  50
OSGi Services (3/3)
• Dynamic service lookup




                     manual service
                  dependency resolution


                                            existing
                                            bundle
                                          component

                OSGi framework

                                                  51
OSGi Services Advantages
• Lightweight services
   – Lookup is based on interface name
  – Direct method invocation
• Good design practice
  – Separates interface from implementation
  – Enables reuse, substitutability, loose coupling,
    and late binding




                                                   52
OSGi Services Advantages
• Dynamic
   – Loose coupling and late binding
• Application's configuration is simply the set of
  deployed bundles
   – Deploy only the bundles that you need




                                                 53
OSGi Services Issues
• More sophisticated, but more complicated
  – Requires a different way of thinking
     • Things might appear/disappear at any moment
  – Must manually resolve and track services
• There is help
  – Service Tracker
     • Still somewhat of a manual approach
  – Declarative Services, Blueprint, iPOJO
     • Sophisticated service-oriented component
       frameworks
     • Automated dependency injection and more
     • More modern, POJO-oriented approaches
                                                  54

7 Example Application 3
   OSGi – Part
   Dynamics    


                     55
Everything is a Bundle
• How to structure bundles?
  – API vs implementation bundle
  – Fine-grained vs coarse-grained
  – No “One Size Fits All”
• Simple Rules
  – Stable code vs changing code
  – Optional parts




                                     56
Third Party Libraries
• Use them as bundles
  – Project delivers already a bundle
     • Apache Commons, Apache Sling etc.
  – Use special bundle repositories
     • Felix Commons, Spring etc.
     • But check included metadata!
  – Create your own wrapper
     • Easy with the Felix maven bundle plugin
• Include classes in your bundle
  – Again: easy with the Felix maven bundle
    plugin
                                                 57
Everything is Dynamic
• Bundles can come and go!
  – Packages
  – Services
• Services can come and go!
• Be prepaired!
  – Application code must handle dynamics!




                                             58
Dynamic Services
• OSGi Declarative Services Specification
  – XML Configuration
    • Contained in bundle
    • Manifest entry pointing to config(s)
  – Publishing services
  – Consuming services
    • Policy (static,dynamic), cardinality (0..1, 1..1, 0..n)
  – Default configuration
  – Service Lifecycle management
• Various Implementations
  – Apache Felix SCR
                                                        59
Dynamic Services Configuration
<scr:component enabled="true"
         name="org.apache.sling.event.impl.DistributingEventHandler">

  <implementation
       class="org.apache.sling.event.impl.DistributingEventHandler"/>

  <service servicefactory="false">
    <provide interface="org.osgi.service.event.EventHandler"/>
  </service>

  <property name="repository.path" value="/var/eventing/distribution"/>
  <property name="cleanup.period" type="Integer" value="15"/>

  <reference name="threadPool"
             interface="org.apache.sling.event.ThreadPool"
             cardinality="1..1" policy="static"
             bind="bindThreadPool" unbind="unbindThreadPool"/>




                                                                    60
Dynamic Services Configuration
<scr:component enabled="true"
         name="org.apache.sling.event.impl.DistributingEventHandler">

  <implementation
       class="org.apache.sling.event.impl.DistributingEventHandler"/>

  <service servicefactory="false">
    <provide interface="org.osgi.service.event.EventHandler"/>
  </service>

  <property name="repository.path" value="/var/eventing/distribution"/>
  <property name="cleanup.period" type="Integer" value="15"/>

  <reference name="threadPool"
             interface="org.apache.sling.event.ThreadPool"
             cardinality="1..1" policy="static"
             bind="bindThreadPool" unbind="unbindThreadPool"/>




                                                                    61
Dynamic Services Configuration
<scr:component enabled="true"
         name="org.apache.sling.event.impl.DistributingEventHandler">

  <implementation
       class="org.apache.sling.event.impl.DistributingEventHandler"/>

  <service servicefactory="false">
    <provide interface="org.osgi.service.event.EventHandler"/>
  </service>

  <property name="repository.path" value="/var/eventing/distribution"/>
  <property name="cleanup.period" type="Integer" value="15"/>

  <reference name="threadPool"
             interface="org.apache.sling.event.ThreadPool"
             cardinality="1..1" policy="static"
             bind="bindThreadPool" unbind="unbindThreadPool"/>




                                                                    62
Dynamic Services Configuration
<scr:component enabled="true"
         name="org.apache.sling.event.impl.DistributingEventHandler">

  <implementation
       class="org.apache.sling.event.impl.DistributingEventHandler"/>

  <service servicefactory="false">
    <provide interface="org.osgi.service.event.EventHandler"/>
  </service>

  <property name="repository.path" value="/var/eventing/distribution"/>
  <property name="cleanup.period" type="Integer" value="15"/>

  <reference name="threadPool"
             interface="org.apache.sling.event.ThreadPool"
             cardinality="1..1" policy="static"
             bind="bindThreadPool" unbind="unbindThreadPool"/>




                                                                    63
Declarative Services
• Reads XML configs on bundle start
• Registers services
• Keeps track of dependencies
  – Starts/stops services
• Invokes optional activation and
  deactivation method
  – Provides access to configuration
• Caution: A service is by default only
  started if someone else uses it!
  – Immediate flag forces a service start
                                            64
Example Service
protected ThreadPool threadPool;

protected void activate(ComponentContext context)
throws Exception {
    @SuppressWarnings("unchecked")
    final Dictionary<String, Object> props = context.getProperties();
    this.cleanupPeriod = (Integer)props.get("cleanup.period");
    super.activate(context);
}

protected void bindThreadPool(ThreadPool p) {
    this.threadPool = p;
}

protected void unbindThreadPool(ThreadPool p) {
    if ( this.threadPool == p ) {
        this.threadPool = null;
    }
}




                                                                   65
Config Admin and Metatype
• OSGi Config Admin
  –   Configuration Manager
  –   Persistence storage
  –   API to retrieve/update/remove configs
  –   Works with Declarative Services
• OSGi Metatype Service
  – Description of bundle metadata
  – Description of service configurations
• Various Implementations
  – Apache Felix

                                              66
Maven SCR Plugin
• Combines everything (DS, ConfigAdmin,
  Metatype, Maven)
• Annotation-based (even for 1.4)
• Annotate components
  – Properties with default values
  – Service providers
  – Services references (policy and cardinality)
• Generates DS XML
• Generates Metatype config
• Generates Java code
                                              67
SCR Plugin Sample
/**
 * @scr.component
 * @scr.property name="repository.path"
                  value="/var/eventing/distribution" private="true"
 * @scr.service interface="EventHandler"
 */
public class DistributingEventHandler
    implements EventHandler {

    protected static final int DEFAULT_CLEANUP_PERIOD = 15;

    /** @scr.property valueRef="DEFAULT_CLEANUP_PERIOD" type="Integer" */
    protected static final String PROP_CLEANUP_PERIOD = "cleanup.period";

    /** @scr.reference */
    protected ThreadPool threadPool;

    protected void activate(ComponentContext context)
    throws Exception {
        final Dictionary<String, Object> props = context.getProperties();
        this.cleanupPeriod = (Integer)props.get(PROP_CLEANUP_PERIOD);
    }


                                                                      68
Alternatives
• Manually through bundle activator
• Apache Felix iPojo
  – Next session in this track!
• Blueprint Container Specification
  – Apache Aries (Incubator)




                                      69
Handling extensibility
• Two basic implementation strategies
  – Service-based approach
  – Extender model




                                        70
Service Whiteboard Pattern
• Clients register a service interface
• Service tracker for registered services
• Simple, more robust, leverages the OSGi
  service model
• Service whiteboard pattern
  – It is an Inversion of Control pattern




                                            71
Externder Model
• Bundles contain manifest entries
  – Like available service classes
• Custom bundle tracker
  – Keeps track of bundles
  – Specifically, STARTED and STOPPED events
  – Checks bundles manifest data
     • Creates/removes services




                                               72

8 Example Application
   Famous
   Final Words 


                    73
Apache Felix Karaf
•   OSGi based kernel
•   Includes a preset of bundles
•   File based deployment and configuration
•   Assemblies
•   Extensible shell console
•   Download and go solution




                                         74
Apache Felix Sigil
• OSGi centric development tools
• Property configuration file
• Integration with Ivy and Eclipse
  –   Dependency Analysis
  –   Repository browser
  –   Respects private packages of dependencies
  –   Quick fix support
• Roadmap
  – Maven support
  – Extension points
                                            75
Suggestions for Development
• Think about modularity!
  – Clean package space
• Think about dynamics!
• Consider OSGi
• Check out the spec and other projects
  – Attend today's OSGi/Felix track
• Minimize dependencies to OSGi
  – but only if it makes sense



                                          76
Suggestions for Using OSGi
• Think about dynamics
  – Optional bundles
  – Optional services
  – Handle these cases
• Use your preferred logging library
  – LogManager takes care
• Use available tooling
• Be part of the community!


                                       77
Check It Out
• Read the OSGi spec
  – Framework
  – Config Admin, Metatype, Declarative
    Services
  – Deployment Admin, OBR
• Download Apache Felix
  – Try tutorials and samples
  – Quickstart with Apache Felix Karaf
• Download Apache Sling :)
• Explore the web – embrace OSGi
                                          78
OSGi
Embrace   Change

Questions?

Weitere ähnliche Inhalte

Was ist angesagt?

Java Modularity with OSGi
Java Modularity with OSGiJava Modularity with OSGi
Java Modularity with OSGiIlya Rybak
 
Asynchronous OSGi – Promises for the Masses - T Ward
Asynchronous OSGi – Promises for the Masses - T WardAsynchronous OSGi – Promises for the Masses - T Ward
Asynchronous OSGi – Promises for the Masses - T Wardmfrancis
 
Domino OSGi Development
Domino OSGi DevelopmentDomino OSGi Development
Domino OSGi DevelopmentPaul Fiore
 
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 DevicesJan S. Rellermeyer
 
From XPages Hero to OSGi Guru: Taking the Scary out of Building Extension Lib...
From XPages Hero to OSGi Guru: Taking the Scary out of Building Extension Lib...From XPages Hero to OSGi Guru: Taking the Scary out of Building Extension Lib...
From XPages Hero to OSGi Guru: Taking the Scary out of Building Extension Lib...Paul Withers
 
Boston 2011 OTN Developer Days - GlassFish
Boston 2011 OTN Developer Days - GlassFishBoston 2011 OTN Developer Days - GlassFish
Boston 2011 OTN Developer Days - GlassFishArun Gupta
 
GlassFish 3.1 – Simplifying your Java EE 6 Development and Deployment @ JAX L...
GlassFish 3.1 – Simplifying your Java EE 6 Development and Deployment @ JAX L...GlassFish 3.1 – Simplifying your Java EE 6 Development and Deployment @ JAX L...
GlassFish 3.1 – Simplifying your Java EE 6 Development and Deployment @ JAX L...Arun Gupta
 
An XPager's Guide to Process Server-Side Jobs on Domino
An XPager's Guide to Process Server-Side Jobs on DominoAn XPager's Guide to Process Server-Side Jobs on Domino
An XPager's Guide to Process Server-Side Jobs on DominoFrank van der Linden
 
What's next for Java API for WebSocket (JSR 356)
What's next for Java API for WebSocket (JSR 356)What's next for Java API for WebSocket (JSR 356)
What's next for Java API for WebSocket (JSR 356)Pavel Bucek
 
BP207 - Meet the Java Application Server You Already Own – IBM Domino
BP207 - Meet the Java Application Server You Already Own – IBM DominoBP207 - Meet the Java Application Server You Already Own – IBM Domino
BP207 - Meet the Java Application Server You Already Own – IBM DominoSerdar Basegmez
 
Modular EJBs in OSGi - Tim Ward
Modular EJBs in OSGi - Tim WardModular EJBs in OSGi - Tim Ward
Modular EJBs in OSGi - Tim Wardmfrancis
 
Managed Beans: When, Why and How
Managed Beans: When, Why and HowManaged Beans: When, Why and How
Managed Beans: When, Why and HowRussell Maher
 
開放原始碼 Ch1.2 intro - oss - apahce foundry (ver 2.0)
開放原始碼 Ch1.2   intro - oss - apahce foundry (ver 2.0)開放原始碼 Ch1.2   intro - oss - apahce foundry (ver 2.0)
開放原始碼 Ch1.2 intro - oss - apahce foundry (ver 2.0)My own sweet home!
 
IBM ConnectED 2015 - BP106 From XPages Hero To OSGi Guru: Taking The Scary Ou...
IBM ConnectED 2015 - BP106 From XPages Hero To OSGi Guru: Taking The Scary Ou...IBM ConnectED 2015 - BP106 From XPages Hero To OSGi Guru: Taking The Scary Ou...
IBM ConnectED 2015 - BP106 From XPages Hero To OSGi Guru: Taking The Scary Ou...Paul Withers
 

Was ist angesagt? (20)

Java Modularity with OSGi
Java Modularity with OSGiJava Modularity with OSGi
Java Modularity with OSGi
 
Asynchronous OSGi – Promises for the Masses - T Ward
Asynchronous OSGi – Promises for the Masses - T WardAsynchronous OSGi – Promises for the Masses - T Ward
Asynchronous OSGi – Promises for the Masses - T Ward
 
Domino OSGi Development
Domino OSGi DevelopmentDomino OSGi Development
Domino OSGi Development
 
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
 
From XPages Hero to OSGi Guru: Taking the Scary out of Building Extension Lib...
From XPages Hero to OSGi Guru: Taking the Scary out of Building Extension Lib...From XPages Hero to OSGi Guru: Taking the Scary out of Building Extension Lib...
From XPages Hero to OSGi Guru: Taking the Scary out of Building Extension Lib...
 
Boston 2011 OTN Developer Days - GlassFish
Boston 2011 OTN Developer Days - GlassFishBoston 2011 OTN Developer Days - GlassFish
Boston 2011 OTN Developer Days - GlassFish
 
GlassFish 3.1 – Simplifying your Java EE 6 Development and Deployment @ JAX L...
GlassFish 3.1 – Simplifying your Java EE 6 Development and Deployment @ JAX L...GlassFish 3.1 – Simplifying your Java EE 6 Development and Deployment @ JAX L...
GlassFish 3.1 – Simplifying your Java EE 6 Development and Deployment @ JAX L...
 
An XPager's Guide to Process Server-Side Jobs on Domino
An XPager's Guide to Process Server-Side Jobs on DominoAn XPager's Guide to Process Server-Side Jobs on Domino
An XPager's Guide to Process Server-Side Jobs on Domino
 
What's next for Java API for WebSocket (JSR 356)
What's next for Java API for WebSocket (JSR 356)What's next for Java API for WebSocket (JSR 356)
What's next for Java API for WebSocket (JSR 356)
 
BP207 - Meet the Java Application Server You Already Own – IBM Domino
BP207 - Meet the Java Application Server You Already Own – IBM DominoBP207 - Meet the Java Application Server You Already Own – IBM Domino
BP207 - Meet the Java Application Server You Already Own – IBM Domino
 
Modular EJBs in OSGi - Tim Ward
Modular EJBs in OSGi - Tim WardModular EJBs in OSGi - Tim Ward
Modular EJBs in OSGi - Tim Ward
 
Apache DeltaSpike the CDI toolbox
Apache DeltaSpike the CDI toolboxApache DeltaSpike the CDI toolbox
Apache DeltaSpike the CDI toolbox
 
Managed Beans: When, Why and How
Managed Beans: When, Why and HowManaged Beans: When, Why and How
Managed Beans: When, Why and How
 
GlassFish Community and future larochelle
GlassFish Community and future larochelleGlassFish Community and future larochelle
GlassFish Community and future larochelle
 
GlassFish OSGi - Java2days 2010
GlassFish OSGi - Java2days 2010GlassFish OSGi - Java2days 2010
GlassFish OSGi - Java2days 2010
 
GlassFish Article September 07
GlassFish Article September 07GlassFish Article September 07
GlassFish Article September 07
 
Oracle Essentials Oracle Database 11g
Oracle Essentials   Oracle Database 11gOracle Essentials   Oracle Database 11g
Oracle Essentials Oracle Database 11g
 
Modular Java
Modular JavaModular Java
Modular Java
 
開放原始碼 Ch1.2 intro - oss - apahce foundry (ver 2.0)
開放原始碼 Ch1.2   intro - oss - apahce foundry (ver 2.0)開放原始碼 Ch1.2   intro - oss - apahce foundry (ver 2.0)
開放原始碼 Ch1.2 intro - oss - apahce foundry (ver 2.0)
 
IBM ConnectED 2015 - BP106 From XPages Hero To OSGi Guru: Taking The Scary Ou...
IBM ConnectED 2015 - BP106 From XPages Hero To OSGi Guru: Taking The Scary Ou...IBM ConnectED 2015 - BP106 From XPages Hero To OSGi Guru: Taking The Scary Ou...
IBM ConnectED 2015 - BP106 From XPages Hero To OSGi Guru: Taking The Scary Ou...
 

Ähnlich wie Embrace Change - Embrace OSGi

Embrace OSGi Apache Con Europe2009
Embrace OSGi Apache Con Europe2009Embrace OSGi Apache Con Europe2009
Embrace OSGi Apache Con Europe2009day
 
Using Composite Feature Models to Support Agile Software Product Line Evoluti...
Using Composite Feature Models to Support Agile Software Product Line Evoluti...Using Composite Feature Models to Support Agile Software Product Line Evoluti...
Using Composite Feature Models to Support Agile Software Product Line Evoluti...Simon Urli
 
Software Engineering of Component-Based Systems-of-Systems: A Reference Frame...
Software Engineering of Component-Based Systems-of-Systems: A Reference Frame...Software Engineering of Component-Based Systems-of-Systems: A Reference Frame...
Software Engineering of Component-Based Systems-of-Systems: A Reference Frame...lseinturier
 
UI5con 2018: UI5 Evolution - The Core Changes
UI5con 2018: UI5 Evolution - The Core ChangesUI5con 2018: UI5 Evolution - The Core Changes
UI5con 2018: UI5 Evolution - The Core ChangesAndreas_Ecker
 
26 developer tool for creating accessible guis in android mobile os upm
26 developer tool for creating accessible guis in android mobile os upm26 developer tool for creating accessible guis in android mobile os upm
26 developer tool for creating accessible guis in android mobile os upmAEGIS-ACCESSIBLE Projects
 
Building the windows 8 community app
Building the windows 8 community appBuilding the windows 8 community app
Building the windows 8 community appbartlannoeye
 
E-GEN/iCAN
E-GEN/iCANE-GEN/iCAN
E-GEN/iCANteddi22
 
Automating functional testing of Flex applications.
Automating functional testing of Flex applications.Automating functional testing of Flex applications.
Automating functional testing of Flex applications.Gokuldas Pillai
 
Tech Talk Comp Apps851 20090930
Tech Talk Comp Apps851 20090930Tech Talk Comp Apps851 20090930
Tech Talk Comp Apps851 20090930Michael Masterson
 
Build software like a bag of marbles, not a castle of LEGO®
Build software like a bag of marbles, not a castle of LEGO®Build software like a bag of marbles, not a castle of LEGO®
Build software like a bag of marbles, not a castle of LEGO®Hannes Lowette
 
Scrumbox ece2011.pptx
Scrumbox ece2011.pptxScrumbox ece2011.pptx
Scrumbox ece2011.pptxda152
 
OSGi In Anger - Tara Simpson
OSGi In Anger - Tara SimpsonOSGi In Anger - Tara Simpson
OSGi In Anger - Tara Simpsonmfrancis
 
Das Universal Theme in APEX 19
Das Universal Theme in APEX 19Das Universal Theme in APEX 19
Das Universal Theme in APEX 19Oliver Lemm
 
Cgp lecture2 graphics_standard, opengl
Cgp lecture2 graphics_standard, openglCgp lecture2 graphics_standard, opengl
Cgp lecture2 graphics_standard, openglJavkhlan Rentsendorj
 
EnArWeb: Enterprise Architect in the Web
EnArWeb: Enterprise Architect in the WebEnArWeb: Enterprise Architect in the Web
EnArWeb: Enterprise Architect in the WebKonrad Wieland
 
Calling all modularity solutions
Calling all modularity solutionsCalling all modularity solutions
Calling all modularity solutionsSangjin Lee
 
A classification framework for component models
A classification framework for component modelsA classification framework for component models
A classification framework for component modelsIvica Crnkovic
 

Ähnlich wie Embrace Change - Embrace OSGi (20)

Embrace OSGi
Embrace OSGiEmbrace OSGi
Embrace OSGi
 
Embrace OSGi Apache Con Europe2009
Embrace OSGi Apache Con Europe2009Embrace OSGi Apache Con Europe2009
Embrace OSGi Apache Con Europe2009
 
Using Composite Feature Models to Support Agile Software Product Line Evoluti...
Using Composite Feature Models to Support Agile Software Product Line Evoluti...Using Composite Feature Models to Support Agile Software Product Line Evoluti...
Using Composite Feature Models to Support Agile Software Product Line Evoluti...
 
Software Engineering of Component-Based Systems-of-Systems: A Reference Frame...
Software Engineering of Component-Based Systems-of-Systems: A Reference Frame...Software Engineering of Component-Based Systems-of-Systems: A Reference Frame...
Software Engineering of Component-Based Systems-of-Systems: A Reference Frame...
 
UI5con 2018: UI5 Evolution - The Core Changes
UI5con 2018: UI5 Evolution - The Core ChangesUI5con 2018: UI5 Evolution - The Core Changes
UI5con 2018: UI5 Evolution - The Core Changes
 
26 developer tool for creating accessible guis in android mobile os upm
26 developer tool for creating accessible guis in android mobile os upm26 developer tool for creating accessible guis in android mobile os upm
26 developer tool for creating accessible guis in android mobile os upm
 
Building the windows 8 community app
Building the windows 8 community appBuilding the windows 8 community app
Building the windows 8 community app
 
E-GEN/iCAN
E-GEN/iCANE-GEN/iCAN
E-GEN/iCAN
 
Automating functional testing of Flex applications.
Automating functional testing of Flex applications.Automating functional testing of Flex applications.
Automating functional testing of Flex applications.
 
Tech Talk Comp Apps851 20090930
Tech Talk Comp Apps851 20090930Tech Talk Comp Apps851 20090930
Tech Talk Comp Apps851 20090930
 
Build software like a bag of marbles, not a castle of LEGO®
Build software like a bag of marbles, not a castle of LEGO®Build software like a bag of marbles, not a castle of LEGO®
Build software like a bag of marbles, not a castle of LEGO®
 
Scrumbox ece2011.pptx
Scrumbox ece2011.pptxScrumbox ece2011.pptx
Scrumbox ece2011.pptx
 
OSGi In Anger - Tara Simpson
OSGi In Anger - Tara SimpsonOSGi In Anger - Tara Simpson
OSGi In Anger - Tara Simpson
 
Das Universal Theme in APEX 19
Das Universal Theme in APEX 19Das Universal Theme in APEX 19
Das Universal Theme in APEX 19
 
Design Patterns (Examples in .NET)
Design Patterns (Examples in .NET)Design Patterns (Examples in .NET)
Design Patterns (Examples in .NET)
 
Cgp lecture2 graphics_standard, opengl
Cgp lecture2 graphics_standard, openglCgp lecture2 graphics_standard, opengl
Cgp lecture2 graphics_standard, opengl
 
EnArWeb: Enterprise Architect in the Web
EnArWeb: Enterprise Architect in the WebEnArWeb: Enterprise Architect in the Web
EnArWeb: Enterprise Architect in the Web
 
Calling all modularity solutions
Calling all modularity solutionsCalling all modularity solutions
Calling all modularity solutions
 
A classification framework for component models
A classification framework for component modelsA classification framework for component models
A classification framework for component models
 
05 ai uml_illik_students_part_2_eng
05 ai uml_illik_students_part_2_eng05 ai uml_illik_students_part_2_eng
05 ai uml_illik_students_part_2_eng
 

Mehr von Carsten Ziegeler

Service oriented web development with OSGi
Service oriented web development with OSGiService oriented web development with OSGi
Service oriented web development with OSGiCarsten Ziegeler
 
What's cool in the new and updated OSGi Specs
What's cool in the new and updated OSGi SpecsWhat's cool in the new and updated OSGi Specs
What's cool in the new and updated OSGi SpecsCarsten Ziegeler
 
What's cool in the new and updated OSGi specs
What's cool in the new and updated OSGi specsWhat's cool in the new and updated OSGi specs
What's cool in the new and updated OSGi specsCarsten Ziegeler
 
Monitoring OSGi Applications with the Web Console
Monitoring OSGi Applications with the Web ConsoleMonitoring OSGi Applications with the Web Console
Monitoring OSGi Applications with the Web ConsoleCarsten Ziegeler
 
Distributed Eventing in OSGi
Distributed Eventing in OSGiDistributed Eventing in OSGi
Distributed Eventing in OSGiCarsten Ziegeler
 
Apache Sling - Distributed Eventing, Discovery, and Jobs (adaptTo 2013)
Apache Sling - Distributed Eventing, Discovery, and Jobs (adaptTo 2013)Apache Sling - Distributed Eventing, Discovery, and Jobs (adaptTo 2013)
Apache Sling - Distributed Eventing, Discovery, and Jobs (adaptTo 2013)Carsten Ziegeler
 
Adobe AEM - From Eventing to Job Processing
Adobe AEM - From Eventing to Job ProcessingAdobe AEM - From Eventing to Job Processing
Adobe AEM - From Eventing to Job ProcessingCarsten Ziegeler
 
OSGi, Scripting and REST, Building Webapps With Apache Sling
OSGi, Scripting and REST, Building Webapps With Apache SlingOSGi, Scripting and REST, Building Webapps With Apache Sling
OSGi, Scripting and REST, Building Webapps With Apache SlingCarsten Ziegeler
 
JCR - Java Content Repositories
JCR - Java Content RepositoriesJCR - Java Content Repositories
JCR - Java Content RepositoriesCarsten Ziegeler
 
JCR In Action (ApacheCon US 2009)
JCR In Action (ApacheCon US 2009)JCR In Action (ApacheCon US 2009)
JCR In Action (ApacheCon US 2009)Carsten Ziegeler
 
Apache Sling : JCR, OSGi, Scripting and REST
Apache Sling : JCR, OSGi, Scripting and RESTApache Sling : JCR, OSGi, Scripting and REST
Apache Sling : JCR, OSGi, Scripting and RESTCarsten Ziegeler
 
Apache Sanselan (ApacheCon US 2007 FFT)
Apache Sanselan (ApacheCon US 2007 FFT)Apache Sanselan (ApacheCon US 2007 FFT)
Apache Sanselan (ApacheCon US 2007 FFT)Carsten Ziegeler
 
Apache iBatis (ApacheCon US 2007)
Apache iBatis (ApacheCon US 2007)Apache iBatis (ApacheCon US 2007)
Apache iBatis (ApacheCon US 2007)Carsten Ziegeler
 
JCR In Action (ApacheCon US 2007)
JCR In Action (ApacheCon US 2007)JCR In Action (ApacheCon US 2007)
JCR In Action (ApacheCon US 2007)Carsten Ziegeler
 
Apache Portals Panel (ApacheCon US 2007)
Apache Portals Panel (ApacheCon US 2007)Apache Portals Panel (ApacheCon US 2007)
Apache Portals Panel (ApacheCon US 2007)Carsten Ziegeler
 
JCR In Action (ApacheCon EU 2008)
JCR In Action (ApacheCon EU 2008)JCR In Action (ApacheCon EU 2008)
JCR In Action (ApacheCon EU 2008)Carsten Ziegeler
 
Maven SCR Plugin (ApacheCon EU 2008 - FFT)
Maven SCR Plugin (ApacheCon EU 2008 - FFT)Maven SCR Plugin (ApacheCon EU 2008 - FFT)
Maven SCR Plugin (ApacheCon EU 2008 - FFT)Carsten Ziegeler
 

Mehr von Carsten Ziegeler (17)

Service oriented web development with OSGi
Service oriented web development with OSGiService oriented web development with OSGi
Service oriented web development with OSGi
 
What's cool in the new and updated OSGi Specs
What's cool in the new and updated OSGi SpecsWhat's cool in the new and updated OSGi Specs
What's cool in the new and updated OSGi Specs
 
What's cool in the new and updated OSGi specs
What's cool in the new and updated OSGi specsWhat's cool in the new and updated OSGi specs
What's cool in the new and updated OSGi specs
 
Monitoring OSGi Applications with the Web Console
Monitoring OSGi Applications with the Web ConsoleMonitoring OSGi Applications with the Web Console
Monitoring OSGi Applications with the Web Console
 
Distributed Eventing in OSGi
Distributed Eventing in OSGiDistributed Eventing in OSGi
Distributed Eventing in OSGi
 
Apache Sling - Distributed Eventing, Discovery, and Jobs (adaptTo 2013)
Apache Sling - Distributed Eventing, Discovery, and Jobs (adaptTo 2013)Apache Sling - Distributed Eventing, Discovery, and Jobs (adaptTo 2013)
Apache Sling - Distributed Eventing, Discovery, and Jobs (adaptTo 2013)
 
Adobe AEM - From Eventing to Job Processing
Adobe AEM - From Eventing to Job ProcessingAdobe AEM - From Eventing to Job Processing
Adobe AEM - From Eventing to Job Processing
 
OSGi, Scripting and REST, Building Webapps With Apache Sling
OSGi, Scripting and REST, Building Webapps With Apache SlingOSGi, Scripting and REST, Building Webapps With Apache Sling
OSGi, Scripting and REST, Building Webapps With Apache Sling
 
JCR - Java Content Repositories
JCR - Java Content RepositoriesJCR - Java Content Repositories
JCR - Java Content Repositories
 
JCR In Action (ApacheCon US 2009)
JCR In Action (ApacheCon US 2009)JCR In Action (ApacheCon US 2009)
JCR In Action (ApacheCon US 2009)
 
Apache Sling : JCR, OSGi, Scripting and REST
Apache Sling : JCR, OSGi, Scripting and RESTApache Sling : JCR, OSGi, Scripting and REST
Apache Sling : JCR, OSGi, Scripting and REST
 
Apache Sanselan (ApacheCon US 2007 FFT)
Apache Sanselan (ApacheCon US 2007 FFT)Apache Sanselan (ApacheCon US 2007 FFT)
Apache Sanselan (ApacheCon US 2007 FFT)
 
Apache iBatis (ApacheCon US 2007)
Apache iBatis (ApacheCon US 2007)Apache iBatis (ApacheCon US 2007)
Apache iBatis (ApacheCon US 2007)
 
JCR In Action (ApacheCon US 2007)
JCR In Action (ApacheCon US 2007)JCR In Action (ApacheCon US 2007)
JCR In Action (ApacheCon US 2007)
 
Apache Portals Panel (ApacheCon US 2007)
Apache Portals Panel (ApacheCon US 2007)Apache Portals Panel (ApacheCon US 2007)
Apache Portals Panel (ApacheCon US 2007)
 
JCR In Action (ApacheCon EU 2008)
JCR In Action (ApacheCon EU 2008)JCR In Action (ApacheCon EU 2008)
JCR In Action (ApacheCon EU 2008)
 
Maven SCR Plugin (ApacheCon EU 2008 - FFT)
Maven SCR Plugin (ApacheCon EU 2008 - FFT)Maven SCR Plugin (ApacheCon EU 2008 - FFT)
Maven SCR Plugin (ApacheCon EU 2008 - FFT)
 

Kürzlich hochgeladen

Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Scott Keck-Warren
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii SoldatenkoFwdays
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLScyllaDB
 
DSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningDSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningLars Bell
 
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostLeverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostZilliz
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsPixlogix Infotech
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyAlfredo García Lavilla
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024Stephanie Beckett
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek SchlawackFwdays
 
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfHyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfPrecisely
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 3652toLead Limited
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.Curtis Poe
 
Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionDilum Bandara
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxNavinnSomaal
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024Lorenzo Miniero
 
Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxhariprasad279825
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024Lonnie McRorey
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 

Kürzlich hochgeladen (20)

Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko
 
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptxE-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQL
 
DSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningDSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine Tuning
 
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostLeverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and Cons
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easy
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
 
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfHyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.
 
Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An Introduction
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptx
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024
 
Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptx
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 

Embrace Change - Embrace OSGi

  • 1. OSGi Embrace Change A Developer's Quickstart Carsten Ziegeler cziegeler@apache.org Apache Con US Presentation – November 2009 - Oakland
  • 2. About • Member of the ASF – Sling, Felix, Cocoon, Portals, Sanselan, Excalibur, Incubator – PMC: Felix, Portals, Sling, Incubator, Excalibur (Chair) • RnD Team at Day Software • Article/Book Author, Technical Reviewer • JSR 286 Spec Group (Portlet API 2.0) 2
  • 3. Agenda 1 Motivation 2 And Action... 3 Why OSGi? 4 Apache Felix 5-7 Bundles, Services, Dynamics 8 Famous Final Words 3
  • 4.  1 Example Application Motivation  4
  • 5. Motivation • Modularity is key – Manage growing complexity – Support dynamic extensibility • No solution in standard Java – OSGi: tried and trusted • Embrace change – Embrace OSGi – Only a few concepts – easy to get started 5
  • 6.  2 Example Action... And Application  6
  • 7. Paint Program • Swing-based paint program • Interface SimpleShape for drawing – Different implementations – Each shape has name and icon properties – Available shapes are displayed in tool bar • Select shape and then select location – Shapes can be dragged, but not resized • Support dynamic deployment of shapes 7
  • 8. Shape Abstraction • Conceptual SimpleShape interface public interface SimpleShape { /** * Method to draw the shape of the service. * @param g2 The graphics object used for * painting. * @param p The position to paint the shape. **/ public void draw(Graphics2D g2, Point p); } 8
  • 10. High-Level Architecture Shape 1 1 Drawing 1 * Default Tracker Frame Shape 1 1 1 1 * 1 Shape Simple Component Shape 10
  • 11. High-Level Architecture Best practice – Try to centralize interaction 1 1 with OSGi API * that 1 so Shape Drawing componentsDefault other Tracker Frame POJOs...only remain Shape 1 Shape Tracker will 1 1 interact with OSGi API. 1 * 1 Shape Simple Component Shape 11
  • 12. High-Level Architecture Shape 1 1 Drawing 1 * Default Tracker Frame Shape 1 1 1 1 * 1 Main application window – gets Shape Simple dynamically injected Component Shape with available shapes from the Shape Tracker. 12
  • 13. High-Level Architecture Shape 1 1 Drawing 1 * Default Tracker Frame Shape 1 1 1 1 * 1 Shape Simple Actual shape Component Shape implementation. 13
  • 14. High-Level Architecture Injected “proxied” shape Shape 1 1 implementation to hide Drawing 1 * Default aspects of dynamism Tracker Frame Shape and provide a default implementation. 1 1 1 1 * 1 Shape Simple Actual shape Component Shape implementation. 14
  • 15. High-Level Architecture Component that draws the shape in parent frame; looks Shape up shape via Drawing 1 1 1 Drawing Frame * Default Tracker Frame rather than having a direct Shape reference. 1 1 1 1 * 1 Shape Simple Component Shape 15
  • 16. LIVE DEMO Example Application  16
  • 17.  3 Example Application Why OSGi?  17
  • 18. Class Path Hell • Can you spot some potential problems? 18
  • 19. Class Path Hell • What libs are used? Versions? • Which jar is used? Version? • No difference between private and public classes 19
  • 20. Java's Shortcomings • Simplistic version handling – “First” class from class path – JAR files assume backwards compatibility at best • Implicit dependencies – Dependencies are implicit in class path ordering – JAR files add improvements for extensions, but cannot control visibility 20
  • 21. Java's Shortcomings • Split packages by default – Class path approach searches until it finds, which leads to shadowing or version mixing • Limited scoping mechanisms – No module access modifier – Impossible to declare all private stuff as private • Missing module concept – Classes are too fine grained, packages are too simplistic, class loaders are too low level • No deployment/lifecycle support 21
  • 22. Java Dynamism Limitations • Low-level support for dynamics – Class loaders are complicated to use and error prone • Support for dynamics is still purely manual – Must be completely managed by the programmer – Leads to many ad hoc, incompatible solutions • Limited deployment support 22
  • 23. OSGi Technology • Adds modularity and dynamics – Module concept • Explicit sharing (importing and exporting) – Automatic management of code dependencies • Enforces sophisticated consistency rules for class loading – Life-cycle management • Manages dynamic deployment and configuration • Service Registry – Publish/find/bind 23
  • 24. OSGi Alliance • Industry consortium • OSGi Service Platform specification – Framework specification for hosting dynamically downloadable services – Standard service specifications • Several expert groups define the specifications – Core Platform Expert Group (CPEG) – Mobile Expert Group (MEG) – Vehicle Expert Group (VEG) – Enterprise Expert Group (EEG) 24
  • 25.  4 Example Application Apache Felix  25
  • 26. Apache Felix • Top-level project (March 2007) • OSGi R4 (R4.2) implementation – Framework (frequent releases) – Services (continued development) • Log, Package Admin, Event Admin, Configuration Admin, Declarative Services, Meta Type, Deployment Admin (and more) – Moving towards completing R4.2 • Tools – Maven Plugins, Web Console, iPojo – Karaf, Sigil 26
  • 27. Apache Felix • Growing community – Diverse and healthy! – Several code grants and contributions – Various (Apache) projects use Felix / have expressed interest in Felix and/or OSGi • e.g., ServiceMix, Directory, Sling, Tuscany • Roadmap – Continue toward R4.2 compliance – New Tools (Karaf, Sigil) 27
  • 28.  5 Example Application 1 OSGi – Part Bundles  28
  • 29. OSGi Architectural Overview Bundle k or ew am Fr OSGi Java Operating System Driver Driver Driver Hardware 29
  • 30. OSGi Framework Layering L3 – Provides a publish/find/bind service model to SERVICE MODEL decouple bundles L2 - Manages the life cycle of bundle in a bundle repository without requiring the VM be restarted LIFECYCLE L1 - Creates the concept of modules (aka. bundles) that use classes from each other in a controlled way MODULE according to system and bundle constraints Execution L0 - •OSGi Minimum Execution Environment Environment CDC •CDC/Foundation CDC •JavaSE 30
  • 31. OSGi Framework • Component-oriented framework • Module concept: Bundles – Separate class loader -> graph – Package sharing and version management – Life-cycle management and notification • Dynamic! – Install, update, and uninstall at runtime • Runs multiple applications and services in a single VM 31
  • 32. OSGi Modularity • Explicit code boundaries and dependencies – Package imports and exports • Multi-version support – Version ranges for dependencies • Class space is managed by OSGi • Managed life cycle – Dynamic install, update, uninstall 32
  • 33. OSGi Modularity - Example • Dynamic module deployment and dependency resolution Provided package existing bundle OSGi framework 33
  • 34. OSGi Modularity - Example • Dynamic module deployment and dependency resolution existing bundle install bundle.jar OSGi framework 34
  • 35. OSGi Modularity - Example • Dynamic module deployment and dependency resolution existing resolve bundle bundle OSGi framework 35
  • 36. OSGi Modularity - Example • Dynamic module deployment and dependency resolution automatic package dependency existing resolution bundle OSGi framework 36
  • 37. Creating a Bundle • Plain old JAR with additional metadata in the manifest – Bundle identifier, version, exports, imports • Tools – Text editor (Manifest) – Eclipse (PDE) – Bundle packaging tools • BND from Peter Kriens • Apache Felix maven-bundle-plugin based on BND 37
  • 38. Maven is Your Friend • Apache Felix Maven Bundle Plugin • Creates metadata based on POM – Automatically: import packages – Manually: export and private packages • Analyses classes for consistency • Allows to include dependencies • Creates final bundle JAR file 38
  • 39. Maven Bundle Plugin Sample <artifactId>org.apache.sling.engine</artifactId> <packaging>bundle</packaging> <version>2.0.7-SNAPSHOT</version> <build> <plugins> <plugin> <groupId>org.apache.felix</groupId> <artifactId>maven-bundle-plugin</artifactId> <extensions>true</extensions> <configuration> <instructions> <Export-Package> org.apache.sling.engine;version=${pom.version} </Export-Package> <Private-Package> org.apache.sling.engine.impl </Private-Package> <Embed-Dependency> commons-fileupload </Embed-Dependency> </instructions> 39
  • 40. Maven Bundle Plugin Sample <artifactId>org.apache.sling.engine</artifactId> <packaging>bundle</packaging> <version>2.0.7-SNAPSHOT</version> <build> <plugins> <plugin> <groupId>org.apache.felix</groupId> <artifactId>maven-bundle-plugin</artifactId> <extensions>true</extensions> <configuration> <instructions> <Export-Package> org.apache.sling.engine;version=${pom.version} </Export-Package> <Private-Package> org.apache.sling.engine.impl </Private-Package> <Embed-Dependency> commons-fileupload </Embed-Dependency> </instructions> 40
  • 41. Maven Bundle Plugin Sample <artifactId>org.apache.sling.engine</artifactId> <packaging>bundle</packaging> <version>2.0.7-SNAPSHOT</version> <build> <plugins> <plugin> <groupId>org.apache.felix</groupId> <artifactId>maven-bundle-plugin</artifactId> <extensions>true</extensions> <configuration> <instructions> <Export-Package> org.apache.sling.engine;version=${pom.version} </Export-Package> <Private-Package> org.apache.sling.engine.impl </Private-Package> <Embed-Dependency> commons-fileupload </Embed-Dependency> </instructions> 41
  • 42. Maven Bundle Plugin Sample <artifactId>org.apache.sling.engine</artifactId> <packaging>bundle</packaging> <version>2.0.7-SNAPSHOT</version> <build> <plugins> <plugin> <groupId>org.apache.felix</groupId> <artifactId>maven-bundle-plugin</artifactId> <extensions>true</extensions> <configuration> <instructions> <Export-Package> org.apache.sling.engine;version=${pom.version} </Export-Package> <Private-Package> org.apache.sling.engine.impl </Private-Package> <Embed-Dependency> commons-fileupload </Embed-Dependency> </instructions> 42
  • 43. Be Modular! • Create clean package spaces – public vs private • Provide Bundles – Add manifest information • Think about dependencies – Additional bundle vs include – Optional – Version ranges • Manage releases and versions properly • Benefits even without OSGi 43
  • 44.  6 Example Application 2 OSGi – Part Services  44
  • 45. OSGi Services (1/3) • Service-oriented architecture – Publish/find/bind – Possible to use modules without services Service Registry Publish Find Service Description Service Service Provider Interact Requester 45
  • 46. OSGi Services (2/3) • An OSGi application is... – A collection of bundles that interact via service interfaces – Bundles may be independently developed and deployed – Bundles and their associated services may appear or disappear at any time • Resulting application follows a Service- Oriented Component Model approach 46
  • 47. OSGi Services (3/3) • Dynamic service lookup Provided service Provided package existing bundle component OSGi framework 47
  • 48. OSGi Services (3/3) • Dynamic service lookup existing bundle install component bundle.jar OSGi framework 48
  • 49. OSGi Services (3/3) • Dynamic service lookup existing activate bundle bundle component OSGi framework 49
  • 50. OSGi Services (3/3) • Dynamic service lookup automatic package dependency resolution existing bundle component OSGi framework 50
  • 51. OSGi Services (3/3) • Dynamic service lookup manual service dependency resolution existing bundle component OSGi framework 51
  • 52. OSGi Services Advantages • Lightweight services – Lookup is based on interface name – Direct method invocation • Good design practice – Separates interface from implementation – Enables reuse, substitutability, loose coupling, and late binding 52
  • 53. OSGi Services Advantages • Dynamic – Loose coupling and late binding • Application's configuration is simply the set of deployed bundles – Deploy only the bundles that you need 53
  • 54. OSGi Services Issues • More sophisticated, but more complicated – Requires a different way of thinking • Things might appear/disappear at any moment – Must manually resolve and track services • There is help – Service Tracker • Still somewhat of a manual approach – Declarative Services, Blueprint, iPOJO • Sophisticated service-oriented component frameworks • Automated dependency injection and more • More modern, POJO-oriented approaches 54
  • 55.  7 Example Application 3 OSGi – Part Dynamics  55
  • 56. Everything is a Bundle • How to structure bundles? – API vs implementation bundle – Fine-grained vs coarse-grained – No “One Size Fits All” • Simple Rules – Stable code vs changing code – Optional parts 56
  • 57. Third Party Libraries • Use them as bundles – Project delivers already a bundle • Apache Commons, Apache Sling etc. – Use special bundle repositories • Felix Commons, Spring etc. • But check included metadata! – Create your own wrapper • Easy with the Felix maven bundle plugin • Include classes in your bundle – Again: easy with the Felix maven bundle plugin 57
  • 58. Everything is Dynamic • Bundles can come and go! – Packages – Services • Services can come and go! • Be prepaired! – Application code must handle dynamics! 58
  • 59. Dynamic Services • OSGi Declarative Services Specification – XML Configuration • Contained in bundle • Manifest entry pointing to config(s) – Publishing services – Consuming services • Policy (static,dynamic), cardinality (0..1, 1..1, 0..n) – Default configuration – Service Lifecycle management • Various Implementations – Apache Felix SCR 59
  • 60. Dynamic Services Configuration <scr:component enabled="true" name="org.apache.sling.event.impl.DistributingEventHandler"> <implementation class="org.apache.sling.event.impl.DistributingEventHandler"/> <service servicefactory="false"> <provide interface="org.osgi.service.event.EventHandler"/> </service> <property name="repository.path" value="/var/eventing/distribution"/> <property name="cleanup.period" type="Integer" value="15"/> <reference name="threadPool" interface="org.apache.sling.event.ThreadPool" cardinality="1..1" policy="static" bind="bindThreadPool" unbind="unbindThreadPool"/> 60
  • 61. Dynamic Services Configuration <scr:component enabled="true" name="org.apache.sling.event.impl.DistributingEventHandler"> <implementation class="org.apache.sling.event.impl.DistributingEventHandler"/> <service servicefactory="false"> <provide interface="org.osgi.service.event.EventHandler"/> </service> <property name="repository.path" value="/var/eventing/distribution"/> <property name="cleanup.period" type="Integer" value="15"/> <reference name="threadPool" interface="org.apache.sling.event.ThreadPool" cardinality="1..1" policy="static" bind="bindThreadPool" unbind="unbindThreadPool"/> 61
  • 62. Dynamic Services Configuration <scr:component enabled="true" name="org.apache.sling.event.impl.DistributingEventHandler"> <implementation class="org.apache.sling.event.impl.DistributingEventHandler"/> <service servicefactory="false"> <provide interface="org.osgi.service.event.EventHandler"/> </service> <property name="repository.path" value="/var/eventing/distribution"/> <property name="cleanup.period" type="Integer" value="15"/> <reference name="threadPool" interface="org.apache.sling.event.ThreadPool" cardinality="1..1" policy="static" bind="bindThreadPool" unbind="unbindThreadPool"/> 62
  • 63. Dynamic Services Configuration <scr:component enabled="true" name="org.apache.sling.event.impl.DistributingEventHandler"> <implementation class="org.apache.sling.event.impl.DistributingEventHandler"/> <service servicefactory="false"> <provide interface="org.osgi.service.event.EventHandler"/> </service> <property name="repository.path" value="/var/eventing/distribution"/> <property name="cleanup.period" type="Integer" value="15"/> <reference name="threadPool" interface="org.apache.sling.event.ThreadPool" cardinality="1..1" policy="static" bind="bindThreadPool" unbind="unbindThreadPool"/> 63
  • 64. Declarative Services • Reads XML configs on bundle start • Registers services • Keeps track of dependencies – Starts/stops services • Invokes optional activation and deactivation method – Provides access to configuration • Caution: A service is by default only started if someone else uses it! – Immediate flag forces a service start 64
  • 65. Example Service protected ThreadPool threadPool; protected void activate(ComponentContext context) throws Exception { @SuppressWarnings("unchecked") final Dictionary<String, Object> props = context.getProperties(); this.cleanupPeriod = (Integer)props.get("cleanup.period"); super.activate(context); } protected void bindThreadPool(ThreadPool p) { this.threadPool = p; } protected void unbindThreadPool(ThreadPool p) { if ( this.threadPool == p ) { this.threadPool = null; } } 65
  • 66. Config Admin and Metatype • OSGi Config Admin – Configuration Manager – Persistence storage – API to retrieve/update/remove configs – Works with Declarative Services • OSGi Metatype Service – Description of bundle metadata – Description of service configurations • Various Implementations – Apache Felix 66
  • 67. Maven SCR Plugin • Combines everything (DS, ConfigAdmin, Metatype, Maven) • Annotation-based (even for 1.4) • Annotate components – Properties with default values – Service providers – Services references (policy and cardinality) • Generates DS XML • Generates Metatype config • Generates Java code 67
  • 68. SCR Plugin Sample /** * @scr.component * @scr.property name="repository.path" value="/var/eventing/distribution" private="true" * @scr.service interface="EventHandler" */ public class DistributingEventHandler implements EventHandler { protected static final int DEFAULT_CLEANUP_PERIOD = 15; /** @scr.property valueRef="DEFAULT_CLEANUP_PERIOD" type="Integer" */ protected static final String PROP_CLEANUP_PERIOD = "cleanup.period"; /** @scr.reference */ protected ThreadPool threadPool; protected void activate(ComponentContext context) throws Exception { final Dictionary<String, Object> props = context.getProperties(); this.cleanupPeriod = (Integer)props.get(PROP_CLEANUP_PERIOD); } 68
  • 69. Alternatives • Manually through bundle activator • Apache Felix iPojo – Next session in this track! • Blueprint Container Specification – Apache Aries (Incubator) 69
  • 70. Handling extensibility • Two basic implementation strategies – Service-based approach – Extender model 70
  • 71. Service Whiteboard Pattern • Clients register a service interface • Service tracker for registered services • Simple, more robust, leverages the OSGi service model • Service whiteboard pattern – It is an Inversion of Control pattern 71
  • 72. Externder Model • Bundles contain manifest entries – Like available service classes • Custom bundle tracker – Keeps track of bundles – Specifically, STARTED and STOPPED events – Checks bundles manifest data • Creates/removes services 72
  • 73.  8 Example Application Famous Final Words  73
  • 74. Apache Felix Karaf • OSGi based kernel • Includes a preset of bundles • File based deployment and configuration • Assemblies • Extensible shell console • Download and go solution 74
  • 75. Apache Felix Sigil • OSGi centric development tools • Property configuration file • Integration with Ivy and Eclipse – Dependency Analysis – Repository browser – Respects private packages of dependencies – Quick fix support • Roadmap – Maven support – Extension points 75
  • 76. Suggestions for Development • Think about modularity! – Clean package space • Think about dynamics! • Consider OSGi • Check out the spec and other projects – Attend today's OSGi/Felix track • Minimize dependencies to OSGi – but only if it makes sense 76
  • 77. Suggestions for Using OSGi • Think about dynamics – Optional bundles – Optional services – Handle these cases • Use your preferred logging library – LogManager takes care • Use available tooling • Be part of the community! 77
  • 78. Check It Out • Read the OSGi spec – Framework – Config Admin, Metatype, Declarative Services – Deployment Admin, OBR • Download Apache Felix – Try tutorials and samples – Quickstart with Apache Felix Karaf • Download Apache Sling :) • Explore the web – embrace OSGi 78
  • 79. OSGi Embrace Change Questions?