SlideShare ist ein Scribd-Unternehmen logo
1 von 49
Downloaden Sie, um offline zu lesen
Tuscany: Applying OSGi
 modularity after the fact
Luciano Resende
lresende@apache.org
http://lresende.blogspot.com

Raymond Feng
rfeng@apache.org
Agenda
•  Introduction and Motivation
•  Status of current Tools
•  Applying OSGi to Tuscany
     –    Requirements
     –    Third-party dependencies
     –    Versioning
     –    Extensibility
•    Tuscany & OSGi current status
•    OSGi and SCA on the Application level
•    Summary
•    Live Demo
•    Q&A
About Apache Tuscany
•  Tuscany provides a component based
   programming model which simplifies
   development, assembly and deployment
   and management of composite applications
   in SOA.

•  Apache Tuscany implements SCA
   standards defined by the OASIS OpenCSA
   and also provides extensions based on real
   user feedback.
Tuscany Environment
        before OSGi
•  Modularization inspired in OSGi
  – 150+ Modules
•  Multiple Extensions with different
   levels of dependencies
  – 120+ 3rd Party Dependencies
•  Maven based build
Motivation for OSGi
•  Better class loading mechanism for our modules
•  Create clean boundaries between sub-systems
•  Facilitate embedding Tuscany in OSGi based
   environment
•  Without OSGi Java modularity is broken
   –  OO modularity too fine-grained
   –  Severely limited package modularity
   –  Jars have no modularity characteristics
   –  Classpath ordering defines which class you get
Constraints
•  No free-reign to drive through the changes
•  Community Concerns:
  –  Must not cease non-OSGi support
  –  Must not significantly increase distribution
     footprint
  –  Must not significantly increase build time
  –  Must not significantly increase runtime costs
  –  Must not overburden non-OSGi community
•  These constraints influence speed of and
   approach to OSGi adoption
Supporting Tools
•  We have found various tools available
  – Dependency analyze tools
     •  BND
  – Bundle dependency visualization
     •  <coderthoughts /> - GMF
     •  <coderthoughts /> - ManyEyes
  – Maven related tools
     •  Various maven plugins

•  Our experience
  – In general, most of the tools have
    particular issues that didn’t allow us to
    have a fully OSGi experience
Dependency Analysis Tools
•  BND
  –  Tool for creating Bundles
  –  Analyzes code to determine dependencies
  –  Supports directives to tailor OSGi Manifest
  –  Supports many build options
      •  Command Line
      •  Ant
      •  Maven
      •  Eclipse

                                   http://www.aqute.biz/Code/Bnd
Apache Felix Maven Bundle
          Plugin
•  The 'glue' between Maven and BND
...
<plugin>
    <groupId>org.apache.felix</groupId>
    <artifactId>maven-bundle-plugin</artifactId>
    <configuration>
      <instructions>
          <!-- Bundle versioned from Tuscany version -->
          <Bundle-Version>${tuscany.version}</Bundle-Version>
          <!-- Bundle Symbolic name -->
          <Bundle-SymbolicName>org.apache.tuscany.sca.api</Bundle-SymbolicName>
          <!-- Bundle description from pom description -->
          <Bundle-Description>${pom.description}</Bundle-Description>
          <!-- Export org.osoa.sca and all sub-packages -->
          <Export-Package>org.osoa.sca*</Export-Package>
          <!-- No Import-Package so calculate imports from code dependencies -->
      </instructions>
    </configuration>
</plugin>
...




                              http://felix.apache.org/site/apache-felix-maven-bundle-plugin-bnd.html
Apache Felix Maven Bundle
     Plugin - Caveats
•  Test dependencies are ignored during
   calculation of imported packages
  – Issues when tests have references to
    external packages

•  Current solution
  – Created maven plugin that consider test
    dependencies and properly find import
    packages and mark them as optional
Bundle dependency
         visualization
•  <coderthoughts /> + GMF
  – ASL2 licensed output from a blog by
    <coderthoughts />
  – Uses EMF to model and save Bundle
    runtime dependency resolution
  – Introspector bundle analyzes and saves
    dependencies from a running system
  – Uses GMF for Visualization



      http://coderthoughts.blogspot.com/2008/04/osgi-bundle-dependency-visualizer-in.html
<coderthoughts /> + GMF
•  Dependency analysis works very well
•  GMF visualization does not scale!
ManyEyes
•  IBM AlphaWorks shared data visualization service
•  Visualization options include
    –  Maps, Line Charts, Pie Charts, Tree Maps, Network
       Diagrams, and many more
•  Used Network Diagram to visualize dependencies
•  DataSet is simple table of dependant to dependee
    –  Can use 'cat', 'grep' and 'sed' to slice-n-dice the data and
       experiment with combining Bundles
•  <coderthoughts /> dependency analysis used to create
   DataSet




                                    http://services.alphaworks.ibm.com/manyeyes/home
<coderthoughts /> + ManyEyes




    http://services.alphaworks.ibm.com/manyeyes/view/SWhH8QsOtha6MtkkFzD9Q2~
Maven builds and OSGi
•  Maven 2.0.9+
  – Fixes for MNG-3396 and MNG-3410
    •  Fixes that allow definition of specific
       dependency version when dependency
       range was defined.
Maven builds and OSGi -
         Caveats
•  Version ranges have different meanings in Maven
   and OSGi
   –  OSGi
      •  x.y.z.q > x.y.z
      •  3.3.0 < 3.3.0-v20070606-0010
      •  3.3.0-v20070606-0010 is in [3.3,4.0)‫‏‬
   –  Maven
      •    x.y.z.q < x.y.z
      •    x.y.z-q < x.y.z
      •    3.3.0-v20070606-0010 < 3.3.0
      •    3.3.0-v20070606-0010 is not in [3.3,4.0)‫‏‬

      •  1.0.0-SNAPSHOT = work in progress towards 1.0.0
•  Workaround
   –  use <dependencyManagement> to explicitly define the
      version to be used
   –  Requires maven 2.0.9+
Maven Eclipse Plugin

•  Used to generate Eclipse IDE Files
   for given maven projects
  – *.classpath
  – *.wtpmodules
  – .settings folder
  – etc
Maven Eclipse Plugin -
          Caveats
•  Eclipse plugin add dependency jars
   directly in the project classpath in
   addition to the “eclipse bundle class
   path container”

•  Current solution
  – Created maven plugin to properly
    configure project classpath to use the
    “eclipse bundle class path container” and
    avoid adding the dependency jars
    directly to the classpath
Maven eclipse compiler

•  The Sun compiler is not aware of
   OSGi Import/Export

•  The maven-eclipse-compiler plugin
   allows us to directly use the Eclipse
   compiler that have better support for
   OSGi bundles
Maven eclipse compiler -
         Caveats
•  We found various issues with the
   eclipse compiler plugin
  – Warnings would cause plugin to hang

•  Current solution
  – Using a forked version of the maven-
    eclipse-compiler plugin
  – Bring-up plugin to working stage
  – Enhanced to enforce OSGi Import/
    Export
Applying OSGi to Tuscany
One Big Bundle of Joy
•  Recommended practice when moving to
   OSGi*
    – Create one big bundle containing
      application and dependent libraries
    – Get it working in OSGi
    – Gradually replace dependent libraries with
      Bundles
    – Keep it working!
•  This is how we started...
    – 1 Bundle ~ 60MB made from 200+ jars
            *http://developers.sun.com/learning/javaoneonline/2008/pdf/TS-5122.pdf
Decomposition First Attempt
•  Identified five categories of jars and created
   corresponding Bundles
   –    org.apache.tuscany.sca.api.jar          18,701
   –    org.apache.tuscany.spi.jar             430,563
   –    org.apache.tuscany.runtime.jar         538,660
   –    org.apache.tuscany.extensions.jar    1,374,045
   –    org.apache.tuscany.depends.jar      57,872,558
