Intro to OSGi and Eclipse Virgo
Upcoming SlideShare
Loading in...5
×
 

Intro to OSGi and Eclipse Virgo

on

  • 5,127 views

Presentation I gave on OSGi with Eclipse Virgo and OSGi Blueprint

Presentation I gave on OSGi with Eclipse Virgo and OSGi Blueprint

Statistics

Views

Total Views
5,127
Views on SlideShare
5,117
Embed Views
10

Actions

Likes
6
Downloads
85
Comments
0

5 Embeds 10

http://pmis.ideas.iii.org.tw 3
http://www.linkedin.com 2
https://twitter.com 2
http://54.250.169.77 2
https://www.linkedin.com 1

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment
  • Analagous (not completely) to web application containers in that there is a specification (OSGI R4) and various implementations of the specification. Sun is also trying to build it’s own Java Module system as JSR-277, and there is a draft circulating to provide OSGI Bundles within the Java Module System when it is deployed. See http://openjdk.java.net/projects/modules/osgi-support-draft.html for more details on this proposal, and http://jcp.org/en/jsr/detail?id=277 for details on JSR-277.
  • This was created for us by a maven plugin (we’ll see later in this chapter)… Bundle-ManifestVersion – Which OSGi container rules to follow. 2 = OSGi Specification release 4 1 = OSGi version 3 or earlierBundle-Name – Short, human readable nameBundle-SymbolicName – Unique, machine-usable name for the bundle used by other bundles and the container to refer to the bundleBundle-Version – The version of the bundle that is being deployedBundle-Activator – A listener class that may be bound to the lifecycle of the bundle (start, stop events)Bundle-Vendor – A human readable name for the vendor who created the bundleImport-Package – A set of packages that are required for dependency management
  • Services provide a way to register a Java POJO within the OSGi container. The services can be then referenced by name in the OSGi container by any other module that requests the package the service is exposed within.
  • The maven-bundle-plugin works to build standard MANIFEST.MF files. You can use the output of this plugin in Felix, Knopflerfish and Equinox.We’ll see in an upcoming chapter that Spring-DM gives us an even bigger advantage.sample Maven configuration for the plugin: … org.apache.felix maven-bundle-plugin true 1.4.3 com.gordondickens.services.interfaces, com.gordondickens.services, com.gordondickens.services.impl com.gordondickens.services.interfaces.SayHelloService;version="1.0" maven-osgi-demo-services com.gordondickens.services.ServiceActivator *
  • Undeploying also destroys application contexts. Undeploying the extender undeploys all application contexts.
  • This behavior can be overridden in the manifest.
  • Parameter descriptions:ref = the bean to lookup in the Spring Contextid= the OSGi service name to export (and that can be consumed by another Spring-DM bundle as a Spring Bean)interface = the service interface to advertise to the OSGi frameworkNote: If a bean implements multiple business interfaces, you can use an alternative form: com.gordondickens.bean.InterfaceA com.gordondickens.bean.interfaceB <s
  • Note: if you consume a OSGi Service that is not created by a Spring Dynamic Module, you will get the service based on the default OSGi service registry lookup rules (see the OSGi specification section 5 for details at www.osgi.org).
  • Note – the same multi-interface wiring applies here too: com.gordondickens.demo.bean.ExampleBean com.gordondickens.demo.bean.Example2Bean
  • The bean-name attribute on the osgi:reference tag allows you to refer to the bean not by an OSGi Service ID, but by the actual bean ID in the Spring context. If the Spring Bean exampleBean was exposed to OSGi as exampleBeanService, a consuming context could request it using a bean-name rather than an id, and therefore refer to Spring names, not OSGi names.Note that this mechanism matches on Services that expose the ExampleBean interface and that have a property named org.springframework.osgi.bean.nameset to exampleBean.
  • Note: the bundles in the repository must be standard OSGi header-based bundles, NOT ones with Import-Bundle: and Import-Library tags. This means that the Spring-DM server is holding onto pure OSGi bundles, and allowing you to deploy your applications based on Spring-DM headers in the deployment directory.You may then use Import-Bundle, which imports all packages from a Bundle, or Import-Library, which imports a series of bundles (example: Spring Framework library)
  • Sample Manifest:Manifest-Version: 1.0Bundle-Name: DemoSpringDMBundle BundleBundle-ManifestVersion: 2Bundle-SymbolicName: DemoSpringDMBundleBundle-Version: 1.0.0Import-Library: org.springframework.spring;version="[2.5.6.A,2.5.6.A]"Import-Bundle: org.eclipse.osgi.services;version="[3.1.200.v20071203,3.1.200.v20071203]"Import-Package: org.osgi.framework;version="[1.4.0,1.4.0]"Bundle-Activator: com.gordondickens.demo.BeanRunner
  • For information on the Spring-DM Server, visit www.springsource.com