•  Issues:
   –  Too coarse-grained to be of real value
   –  No opportunity for sub-setting
   –  Not modular
Re-using Existing
            Decomposition
•  Tuscany already decomposed into many Maven
   modules
•  Benefits:
    –  Maven Bundle Plugin makes it easy to create
       Bundles
    –  Matches community's existing understanding
    –  Same bundles can be used outside OSGi
    –  Easily sub-set as Tuscany intended
•  Issues:
    –  Lots of classloader issues
        •  Assumed single classloader
    –  Difficult to consume (200+ bundles)‫‏‬
Granularity
•  200+ bundles cumbersome
•  Multiple bundles required to enable
   one capability
•  Much debate about right level of
   granularity
•  Conclusion
  – Fine-grained bundles suitable for
    developer view
  – Features used to aggregate bundles to
    provide a user view
     •  Inspired by Eclipse Features
Third-party Libraries
•  Many third-party libraries not enabled for OSGi
•  Repositories are emerging
   –  OSGi Bundle Repository (OBR)‫‏‬
   –  Apache Felix Commons
   –  Eclipse Orbit
   –  SpringSource Bundle Repository
•  Tuscany has ~120 pre-requisite third-party
   libraries
•  Version and footprint constraints influence
   choice of approach
   –  Project not comfortable to go with repository
      choice
Third-party Library: wrap
•  Wrap the Jar in a Bundle
   –  Bundle-Classpath: third-party.jar
                           MANIFEST
                           Bundle-Classpath: third-party.jar               MANIFEST
                           Import-Package: ...                             Bundle-Classpath: third-party.jar
                                                                           Import-Package: ...
                           Export-Package: ...                             Export-Package: ...
                           ...
   third-party.jar   BND                                       Install     ...
                                                                                 third-party.jar
                                third-party.jar                              third-party-osgi.jar



                            third-party-osgi.jar                         OSGi Framework

•  Pros
   –  Works for signed Jars
   –  Can aggregate multiple Jars
•  Cons
   –  Jar no longer works in non-OSGi environment (doubles the
      build footprint)‫‏‬
Third-party Library: convert
•  Convert the Jar to a Bundle

                                                            MANIFEST
                          MANIFEST                          Import-Package: ...
                                                            Export-Package: ...
                          Import-Package: ...               ...
  third-party.jar   BND
                          Export-Package: ...
                          ...
                                                Install
                                                                  third-party.jar

                              third-party.jar
                                                          OSGi Framework

•  Pros
   –  Jar works in non-OSGi environment (no footprint issue)‫‏‬
•  Cons
   –  Doesn't work for signed Jars
   –  May affect library licensing
   –  Can't aggregate multiple Jars
Third-party Library: virtual
                      bundle
•  Convert Jar to a Bundle at runtime
    –  Manifest pre-generated or created on-the-fly
 MANIFEST
 Import-Package: ...
 Export-Package: ...
 ...                                                    MANIFEST
                                                        Import-Package: ...
                                                        Export-Package: ...
                          Installer Bundle    Install   ...
               BND




                                                        Third-party Bundle
     third-party.jar
                                             OSGi Framework
•  Pros
      –  Jars completely unchanged
      –  Works for signed Jars
•  Cons
      –  No 'real' bundle to work with during development
      –  Messy – two artefacts to manage
Third-party Library: Unpacked
               wrap
•  Unpacked wrap style bundle
   –  Bundle-Classpath: third-party.jar

                            MANIFEST
                            Bundle-Classpath: third-party.jar               MANIFEST
                            Dynamic-Import-Package: *                       Bundle-Classpath: third-party.jar
                                                                            Import-Package: ...
                            Export-Package: ...                             Export-Package: ...
                            ...
   third-party.jar                                              Install     ...
                                                                                  third-party.jar
                                 third-party.jar                              third-party-osgi.jar



•  Pros                                                                   OSGi Framework
   –  Works for signed Jars
   –  Can aggregate multiple Jars
•  Cons
   –  Dynamic resolving might have performance implications
          •  Working on enhancing the tools to use BND logic to calculate import
             packages
Third-Party Libraries Issues
•  Libraries with Split Package
  –  Create a bundle with multiple jars
      •  (e.g. Google Data)



•  Broken bundles
  –  Override existent MANIFEST.MF
      •  (e.g. Axis2, Woden, WS-Commons)
OSGi Versioning
•  Package exports can specify a version
•  Package imports can specify a version range
•  The OSGi resolver 'wires' imports to exports

                                                             Bundle
                                                               A

         Bundle                            Export-Package:
           B                               org.pkg.x;version=1.6.2

      Import-Package:
      org.pkg.x;version=”[1.5.0, 2.0.0)”
                                                             Bundle
                                                               C

                                           Export-Package:
                                           org.pkg.x;version=2.0.0
“Without the testing,

                                 Versioning
    “Apache Commons                                                we can't be sure of
     has guidelines, we                                                anything.”
    should trust them to
     do the right thing.”




             The Idealist                          The Realist (paranoid)
•  Version range [1.5.0, 2.0.0)‫‏‬               •  Fixed version [1.5.0, 1.5.0]
•  Flexible                                    •  Inflexible
•  Relies on others to do the                  •  Will get the version you
   right thing                                    tested against
•  Risky                                       •  Safe
•  Makes an untested support                   •  Inhibits bundle updates
   statement
                            Tuscany community chose to start with fixed versions
                            with a view to introducing ranges through experience
Versioning Issues
•  Be aware of version range stuff
  – Different containers can behave
    differently
Extension Registry Pattern
•  Module declares extension point
•  Modules contribute extensions which implementation
   extension points
•  Extension Registry manages extension point and extension
   matching
•  Used extensively in Eclipse (not standard OSGi and not part of
   Felix)‫‏‬

                                                        Extension


        Extension Point

                                                        Extension

          Extension Point
           managed by
         Extension Registry

                              http://www.eclipsezone.com/articles/extensions-vs-services/
Tuscany Extensibility

•  OSGi optional so Tuscany needed its own thing
   –  inspired by Extension Registry

•  Tuscany SPI defines extension points

•  Extension Modules contribute
   –  Bindings (REST, json-rpc, SOAP, ...)‫‏‬
   –  Implementation Types (POJO, BPEL, OSGi, ...)‫‏‬
   –  Interface Types (Java, WSDL)‫‏‬
Other caveats found during
 Tuscany OSGifying Quest
•  Issues with system packages that are available in
   recent versions of the JDK
    –  This can cause conflicts and/or missing
       dependencies if they are not explicitly imported
       by the bundle

•  Be aware of TCCL (ThreadContext
   Classloader)
   –  JDK and some 3rd party libraries uses service
      discover pattern relying on TCCL being able to
      load/see everything
Runtime issues exposed
 during Tuscany OSGifying
           Quest
•  Missing Extensibility
   –  Added extension points to various hard-coded
      extensions

•  Broken Modularity
   –  Refactored some modules to allow better
      sharing of common code between bundles
Maintaining a OSGi Runtime
•  Ongoing development causes corrupts bundle
   –  Most likely caused by members of the
      community that has not fully embraced OSGi
      (e.g does not use Eclipse PDE)
      •  Community members usually just fix these issues


•  New modules are often broken OSGi bundles
   –  Required steps to add new modules are still
      hard as there is a need to regenerate and
      reimport the PDE Target platform

•  Every now and then we start a discussion
   about merging modules
Tuscany & OSGi
 current status
Tuscany runtime
•  Tuscany OSGi Tools supporting full
   development lifecycle:
  – Build, IDE integration, Launchers, OSGi
    Console
•  Tuscany 2.x SCA Runtime fully OSGi
   Enabled
•  Support Felix and Equinox runtimes
•  Expanded to support OSGi remote
   services
OSGi Tools
•  Maven-bundle-plugin
  –  Generates bundles for 3rd party jars
  –  Generates OSGi enabled PDE projects
  –  Version 1.0.4 released at 10/09/2009
•  Maven-eclipse-compiler
  –  Expose OSGi aware Eclipse JDT compiler
  –  Expose Eclipse OSGi bundle validation
  –  Version 1.0.1 released on 04/07/2009
•  Maven-osgi-junit-plugin
  –  JUnit tests in a OSGi enabled environment
  –  Version 1.0 released on 10/28/2009

       http://svn.apache.org/repos/asf/tuscany/maven-plugins/trunk/
OSGi & SCA
Application Level
OSGi & SCA
•  Support OSGi as a packaging
   mechanism for SCA application
   artifacts (contributions)‫‏‬
  – SCA specification already mentions
    OSGi as package skin
  – Leverage OSGi import/export to import
    java artifacts from different SCA
    application artifacts (contributions)‫‏‬
•  Support OSGi as an SCA Component
   Implementation Type
  – Use SCA to assemble OSGi Bundles
    with other implementation technologies
OSGi Remote Services
•  The OSGi core framework specifies a
   model where bundles can use
   distributed services. (R4.2)
•  The basic model for OSGi remote
   services is that a bundle can:
  – register services that are exported to a
    communication endpoint
  – use services that are imported from a
    communication endpoint
Summary
Summary
•  It is indeed possible !
   –  Necessary tooling for lifecycle development and
      a OSGi enable SCA runtime are ready
•  Current Approach
   –  Tuscany Modules  OSGi Modules
   –  3rd Party Libraries  OSGi Modules
      •  Using Unpacked wrap style bundle
   –  Bundle Manifests available in source repository
      and tweaked for optional test dependencies
   –  Various OSGi tools released by Tuscany
      community
Live Demo
Useful Links
•    Apache Tuscany
      –  http://tuscany.apache.org
•    Apache Felix
      –  http://felix.apache.org
•    Eclipse Equinox
      –  http://www.eclipse.org/equinox/
•    OSGi Alliance
      –  http://www.osgi.org
•    OSGi Best Practices
      –  http://developers.sun.com/learning/javaoneonline/2007/pdf/TS-1419.pdf
•    Converting (Large) Applications to OSGi
      –  http://developers.sun.com/learning/javaoneonline/2008/pdf/TS-5122.pdf

Weitere ähnliche Inhalte

Was ist angesagt?

Maven for Dummies
Maven for DummiesMaven for Dummies
Maven for DummiesTomer Gabel
 
Apache Maven for SoftServe IT Academy
Apache Maven for SoftServe IT AcademyApache Maven for SoftServe IT Academy
Apache Maven for SoftServe IT AcademyVolodymyr Ostapiv
 
Version Management in Maven
Version Management in MavenVersion Management in Maven
Version Management in MavenGeert Pante
 
Note - Apache Maven Intro
Note - Apache Maven IntroNote - Apache Maven Intro
Note - Apache Maven Introboyw165
 
Build Automation using Maven
Build Automation using Maven Build Automation using Maven
Build Automation using Maven Ankit Gubrani
 
Hands On with Maven
Hands On with MavenHands On with Maven
Hands On with MavenSid Anand
 
Automated Deployment with Maven - going the whole nine yards
Automated Deployment with Maven - going the whole nine yardsAutomated Deployment with Maven - going the whole nine yards
Automated Deployment with Maven - going the whole nine yardsJohn Ferguson Smart Limited
 
Java, Eclipse, Maven & JSF tutorial
Java, Eclipse, Maven & JSF tutorialJava, Eclipse, Maven & JSF tutorial
Java, Eclipse, Maven & JSF tutorialRaghavan Mohan
 
Java 9 and the impact on Maven Projects (JavaOne 2016)
Java 9 and the impact on Maven Projects (JavaOne 2016)Java 9 and the impact on Maven Projects (JavaOne 2016)
Java 9 and the impact on Maven Projects (JavaOne 2016)Robert Scholte
 
Plugins 2.0 & OSGi Gotchas - Atlassian Summit 2010
Plugins 2.0 & OSGi Gotchas - Atlassian Summit 2010Plugins 2.0 & OSGi Gotchas - Atlassian Summit 2010
Plugins 2.0 & OSGi Gotchas - Atlassian Summit 2010Atlassian
 
Apache Maven supports all Java (JokerConf 2018)
Apache Maven supports all Java (JokerConf 2018)Apache Maven supports all Java (JokerConf 2018)
Apache Maven supports all Java (JokerConf 2018)Robert Scholte
 
Labri 2021-invited-talk
Labri 2021-invited-talkLabri 2021-invited-talk
Labri 2021-invited-talkvschiavoni
 
Maven 3 Overview
Maven 3  OverviewMaven 3  Overview
Maven 3 OverviewMike Ensor
 
An Introduction to Maven Part 1
An Introduction to Maven Part 1An Introduction to Maven Part 1
An Introduction to Maven Part 1MD Sayem Ahmed
 
OSGi Enablement For Apache Tuscany
OSGi Enablement For Apache TuscanyOSGi Enablement For Apache Tuscany
OSGi Enablement For Apache TuscanyRaymond Feng
 
Maven Basics - Explained
Maven Basics - ExplainedMaven Basics - Explained
Maven Basics - ExplainedSmita Prasad
 

Was ist angesagt? (20)

Maven for Dummies
Maven for DummiesMaven for Dummies
Maven for Dummies
 
Apache Maven for SoftServe IT Academy
Apache Maven for SoftServe IT AcademyApache Maven for SoftServe IT Academy
Apache Maven for SoftServe IT Academy
 
Version Management in Maven
Version Management in MavenVersion Management in Maven
Version Management in Maven
 
Note - Apache Maven Intro
Note - Apache Maven IntroNote - Apache Maven Intro
Note - Apache Maven Intro
 
Build Automation using Maven
Build Automation using Maven Build Automation using Maven
Build Automation using Maven
 
Hands On with Maven
Hands On with MavenHands On with Maven
Hands On with Maven
 
Automated Deployment with Maven - going the whole nine yards
Automated Deployment with Maven - going the whole nine yardsAutomated Deployment with Maven - going the whole nine yards
Automated Deployment with Maven - going the whole nine yards
 
Liferay maven sdk
Liferay maven sdkLiferay maven sdk
Liferay maven sdk
 
Apache Maven In 10 Slides
Apache Maven In 10 SlidesApache Maven In 10 Slides
Apache Maven In 10 Slides
 
Maven
MavenMaven
Maven
 
Java, Eclipse, Maven & JSF tutorial
Java, Eclipse, Maven & JSF tutorialJava, Eclipse, Maven & JSF tutorial
Java, Eclipse, Maven & JSF tutorial
 
Java 9 and the impact on Maven Projects (JavaOne 2016)
Java 9 and the impact on Maven Projects (JavaOne 2016)Java 9 and the impact on Maven Projects (JavaOne 2016)
Java 9 and the impact on Maven Projects (JavaOne 2016)
 
Apache Maven
Apache MavenApache Maven
Apache Maven
 
Plugins 2.0 & OSGi Gotchas - Atlassian Summit 2010
Plugins 2.0 & OSGi Gotchas - Atlassian Summit 2010Plugins 2.0 & OSGi Gotchas - Atlassian Summit 2010
Plugins 2.0 & OSGi Gotchas - Atlassian Summit 2010
 
Apache Maven supports all Java (JokerConf 2018)
Apache Maven supports all Java (JokerConf 2018)Apache Maven supports all Java (JokerConf 2018)
Apache Maven supports all Java (JokerConf 2018)
 