Intro to OSGi and Eclipse Virgo Intro to OSGi and Eclipse Virgo Presentation Transcript

  • Introduction to OSGi & Eclipse VirgoGordon Dickens@gdickenslinkedin.com/in/gordondickensBlog: technophile.gordondickens.comGitHub: github.com/gordonad 1
  • >OSGi Terminology OSGI container Bundle Service Spring Dynamic Modules Spring dm Server 2
  • OSGI Container A low-footprint engine that manages OSGi components Can be embedded into applications to provide modular components Three major OSGi Containers: ◦ Equinox  The reference implementation for the framework. The container built into Eclipse.  Used by default with Spring dm Server  Spring dm Server moving to Eclipse Virgo project ◦ Knoplerfish ◦ Apache Felix 3
  • The OSGi Bundle JAR with extra Config Info ◦ Classes and resources that deliver functions to consumers ◦ Can “export” services & packages ◦ Can “import” services & packages 4
  • More on Bundles (bundles for dummies?) Bundle is a JAR Requires a Manifest that describes the bundle ◦ META-INF/MANIFEST.MF You configure the Manifest with ◦ A machine-readable ID ◦ Packages required ◦ Which packages are exportable/private ◦ Services interfaces to expose ◦ Requirements - such as the minimum JDK 5
  • Sample META- INF/MANIFEST.MFManifest-Version: 1.0Export-Package: com.gordondickens.utils,org.osgi.framework”Bundle-Name: Maven OSGi Demo – ServicesBuild-Jdk: 1.6.0Bundle-Version: 1.0.0Bundle-ManifestVersion: 2Bundle-Activator: com.gordondickens.services.ServiceActivatorBundle-SymbolicName: maven-osgi-demo-servicesImport-Package: org.osgi.framework;version="1.3" 6
  • MANIFEST.MF Keywords Bundle-ManifestVersion ◦ Which OSGi container rules to follow.  2 = OSGi Specification release 4  1 = OSGi version 3 or earlier Bundle-Name ◦ Short, human readable name Bundle-SymbolicName ◦ Unique, machine-usable name ◦ Used by other bundles & container to refer to the bundle Bundle-Version ◦ Version of the bundle Bundle-Activator ◦ Listener class ◦ May be bound to bundle lifecycle (start, stop events) Bundle-Vendor ◦ Human readable name for the vendor who created the bundle Import-Package ◦ Set of packages required for dependency management 7
  • Dependencies Bundles are versioned using the header Bundle-Version ◦ Matches Maven version numbers (underscores converted to periods) Bundles can require other Bundles to function ◦ This is configured with the Import- Package header ◦ Required versions can be specified using the version= keyword Versions can be a specific version or range 8
  • Bundle Lifecycle 9
  • What can you do with a bundle? Bundles just expose packages or services Service to be used Service ◦ Does not automatically hide impl classes Service ◦ Package exporting should only be for utility packages (plumbing). Bundle◦ You only want to expose “services” 10
  • Services Register POJOs to container as a service ◦ Source bundle registers the service interface ◦ Target bundle asks the container registry for a reference to the service Services are managed by Virgo ◦ Services are “published” to the container registry ◦ Clients lookup and consume the services 11
  • Preparing the Manifest You could do that by hand, but… ◦ Format the MANIFEST.MF file EXACTLY per spec (ending each line on 72 characters, etc) Instead,Virgo provides the Bundlor build tool 12
  • Bundlor Input: • Generates: ◦ jar – manifest.mf ◦ template.mf  Import-Template jar The BUNDLOR manifest.mftemplate.mf 13
  • What is Blueprint? A framework that ◦ Exposes & consumes services from Beans ◦ Dynamically publishes App Contexts & beans ◦ Handles dependencies ◦ Can pause bundles while locating dependencies (during updates, etc) ◦ Simplifies defining OSGi bundles ◦ The basis for the Eclipse Virgo, a fully OSGi-compliant platform based on Equinox ◦ Originally from Spring Dynamic Modules 14
  • The Blueprint Extender Extender start up ◦ Looks for Blueprint enabled Bundles ◦ Loads their application contexts automatically ◦ Publishes application contexts ◦ Exports beans as Services ◦ Injects any consumed services from other Bundles automatically When a bundle comes online ◦ Detects & publishes the Application Context ◦ Inject beans from other required app contexts Replaces Bundle Activator 15
  • Template.mfThe Bundlor uses the template.mfto generate the OSGi required manifest.mffileWhich header(s) to use for dependency resolution: Import-Package - Core OSGi ◦ Used for every external package that the bundle depends on Require-Bundle - Core OSGi ◦ Bundle must be found to start this bundle ◦ Used specifying the bundle and bundles version ◦ Brittle, only searched if not found in Import-Package Import-Bundle - Virgo ◦ Like Import-Package but all packages within an entire bundle ◦ Used specifying the bundle and bundles version. Not always a best practice, too broad brush. Import-Library - Virgo ◦ Imports all packages of a specific package, from a library in the Virgo repository. ◦ Packages can be resolved across multiple bundles ◦ Preferred approach for expressing dependency on the Spring Framework. Import-Template - Bundlor ◦ Used to import packages by version range. ◦ Used when a transitive dependencies not found "your.package (0.0.0)" or "Import of package xyz doesnt specify a version”. ◦ Can use wildcards and setup custom patterns for matching. In Summary, you need to Import Packages! Bundlor assists with directives to save you time instead of listing out all your packages in the standard OSGi Import-Package header. 16
  • Dependency Management If a Bundle requires another bundle ◦ Load the other bundle ◦ Damping - Suspends any threads attempting to access the imported packages ◦ Once loaded, threads are resumed 17
  • Using Blueprint Configuring your context The blueprint: namespace Exporting beans as OSGi Services into Registry Importing beans from OSGi Registry 18
  • Configuring your Context Good practice: ◦ Separate Spring configuration from Blueprint imports/exports  bundle-context.xml  bundle-context-osgi.xml Create2 context files in META- INF/spring ◦ All *.xml files in this dir are processed 19
  • Blueprint Services Blueprint enables services to be published and consumed using descriptions written in XML Eclipse Virgo supports Blueprint The XML descriptions reside in files with extension .xml in the bundle’s META-INF/spring sub-directory. 20
  • Spring DM Services To publish a service <blueprint:service> and specify ◦ implementation class ◦ interface class(es) ◦ at bundle start, an instance is published to the OSGi service registry under the interface ◦ impl class constructed like any other bean To consume a service <blueprint:reference> ◦ service may be passed into other beans using DI 21
  • Expose the Spring Bean as an OSGi Service  Use the osgi: namespace<?xml version="1.0" encoding="UTF-8"?><blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0" xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance xsi:schemaLocation="http://www.osgi.org/xmlns/blueprint/v1.0.0http://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd” default-activation="eager"><serviceref="exampleBean" interface="com.gordondickens.demo.bean.ExampleBean"/></blueprint> 22
  • Consuming the Service Use the blueprint: namespace: ◦ Service Beans ◦ Valid OSGi Service beans Can be injected into other Beans using ◦ XML injection ◦ annotation-driven injection 23
  • Example: Consuming an OSGi Service  Use the <reference>tag in the blueprint: namespace.<?xml version="1.0" encoding="UTF-8"?><blueprint xmlns=http://www.osgi.org/xmlns/blueprint/v1.0.0 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.osgi.org/xmlns/blueprint/v1.0.0 http://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd" default-activation="eager"><reference id="exampleBeanService”/></blueprint> 24
  • Alternative: use bean-name Exposing<bean id="exampleBean” class="com.gordondickens.demo.bean.internal.ExampleBeanImpl" /><service id="exampleBeanService” ref="exampleBean" interface="com.gordondickens.demo.bean.ExampleBean"/> Consuming <reference id="exampleBean” interface="com.gordondickens.demo.bean.ExampleBean" /> 25
  • Service Damping Proxies automatically created services ◦ the actual service object may come and go at runtime If service disappears, any proxies will wait for the service to re-appear. This effect is known as damping. 26
  • Blueprint Bundle Life When a bundle is started: ◦ builds application contexts as per the XML ◦ creates proxies for specified services ◦ publishes specified services to the registry When a bundle is stopped: ◦ retracts any services ◦ closes bundle application context ◦ turns off damping of a service proxy ◦ proxy’s app context is being closed 27
  • Eclipse Virgo OSGi Server based on Equinox Provides a PAR file archive Provides PLAN file for grouped or scoped bundles Provides Import-Bundle: tag to import all packages of a given Bundle Bundle Repository used to manage artifacts required by other projects Can be configured to automatically download required bundles from a Maven repository 28
  • Virgo Dependency Mgmt Import-Bundle: ◦ Import-Package is fine grained ◦ Import-Bundle imports all Packages from a Bundle Import-Library: ◦ Imports a Blueprint configured Library ◦ A package of Bundles ◦ Example: the Spring 3.x Framework ◦ Can use wildcards 29
  • Virgo Fragments A bundle attached to a host bundle Treated as part of the host Can only add to the host ◦ Configuration ◦ Classes ◦ Resources Can not have ◦ activator ◦ its own class loader Designated in manifest.mf with Fragment-Host ◦ Fragment-Host points to symbolic name of host 30
  • Virgo Feature - Slices  Fragments for web apps  Uses manifest values  In myapp/web/template.mf ◦ Slice-Host ◦ Slice-ContextPathSlice-Host:com.gordondickenssolutions.runtime.webapp;version="[1.1.0,1.1.0]"Slice-ContextPath: /myapp 31
  • Virgo Feature - PAR Files Platform Archive – like a jar/ear/war Multiple bundles packaged together Contains ◦ application name ◦ version ◦ symbolic name ◦ description The modules within are scoped together Cannot be shared accidentally by other apps The scope forms a boundary for automatic propagation of load time weaving and bundle refresh The modules of a PAR have their exported packages imported by the synthetic context bundle, used for thread context class loading The PAR file is visible to management interfaces The PAR file can be undeployed and redeployed as a unit PARs physically contain the included artifacts 32
  • Virgo Feature -Plan Files Recommended over PARs Deployment strategy for a Virgo applications Similar to PARs describing a collection of bundles to load together as an application Simple XML file ◦ defines a collection of artifacts The syntax of a plan file ◦ outer <plan/> tag defines a name and version, as well as scoping and atomicity requirements ◦ Inside the tag is at least one artifact tag with  type  name  version 33
  • Virgo Plan Files Deploys the artifacts in the order listed Can contain other plans (nesting) Easily share content between plans Update individual parts of a plan without repackaging (re-JAR) Copy the bundles to the repository the $DMS_HOME/repository/usr directory 34
  • Virgo Plan File Example<?xml version="1.0" encoding="UTF-8"?><plan name="greenpages.db.plan" version="2.4.3.RELEASE” scoped="false" atomic="true” xmlns=http://www.eclipse.org/virgo/schema/plan xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance xsi:schemaLocation="http://www.eclipse.org/virgo/schema/planhttp://www.eclipse.org/virgo/schema/plan/eclipse-virgo-plan.xsd"><attributes><attribute name="web.context.path" value="greenpages"/></attributes><!-- Database properties file (minus file extension) to be deployed --><artifact type="configuration" name="greenpages.db.config"/><artifact type="bundle" name="greenpages" version="[2.4, 2.5)"/><artifact type="bundle" name="greenpages.db" version="[2.4, 2.5)"/><artifact type="bundle" name="greenpages.jpa" version="[2.4, 2.5)"/><artifact type="bundle" name="greenpages.web" version="[2.4, 2.5)"><property name="header:Web-ContextPath" value="${web.context.path}"/></artifact></plan> 35
  • Connecting to OSGi Platform bin/startup.sh –shell [or] ssh -p 2402 admin@localhost 36
  • Admin Console http://localhost:8080/admin 37
  • Terminology Review Bundle Service Extender Fragment Damping Slices 38
  • Summary Virgo makes OSGi easier ◦ Registers with the OSGi container ◦ Exposes Beans as Services ◦ Consumes Services as Beans ◦ Simplfies MANIFEST.MF creation 39