Labri 2021-invited-talk
Labri 2021-invited-talkLabri 2021-invited-talk
Labri 2021-invited-talk
 
Maven 3 Overview
Maven 3  OverviewMaven 3  Overview
Maven 3 Overview
 
An Introduction to Maven Part 1
An Introduction to Maven Part 1An Introduction to Maven Part 1
An Introduction to Maven Part 1
 
OSGi Enablement For Apache Tuscany
OSGi Enablement For Apache TuscanyOSGi Enablement For Apache Tuscany
OSGi Enablement For Apache Tuscany
 
Maven Basics - Explained
Maven Basics - ExplainedMaven Basics - Explained
Maven Basics - Explained
 

Andere mochten auch

Building apps with tuscany
Building apps with tuscanyBuilding apps with tuscany
Building apps with tuscanyLuciano Resende
 
Building RESTful services using SCA and JAX-RS
Building RESTful services using SCA and JAX-RSBuilding RESTful services using SCA and JAX-RS
Building RESTful services using SCA and JAX-RSLuciano Resende
 
How mentoring programs can help newcomers get started with open source
How mentoring programs can help newcomers get started with open sourceHow mentoring programs can help newcomers get started with open source
How mentoring programs can help newcomers get started with open sourceLuciano Resende
 
S314011 - Developing Composite Applications for the Cloud with Apache Tuscany
S314011 - Developing Composite Applications for the Cloud with Apache TuscanyS314011 - Developing Composite Applications for the Cloud with Apache Tuscany
S314011 - Developing Composite Applications for the Cloud with Apache TuscanyLuciano Resende
 
Building Asynchronous Services With Sca
Building Asynchronous Services With ScaBuilding Asynchronous Services With Sca
Building Asynchronous Services With ScaLuciano Resende
 
Data access layer and schema definitions
Data access layer and schema definitionsData access layer and schema definitions
Data access layer and schema definitionsLuciano Resende
 
Luciano Resende's keynote at Apache big data conference
Luciano Resende's keynote at Apache big data conferenceLuciano Resende's keynote at Apache big data conference
Luciano Resende's keynote at Apache big data conferenceLuciano Resende
 
How mentoring can help you start contributing to open source
How mentoring can help you start contributing to open sourceHow mentoring can help you start contributing to open source
How mentoring can help you start contributing to open sourceLuciano Resende
 
Writing Apache Spark and Apache Flink Applications Using Apache Bahir
Writing Apache Spark and Apache Flink Applications Using Apache BahirWriting Apache Spark and Apache Flink Applications Using Apache Bahir
Writing Apache Spark and Apache Flink Applications Using Apache BahirLuciano Resende
 
SystemML - Declarative Machine Learning
SystemML - Declarative Machine LearningSystemML - Declarative Machine Learning
SystemML - Declarative Machine LearningLuciano Resende
 

Andere mochten auch (11)

Building apps with tuscany
Building apps with tuscanyBuilding apps with tuscany
Building apps with tuscany
 
Building RESTful services using SCA and JAX-RS
Building RESTful services using SCA and JAX-RSBuilding RESTful services using SCA and JAX-RS
Building RESTful services using SCA and JAX-RS
 
How mentoring programs can help newcomers get started with open source
How mentoring programs can help newcomers get started with open sourceHow mentoring programs can help newcomers get started with open source
How mentoring programs can help newcomers get started with open source
 
S314011 - Developing Composite Applications for the Cloud with Apache Tuscany
S314011 - Developing Composite Applications for the Cloud with Apache TuscanyS314011 - Developing Composite Applications for the Cloud with Apache Tuscany
S314011 - Developing Composite Applications for the Cloud with Apache Tuscany
 
Building Asynchronous Services With Sca
Building Asynchronous Services With ScaBuilding Asynchronous Services With Sca
Building Asynchronous Services With Sca
 
SCA Reaches the Cloud
SCA Reaches the CloudSCA Reaches the Cloud
SCA Reaches the Cloud
 
Data access layer and schema definitions
Data access layer and schema definitionsData access layer and schema definitions
Data access layer and schema definitions
 
Luciano Resende's keynote at Apache big data conference
Luciano Resende's keynote at Apache big data conferenceLuciano Resende's keynote at Apache big data conference
Luciano Resende's keynote at Apache big data conference
 
How mentoring can help you start contributing to open source
How mentoring can help you start contributing to open sourceHow mentoring can help you start contributing to open source
How mentoring can help you start contributing to open source
 
Writing Apache Spark and Apache Flink Applications Using Apache Bahir
Writing Apache Spark and Apache Flink Applications Using Apache BahirWriting Apache Spark and Apache Flink Applications Using Apache Bahir
Writing Apache Spark and Apache Flink Applications Using Apache Bahir
 
SystemML - Declarative Machine Learning
SystemML - Declarative Machine LearningSystemML - Declarative Machine Learning
SystemML - Declarative Machine Learning
 

Ähnlich wie Tuscany : Applying OSGi After The Fact

An introduction to maven gradle and sbt
An introduction to maven gradle and sbtAn introduction to maven gradle and sbt
An introduction to maven gradle and sbtFabio Fumarola
 
Новый InterSystems: open-source, митапы, хакатоны
Новый InterSystems: open-source, митапы, хакатоныНовый InterSystems: open-source, митапы, хакатоны
Новый InterSystems: open-source, митапы, хакатоныTimur Safin
 
Alfresco DevCon 2018: SDK 3 Multi Module project using Nexus 3 for releases a...
Alfresco DevCon 2018: SDK 3 Multi Module project using Nexus 3 for releases a...Alfresco DevCon 2018: SDK 3 Multi Module project using Nexus 3 for releases a...
Alfresco DevCon 2018: SDK 3 Multi Module project using Nexus 3 for releases a...Martin Bergljung
 
Introduction to Maven for beginners and DevOps
Introduction to Maven for beginners and DevOpsIntroduction to Maven for beginners and DevOps
Introduction to Maven for beginners and DevOpsSISTechnologies
 
Jax london 2011
Jax london 2011Jax london 2011
Jax london 2011njbartlett
 
Java Core | Java 8 and OSGi Modularisation | Tim Ellison & Neil Bartlett
Java Core | Java 8 and OSGi Modularisation | Tim Ellison & Neil BartlettJava Core | Java 8 and OSGi Modularisation | Tim Ellison & Neil Bartlett
Java Core | Java 8 and OSGi Modularisation | Tim Ellison & Neil BartlettJAX London
 
Intelligent Projects with Maven - DevFest Istanbul
Intelligent Projects with Maven - DevFest IstanbulIntelligent Projects with Maven - DevFest Istanbul
Intelligent Projects with Maven - DevFest IstanbulMert Çalışkan
 
BMO - Intelligent Projects with Maven
BMO - Intelligent Projects with MavenBMO - Intelligent Projects with Maven
BMO - Intelligent Projects with MavenMert Çalışkan
 
Introduction to OSGi
Introduction to OSGiIntroduction to OSGi
Introduction to OSGipradeepfn
 
Riga Dev Day - Automated Android Continuous Integration
Riga Dev Day - Automated Android Continuous IntegrationRiga Dev Day - Automated Android Continuous Integration
Riga Dev Day - Automated Android Continuous IntegrationNicolas Fränkel
 
VIB - Very Important Bundles
VIB - Very Important BundlesVIB - Very Important Bundles
VIB - Very Important BundlesRoman Roelofsen
 
MyFaces CODI and JBoss Seam3 become Apache DeltaSpike
MyFaces CODI and JBoss Seam3 become Apache DeltaSpikeMyFaces CODI and JBoss Seam3 become Apache DeltaSpike
MyFaces CODI and JBoss Seam3 become Apache DeltaSpikeos890
 
OSGi in 5 minutes
OSGi in 5 minutesOSGi in 5 minutes
OSGi in 5 minutesSerge Huber
 
Brada -semantic-versioning-tool
Brada -semantic-versioning-toolBrada -semantic-versioning-tool
Brada -semantic-versioning-toolPremek Brada
 
Using nu get the way you should svcc
Using nu get the way you should   svccUsing nu get the way you should   svcc
Using nu get the way you should svccMaarten Balliauw
 
Apache maven and its impact on java 9 (Java One 2017)
Apache maven and its impact on java 9 (Java One 2017)Apache maven and its impact on java 9 (Java One 2017)
Apache maven and its impact on java 9 (Java One 2017)Robert Scholte
 
Introduction tomaven
Introduction tomavenIntroduction tomaven
Introduction tomavenManav Prasad
 

Ähnlich wie Tuscany : Applying OSGi After The Fact (20)

An introduction to maven gradle and sbt
An introduction to maven gradle and sbtAn introduction to maven gradle and sbt
An introduction to maven gradle and sbt
 
Maven
MavenMaven
Maven
 
Новый InterSystems: open-source, митапы, хакатоны
Новый InterSystems: open-source, митапы, хакатоныНовый InterSystems: open-source, митапы, хакатоны
Новый InterSystems: open-source, митапы, хакатоны
 
Alfresco DevCon 2018: SDK 3 Multi Module project using Nexus 3 for releases a...
Alfresco DevCon 2018: SDK 3 Multi Module project using Nexus 3 for releases a...Alfresco DevCon 2018: SDK 3 Multi Module project using Nexus 3 for releases a...
Alfresco DevCon 2018: SDK 3 Multi Module project using Nexus 3 for releases a...
 
4 maven junit
4 maven junit4 maven junit
4 maven junit
 
Introduction to Maven for beginners and DevOps
Introduction to Maven for beginners and DevOpsIntroduction to Maven for beginners and DevOps
Introduction to Maven for beginners and DevOps
 
Jax london 2011
Jax london 2011Jax london 2011
Jax london 2011
 
Java Core | Java 8 and OSGi Modularisation | Tim Ellison & Neil Bartlett
Java Core | Java 8 and OSGi Modularisation | Tim Ellison & Neil BartlettJava Core | Java 8 and OSGi Modularisation | Tim Ellison & Neil Bartlett
Java Core | Java 8 and OSGi Modularisation | Tim Ellison & Neil Bartlett
 
Intelligent Projects with Maven - DevFest Istanbul
Intelligent Projects with Maven - DevFest IstanbulIntelligent Projects with Maven - DevFest Istanbul
Intelligent Projects with Maven - DevFest Istanbul
 
BMO - Intelligent Projects with Maven
BMO - Intelligent Projects with MavenBMO - Intelligent Projects with Maven
BMO - Intelligent Projects with Maven
 
Introduction to OSGi
Introduction to OSGiIntroduction to OSGi
Introduction to OSGi
 
Riga Dev Day - Automated Android Continuous Integration
Riga Dev Day - Automated Android Continuous IntegrationRiga Dev Day - Automated Android Continuous Integration
Riga Dev Day - Automated Android Continuous Integration
 
VIB - Very Important Bundles
VIB - Very Important BundlesVIB - Very Important Bundles
VIB - Very Important Bundles
 
MyFaces CODI and JBoss Seam3 become Apache DeltaSpike
MyFaces CODI and JBoss Seam3 become Apache DeltaSpikeMyFaces CODI and JBoss Seam3 become Apache DeltaSpike
MyFaces CODI and JBoss Seam3 become Apache DeltaSpike
 
OSGi in 5 minutes
OSGi in 5 minutesOSGi in 5 minutes
OSGi in 5 minutes
 
Brada -semantic-versioning-tool
Brada -semantic-versioning-toolBrada -semantic-versioning-tool
Brada -semantic-versioning-tool
 
OSGI Modularity
OSGI ModularityOSGI Modularity
OSGI Modularity
 
Using nu get the way you should svcc
Using nu get the way you should   svccUsing nu get the way you should   svcc
Using nu get the way you should svcc
 
Apache maven and its impact on java 9 (Java One 2017)
Apache maven and its impact on java 9 (Java One 2017)Apache maven and its impact on java 9 (Java One 2017)
Apache maven and its impact on java 9 (Java One 2017)
 
Introduction tomaven
Introduction tomavenIntroduction tomaven
Introduction tomaven
 

Mehr von Luciano Resende

A Jupyter kernel for Scala and Apache Spark.pdf
A Jupyter kernel for Scala and Apache Spark.pdfA Jupyter kernel for Scala and Apache Spark.pdf
A Jupyter kernel for Scala and Apache Spark.pdfLuciano Resende
 
Using Elyra for COVID-19 Analytics
Using Elyra for COVID-19 AnalyticsUsing Elyra for COVID-19 Analytics
Using Elyra for COVID-19 AnalyticsLuciano Resende
 
Elyra - a set of AI-centric extensions to JupyterLab Notebooks.
Elyra - a set of AI-centric extensions to JupyterLab Notebooks.Elyra - a set of AI-centric extensions to JupyterLab Notebooks.
Elyra - a set of AI-centric extensions to JupyterLab Notebooks.Luciano Resende
 
From Data to AI - Silicon Valley Open Source projects come to you - Madrid me...
From Data to AI - Silicon Valley Open Source projects come to you - Madrid me...From Data to AI - Silicon Valley Open Source projects come to you - Madrid me...
From Data to AI - Silicon Valley Open Source projects come to you - Madrid me...Luciano Resende
 
Ai pipelines powered by jupyter notebooks
Ai pipelines powered by jupyter notebooksAi pipelines powered by jupyter notebooks
Ai pipelines powered by jupyter notebooksLuciano Resende
 
Strata - Scaling Jupyter with Jupyter Enterprise Gateway
Strata - Scaling Jupyter with Jupyter Enterprise GatewayStrata - Scaling Jupyter with Jupyter Enterprise Gateway
Strata - Scaling Jupyter with Jupyter Enterprise GatewayLuciano Resende
 
Scaling notebooks for Deep Learning workloads
Scaling notebooks for Deep Learning workloadsScaling notebooks for Deep Learning workloads
Scaling notebooks for Deep Learning workloadsLuciano Resende
 
Jupyter Enterprise Gateway Overview
Jupyter Enterprise Gateway OverviewJupyter Enterprise Gateway Overview
Jupyter Enterprise Gateway OverviewLuciano Resende
 
Inteligencia artificial, open source e IBM Call for Code
Inteligencia artificial, open source e IBM Call for CodeInteligencia artificial, open source e IBM Call for Code
Inteligencia artificial, open source e IBM Call for CodeLuciano Resende
 
IoT Applications and Patterns using Apache Spark & Apache Bahir
IoT Applications and Patterns using Apache Spark & Apache BahirIoT Applications and Patterns using Apache Spark & Apache Bahir
IoT Applications and Patterns using Apache Spark & Apache BahirLuciano Resende
 
Getting insights from IoT data with Apache Spark and Apache Bahir
Getting insights from IoT data with Apache Spark and Apache BahirGetting insights from IoT data with Apache Spark and Apache Bahir
Getting insights from IoT data with Apache Spark and Apache BahirLuciano Resende
 
Open Source AI - News and examples
Open Source AI - News and examplesOpen Source AI - News and examples
Open Source AI - News and examplesLuciano Resende
 
Building analytical microservices powered by jupyter kernels
Building analytical microservices powered by jupyter kernelsBuilding analytical microservices powered by jupyter kernels
Building analytical microservices powered by jupyter kernelsLuciano Resende
 
Building iot applications with Apache Spark and Apache Bahir
Building iot applications with Apache Spark and Apache BahirBuilding iot applications with Apache Spark and Apache Bahir
Building iot applications with Apache Spark and Apache BahirLuciano Resende
 
An Enterprise Analytics Platform with Jupyter Notebooks and Apache Spark
An Enterprise Analytics Platform with Jupyter Notebooks and Apache SparkAn Enterprise Analytics Platform with Jupyter Notebooks and Apache Spark
An Enterprise Analytics Platform with Jupyter Notebooks and Apache SparkLuciano Resende
 
The Analytic Platform behind IBM’s Watson Data Platform - Big Data Spain 2017
The Analytic Platform behind IBM’s Watson Data Platform - Big Data Spain 2017The Analytic Platform behind IBM’s Watson Data Platform - Big Data Spain 2017
The Analytic Platform behind IBM’s Watson Data Platform - Big Data Spain 2017Luciano Resende
 
What's new in Apache SystemML - Declarative Machine Learning
What's new in Apache SystemML  - Declarative Machine LearningWhat's new in Apache SystemML  - Declarative Machine Learning
What's new in Apache SystemML - Declarative Machine LearningLuciano Resende
 
Big analytics meetup - Extended Jupyter Kernel Gateway
Big analytics meetup - Extended Jupyter Kernel GatewayBig analytics meetup - Extended Jupyter Kernel Gateway
Big analytics meetup - Extended Jupyter Kernel GatewayLuciano Resende
 
Jupyter con meetup extended jupyter kernel gateway
Jupyter con meetup   extended jupyter kernel gatewayJupyter con meetup   extended jupyter kernel gateway
Jupyter con meetup extended jupyter kernel gatewayLuciano Resende
 

Mehr von Luciano Resende (20)

A Jupyter kernel for Scala and Apache Spark.pdf
A Jupyter kernel for Scala and Apache Spark.pdfA Jupyter kernel for Scala and Apache Spark.pdf
A Jupyter kernel for Scala and Apache Spark.pdf
 
Using Elyra for COVID-19 Analytics
Using Elyra for COVID-19 AnalyticsUsing Elyra for COVID-19 Analytics
Using Elyra for COVID-19 Analytics
 
Elyra - a set of AI-centric extensions to JupyterLab Notebooks.
Elyra - a set of AI-centric extensions to JupyterLab Notebooks.Elyra - a set of AI-centric extensions to JupyterLab Notebooks.
Elyra - a set of AI-centric extensions to JupyterLab Notebooks.
 
From Data to AI - Silicon Valley Open Source projects come to you - Madrid me...
From Data to AI - Silicon Valley Open Source projects come to you - Madrid me...From Data to AI - Silicon Valley Open Source projects come to you - Madrid me...
From Data to AI - Silicon Valley Open Source projects come to you - Madrid me...
 
Ai pipelines powered by jupyter notebooks
Ai pipelines powered by jupyter notebooksAi pipelines powered by jupyter notebooks
Ai pipelines powered by jupyter notebooks
 
Strata - Scaling Jupyter with Jupyter Enterprise Gateway
Strata - Scaling Jupyter with Jupyter Enterprise GatewayStrata - Scaling Jupyter with Jupyter Enterprise Gateway
Strata - Scaling Jupyter with Jupyter Enterprise Gateway
 
Scaling notebooks for Deep Learning workloads
Scaling notebooks for Deep Learning workloadsScaling notebooks for Deep Learning workloads
Scaling notebooks for Deep Learning workloads
 
Jupyter Enterprise Gateway Overview
Jupyter Enterprise Gateway OverviewJupyter Enterprise Gateway Overview
Jupyter Enterprise Gateway Overview
 
Inteligencia artificial, open source e IBM Call for Code
Inteligencia artificial, open source e IBM Call for CodeInteligencia artificial, open source e IBM Call for Code
Inteligencia artificial, open source e IBM Call for Code
 
IoT Applications and Patterns using Apache Spark & Apache Bahir
IoT Applications and Patterns using Apache Spark & Apache BahirIoT Applications and Patterns using Apache Spark & Apache Bahir
IoT Applications and Patterns using Apache Spark & Apache Bahir
 
Getting insights from IoT data with Apache Spark and Apache Bahir
Getting insights from IoT data with Apache Spark and Apache BahirGetting insights from IoT data with Apache Spark and Apache Bahir
Getting insights from IoT data with Apache Spark and Apache Bahir
 
Open Source AI - News and examples
Open Source AI - News and examplesOpen Source AI - News and examples
Open Source AI - News and examples
 
Building analytical microservices powered by jupyter kernels
Building analytical microservices powered by jupyter kernelsBuilding analytical microservices powered by jupyter kernels
Building analytical microservices powered by jupyter kernels
 
Building iot applications with Apache Spark and Apache Bahir
Building iot applications with Apache Spark and Apache BahirBuilding iot applications with Apache Spark and Apache Bahir
Building iot applications with Apache Spark and Apache Bahir
 
An Enterprise Analytics Platform with Jupyter Notebooks and Apache Spark
An Enterprise Analytics Platform with Jupyter Notebooks and Apache SparkAn Enterprise Analytics Platform with Jupyter Notebooks and Apache Spark
An Enterprise Analytics Platform with Jupyter Notebooks and Apache Spark
 
The Analytic Platform behind IBM’s Watson Data Platform - Big Data Spain 2017
The Analytic Platform behind IBM’s Watson Data Platform - Big Data Spain 2017The Analytic Platform behind IBM’s Watson Data Platform - Big Data Spain 2017
The Analytic Platform behind IBM’s Watson Data Platform - Big Data Spain 2017
 
What's new in Apache SystemML - Declarative Machine Learning
What's new in Apache SystemML  - Declarative Machine LearningWhat's new in Apache SystemML  - Declarative Machine Learning
What's new in Apache SystemML - Declarative Machine Learning
 
Big analytics meetup - Extended Jupyter Kernel Gateway
Big analytics meetup - Extended Jupyter Kernel GatewayBig analytics meetup - Extended Jupyter Kernel Gateway
Big analytics meetup - Extended Jupyter Kernel Gateway
 
Jupyter con meetup extended jupyter kernel gateway
Jupyter con meetup   extended jupyter kernel gatewayJupyter con meetup   extended jupyter kernel gateway
Jupyter con meetup extended jupyter kernel gateway
 
Asf icfoss-mentoring
Asf icfoss-mentoringAsf icfoss-mentoring
Asf icfoss-mentoring
 

Kürzlich hochgeladen

Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Enterprise Knowledge
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationSafe Software
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking MenDelhi Call girls
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CVKhem
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptxHampshireHUG
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdfhans926745
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationRadu Cotescu
 
Advantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your BusinessAdvantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your BusinessPixlogix Infotech
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024The Digital Insurer
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonAnna Loughnan Colquhoun
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘RTylerCroy
 
What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?Antenna Manufacturer Coco
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...apidays
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityPrincipled Technologies
 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024Results
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...Neo4j
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processorsdebabhi2
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slidespraypatel2
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsMaria Levchenko
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking MenDelhi Call girls
 

Kürzlich hochgeladen (20)

Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CV
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
Advantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your BusinessAdvantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your Business
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slides
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
 

Tuscany : Applying OSGi After The Fact

  • 1. Tuscany: Applying OSGi modularity after the fact Luciano Resende lresende@apache.org http://lresende.blogspot.com Raymond Feng rfeng@apache.org
  • 2. Agenda •  Introduction and Motivation •  Status of current Tools •  Applying OSGi to Tuscany –  Requirements –  Third-party dependencies –  Versioning –  Extensibility •  Tuscany & OSGi current status •  OSGi and SCA on the Application level •  Summary •  Live Demo •  Q&A
  • 3. About Apache Tuscany •  Tuscany provides a component based programming model which simplifies development, assembly and deployment and management of composite applications in SOA. •  Apache Tuscany implements SCA standards defined by the OASIS OpenCSA and also provides extensions based on real user feedback.
  • 4. Tuscany Environment before OSGi •  Modularization inspired in OSGi – 150+ Modules •  Multiple Extensions with different levels of dependencies – 120+ 3rd Party Dependencies •  Maven based build
  • 5. Motivation for OSGi •  Better class loading mechanism for our modules •  Create clean boundaries between sub-systems •  Facilitate embedding Tuscany in OSGi based environment •  Without OSGi Java modularity is broken –  OO modularity too fine-grained –  Severely limited package modularity –  Jars have no modularity characteristics –  Classpath ordering defines which class you get
  • 6. Constraints •  No free-reign to drive through the changes •  Community Concerns: –  Must not cease non-OSGi support –  Must not significantly increase distribution footprint –  Must not significantly increase build time –  Must not significantly increase runtime costs –  Must not overburden non-OSGi community •  These constraints influence speed of and approach to OSGi adoption
  • 7. Supporting Tools •  We have found various tools available – Dependency analyze tools •  BND – Bundle dependency visualization •  <coderthoughts /> - GMF •  <coderthoughts /> - ManyEyes – Maven related tools •  Various maven plugins •  Our experience – In general, most of the tools have particular issues that didn’t allow us to have a fully OSGi experience
  • 8. Dependency Analysis Tools •  BND –  Tool for creating Bundles –  Analyzes code to determine dependencies –  Supports directives to tailor OSGi Manifest –  Supports many build options •  Command Line •  Ant •  Maven •  Eclipse http://www.aqute.biz/Code/Bnd
  • 9. Apache Felix Maven Bundle Plugin •  The 'glue' between Maven and BND ... <plugin> <groupId>org.apache.felix</groupId> <artifactId>maven-bundle-plugin</artifactId> <configuration> <instructions> <!-- Bundle versioned from Tuscany version --> <Bundle-Version>${tuscany.version}</Bundle-Version> <!-- Bundle Symbolic name --> <Bundle-SymbolicName>org.apache.tuscany.sca.api</Bundle-SymbolicName> <!-- Bundle description from pom description --> <Bundle-Description>${pom.description}</Bundle-Description> <!-- Export org.osoa.sca and all sub-packages --> <Export-Package>org.osoa.sca*</Export-Package> <!-- No Import-Package so calculate imports from code dependencies --> </instructions> </configuration> </plugin> ... http://felix.apache.org/site/apache-felix-maven-bundle-plugin-bnd.html
  • 10. Apache Felix Maven Bundle Plugin - Caveats •  Test dependencies are ignored during calculation of imported packages – Issues when tests have references to external packages •  Current solution – Created maven plugin that consider test dependencies and properly find import packages and mark them as optional
  • 11. Bundle dependency visualization •  <coderthoughts /> + GMF – ASL2 licensed output from a blog by <coderthoughts /> – Uses EMF to model and save Bundle runtime dependency resolution – Introspector bundle analyzes and saves dependencies from a running system – Uses GMF for Visualization http://coderthoughts.blogspot.com/2008/04/osgi-bundle-dependency-visualizer-in.html
  • 12. <coderthoughts /> + GMF •  Dependency analysis works very well •  GMF visualization does not scale!
  • 13. ManyEyes •  IBM AlphaWorks shared data visualization service •  Visualization options include –  Maps, Line Charts, Pie Charts, Tree Maps, Network Diagrams, and many more •  Used Network Diagram to visualize dependencies •  DataSet is simple table of dependant to dependee –  Can use 'cat', 'grep' and 'sed' to slice-n-dice the data and experiment with combining Bundles •  <coderthoughts /> dependency analysis used to create DataSet http://services.alphaworks.ibm.com/manyeyes/home
  • 14. <coderthoughts /> + ManyEyes http://services.alphaworks.ibm.com/manyeyes/view/SWhH8QsOtha6MtkkFzD9Q2~
  • 15. Maven builds and OSGi •  Maven 2.0.9+ – Fixes for MNG-3396 and MNG-3410 •  Fixes that allow definition of specific dependency version when dependency range was defined.
  • 16. Maven builds and OSGi - Caveats •  Version ranges have different meanings in Maven and OSGi –  OSGi •  x.y.z.q > x.y.z •  3.3.0 < 3.3.0-v20070606-0010 •  3.3.0-v20070606-0010 is in [3.3,4.0)‫‏‬ –  Maven •  x.y.z.q < x.y.z •  x.y.z-q < x.y.z •  3.3.0-v20070606-0010 < 3.3.0 •  3.3.0-v20070606-0010 is not in [3.3,4.0)‫‏‬ •  1.0.0-SNAPSHOT = work in progress towards 1.0.0 •  Workaround –  use <dependencyManagement> to explicitly define the version to be used –  Requires maven 2.0.9+
  • 17. Maven Eclipse Plugin •  Used to generate Eclipse IDE Files for given maven projects – *.classpath – *.wtpmodules – .settings folder – etc
  • 18. Maven Eclipse Plugin - Caveats •  Eclipse plugin add dependency jars directly in the project classpath in addition to the “eclipse bundle class path container” •  Current solution – Created maven plugin to properly configure project classpath to use the “eclipse bundle class path container” and avoid adding the dependency jars directly to the classpath
  • 19. Maven eclipse compiler •  The Sun compiler is not aware of OSGi Import/Export •  The maven-eclipse-compiler plugin allows us to directly use the Eclipse compiler that have better support for OSGi bundles
  • 20. Maven eclipse compiler - Caveats •  We found various issues with the eclipse compiler plugin – Warnings would cause plugin to hang •  Current solution – Using a forked version of the maven- eclipse-compiler plugin – Bring-up plugin to working stage – Enhanced to enforce OSGi Import/ Export
  • 21. Applying OSGi to Tuscany
  • 22. One Big Bundle of Joy •  Recommended practice when moving to OSGi* – Create one big bundle containing application and dependent libraries – Get it working in OSGi – Gradually replace dependent libraries with Bundles – Keep it working! •  This is how we started... – 1 Bundle ~ 60MB made from 200+ jars *http://developers.sun.com/learning/javaoneonline/2008/pdf/TS-5122.pdf
  • 23. Decomposition First Attempt •  Identified five categories of jars and created corresponding Bundles –  org.apache.tuscany.sca.api.jar 18,701 –  org.apache.tuscany.spi.jar 430,563 –  org.apache.tuscany.runtime.jar 538,660 –  org.apache.tuscany.extensions.jar 1,374,045 –  org.apache.tuscany.depends.jar 57,872,558 •  Issues: –  Too coarse-grained to be of real value –  No opportunity for sub-setting –  Not modular
  • 24. Re-using Existing Decomposition •  Tuscany already decomposed into many Maven modules •  Benefits: –  Maven Bundle Plugin makes it easy to create Bundles –  Matches community's existing understanding –  Same bundles can be used outside OSGi –  Easily sub-set as Tuscany intended •  Issues: –  Lots of classloader issues •  Assumed single classloader –  Difficult to consume (200+ bundles)‫‏‬
  • 25. Granularity •  200+ bundles cumbersome •  Multiple bundles required to enable one capability •  Much debate about right level of granularity •  Conclusion – Fine-grained bundles suitable for developer view – Features used to aggregate bundles to provide a user view •  Inspired by Eclipse Features
  • 26. Third-party Libraries •  Many third-party libraries not enabled for OSGi •  Repositories are emerging –  OSGi Bundle Repository (OBR)‫‏‬ –  Apache Felix Commons –  Eclipse Orbit –  SpringSource Bundle Repository •  Tuscany has ~120 pre-requisite third-party libraries •  Version and footprint constraints influence choice of approach –  Project not comfortable to go with repository choice
  • 27. Third-party Library: wrap •  Wrap the Jar in a Bundle –  Bundle-Classpath: third-party.jar MANIFEST Bundle-Classpath: third-party.jar MANIFEST Import-Package: ... Bundle-Classpath: third-party.jar Import-Package: ... Export-Package: ... Export-Package: ... ... third-party.jar BND Install ... third-party.jar third-party.jar third-party-osgi.jar third-party-osgi.jar OSGi Framework •  Pros –  Works for signed Jars –  Can aggregate multiple Jars •  Cons –  Jar no longer works in non-OSGi environment (doubles the build footprint)‫‏‬
  • 28. Third-party Library: convert •  Convert the Jar to a Bundle MANIFEST MANIFEST Import-Package: ... Export-Package: ... Import-Package: ... ... third-party.jar BND Export-Package: ... ... Install third-party.jar third-party.jar OSGi Framework •  Pros –  Jar works in non-OSGi environment (no footprint issue)‫‏‬ •  Cons –  Doesn't work for signed Jars –  May affect library licensing –  Can't aggregate multiple Jars
  • 29. Third-party Library: virtual bundle •  Convert Jar to a Bundle at runtime –  Manifest pre-generated or created on-the-fly MANIFEST Import-Package: ... Export-Package: ... ... MANIFEST Import-Package: ... Export-Package: ... Installer Bundle Install ... BND Third-party Bundle third-party.jar OSGi Framework •  Pros –  Jars completely unchanged –  Works for signed Jars •  Cons –  No 'real' bundle to work with during development –  Messy – two artefacts to manage
  • 30. Third-party Library: Unpacked wrap •  Unpacked wrap style bundle –  Bundle-Classpath: third-party.jar MANIFEST Bundle-Classpath: third-party.jar MANIFEST Dynamic-Import-Package: * Bundle-Classpath: third-party.jar Import-Package: ... Export-Package: ... Export-Package: ... ... third-party.jar Install ... third-party.jar third-party.jar third-party-osgi.jar •  Pros OSGi Framework –  Works for signed Jars –  Can aggregate multiple Jars •  Cons –  Dynamic resolving might have performance implications •  Working on enhancing the tools to use BND logic to calculate import packages
  • 31. Third-Party Libraries Issues •  Libraries with Split Package –  Create a bundle with multiple jars •  (e.g. Google Data) •  Broken bundles –  Override existent MANIFEST.MF •  (e.g. Axis2, Woden, WS-Commons)
  • 32. OSGi Versioning •  Package exports can specify a version •  Package imports can specify a version range •  The OSGi resolver 'wires' imports to exports Bundle A Bundle Export-Package: B org.pkg.x;version=1.6.2 Import-Package: org.pkg.x;version=”[1.5.0, 2.0.0)” Bundle C Export-Package: org.pkg.x;version=2.0.0
  • 33. “Without the testing, Versioning “Apache Commons we can't be sure of has guidelines, we anything.” should trust them to do the right thing.” The Idealist The Realist (paranoid) •  Version range [1.5.0, 2.0.0)‫‏‬ •  Fixed version [1.5.0, 1.5.0] •  Flexible •  Inflexible •  Relies on others to do the •  Will get the version you right thing tested against •  Risky •  Safe •  Makes an untested support •  Inhibits bundle updates statement Tuscany community chose to start with fixed versions with a view to introducing ranges through experience
  • 34. Versioning Issues •  Be aware of version range stuff – Different containers can behave differently
  • 35. Extension Registry Pattern •  Module declares extension point •  Modules contribute extensions which implementation extension points •  Extension Registry manages extension point and extension matching •  Used extensively in Eclipse (not standard OSGi and not part of Felix)‫‏‬ Extension Extension Point Extension Extension Point managed by Extension Registry http://www.eclipsezone.com/articles/extensions-vs-services/
  • 36. Tuscany Extensibility •  OSGi optional so Tuscany needed its own thing –  inspired by Extension Registry •  Tuscany SPI defines extension points •  Extension Modules contribute –  Bindings (REST, json-rpc, SOAP, ...)‫‏‬ –  Implementation Types (POJO, BPEL, OSGi, ...)‫‏‬ –  Interface Types (Java, WSDL)‫‏‬
  • 37. Other caveats found during Tuscany OSGifying Quest •  Issues with system packages that are available in recent versions of the JDK –  This can cause conflicts and/or missing dependencies if they are not explicitly imported by the bundle •  Be aware of TCCL (ThreadContext Classloader) –  JDK and some 3rd party libraries uses service discover pattern relying on TCCL being able to load/see everything
  • 38. Runtime issues exposed during Tuscany OSGifying Quest •  Missing Extensibility –  Added extension points to various hard-coded extensions •  Broken Modularity –  Refactored some modules to allow better sharing of common code between bundles
  • 39. Maintaining a OSGi Runtime •  Ongoing development causes corrupts bundle –  Most likely caused by members of the community that has not fully embraced OSGi (e.g does not use Eclipse PDE) •  Community members usually just fix these issues •  New modules are often broken OSGi bundles –  Required steps to add new modules are still hard as there is a need to regenerate and reimport the PDE Target platform •  Every now and then we start a discussion about merging modules
  • 40. Tuscany & OSGi current status
  • 41. Tuscany runtime •  Tuscany OSGi Tools supporting full development lifecycle: – Build, IDE integration, Launchers, OSGi Console •  Tuscany 2.x SCA Runtime fully OSGi Enabled •  Support Felix and Equinox runtimes •  Expanded to support OSGi remote services
  • 42. OSGi Tools •  Maven-bundle-plugin –  Generates bundles for 3rd party jars –  Generates OSGi enabled PDE projects –  Version 1.0.4 released at 10/09/2009 •  Maven-eclipse-compiler –  Expose OSGi aware Eclipse JDT compiler –  Expose Eclipse OSGi bundle validation –  Version 1.0.1 released on 04/07/2009 •  Maven-osgi-junit-plugin –  JUnit tests in a OSGi enabled environment –  Version 1.0 released on 10/28/2009 http://svn.apache.org/repos/asf/tuscany/maven-plugins/trunk/
  • 44. OSGi & SCA •  Support OSGi as a packaging mechanism for SCA application artifacts (contributions)‫‏‬ – SCA specification already mentions OSGi as package skin – Leverage OSGi import/export to import java artifacts from different SCA application artifacts (contributions)‫‏‬ •  Support OSGi as an SCA Component Implementation Type – Use SCA to assemble OSGi Bundles with other implementation technologies
  • 45. OSGi Remote Services •  The OSGi core framework specifies a model where bundles can use distributed services. (R4.2) •  The basic model for OSGi remote services is that a bundle can: – register services that are exported to a communication endpoint – use services that are imported from a communication endpoint
  • 47. Summary •  It is indeed possible ! –  Necessary tooling for lifecycle development and a OSGi enable SCA runtime are ready •  Current Approach –  Tuscany Modules  OSGi Modules –  3rd Party Libraries  OSGi Modules •  Using Unpacked wrap style bundle –  Bundle Manifests available in source repository and tweaked for optional test dependencies –  Various OSGi tools released by Tuscany community
  • 49. Useful Links •  Apache Tuscany –  http://tuscany.apache.org •  Apache Felix –  http://felix.apache.org •  Eclipse Equinox –  http://www.eclipse.org/equinox/ •  OSGi Alliance –  http://www.osgi.org •  OSGi Best Practices –  http://developers.sun.com/learning/javaoneonline/2007/pdf/TS-1419.pdf •  Converting (Large) Applications to OSGi –  http://developers.sun.com/learning/javaoneonline/2008/pdf/TS-5122.pdf