OSGi Users' Forum UK - OSGi Release 4 v4.2 Spec Overview - Peter Kriens

Preview:

DESCRIPTION

Presentation by Peter Kriens to OSGi Users' Forum UK on 14th July 2009 providing an overview of key elements of the next release of the OSGi specification Release 4 v4.2.

Citation preview

OSGi Next

Peter KriensOSGi Evangelist

dinsdag 14 juli 2009

OSGi Service PlatformCore Specification

dinsdag 14 juli 2009

Planning 4.2

• Core released for approval June 10

• Working on the final draft for Compendium as we speak

• Compendium : July 10

• Enterprise Release Autumn

• Residential Release Spring 2010

dinsdag 14 juli 2009

Legend

dinsdag 14 juli 2009

Legend

BundleA

BundleB

dinsdag 14 juli 2009

Legend

BundleA

BundleB

Service

dinsdag 14 juli 2009

Legend

BundleA

BundleB

Service

getService

registerService

dinsdag 14 juli 2009

Legend

BundleA

BundleB

Service

getService

BundleC

registerService

dinsdag 14 juli 2009

Legend

BundleA

BundleB

Service

getService

BundleC

registerService

addServiceListener

dinsdag 14 juli 2009

Legend

BundleA

BundleB

Service

getService

BundleC

registerService

Call/DependencyDirection addServiceListener

dinsdag 14 juli 2009

Core

• Launching

• Bundle Tracker

• Bundle-License Header

• Service Hooks

• Negative Permissions

dinsdag 14 juli 2009

Launching

• To be inside a framework …

• Or outside a framework ...

• That’s the question!

dinsdag 14 juli 2009

Launching

• Standardizes launching different frameworks

• Will enable generic launchers

• Allows you to embed a framework in your application!

dinsdag 14 juli 2009

LaunchingMap<String,String> p = new HashMap<String,String>();

List<String> impls = getMetaInfServices(

loader, FrameworkFactory.class.getName());

if (impls.size() != 1) throw new RuntimeException( "Too many frameworks: "+ impls);

Class<?> clazz = loader.loadClass(impls.get(0)); FrameworkFactory factory = (FrameworkFactory) clazz .newInstance(); Framework fw = factory.newFramework(p); Bundle b = fw.installBundle( “http://.../load/…”); b.start();

dinsdag 14 juli 2009

Bundle Tracker

• Simple tool a la Service Tracker to track bundles

• Very useful for extenders

• Bundles that provide additional functionality based on data in a bundle

• Tracks a set of states

• Handles all concurrency issues

dinsdag 14 juli 2009

Service Hooks

• FindHook

• Intercept getServiceReference(s)

• EventHook

• Intercept Service Event delivery

• ListenerHook

• Find out who is listening to what

dinsdag 14 juli 2009

Service HooksBundle

A

BundleB

dinsdag 14 juli 2009

Service HooksBundle

A

BundleB

ProxyBundle

dinsdag 14 juli 2009

Service HooksBundle

A

BundleB

FindHookEventHook

ProxyBundle

dinsdag 14 juli 2009

Service HooksBundle

A

BundleB

FindHookEventHook

ProxyBundle

dinsdag 14 juli 2009

Service HooksBundle

A

BundleB

FindHookEventHook

ProxyBundle

ListenerHook

dinsdag 14 juli 2009

Service HooksBundle

A

BundleB

FindHookEventHook

ProxyBundle

ListenerHook

dinsdag 14 juli 2009

Negative Permissions

• Java 2 Permissions are only positive

• That is, you grant a permission P

• PackagePermission(com.acme,IMPORT)

• Very hard to say, all permissions except P

• Lack of deny permissions

dinsdag 14 juli 2009

Negative Permissions

DENY { [...BundleSignerCondition "cn=*, o=ACME" "!" ] (...PackagePermission "com.acme.secret.*" "import,exportonly" ) } ALLOW { (...PackagePermission "*" "*" ) }

dinsdag 14 juli 2009

Compendium

• Initial Provisioning

• Bundle Tracker

• Declarative Services

• Remote Services

• Blueprint Extender

dinsdag 14 juli 2009

Remote Services

• RFC 119

• Formerly Distributed OSGi

• Distribution Software uses services to:

• Maps a service to/from a remote system

• Uses a service to abstract a communication endpoint

dinsdag 14 juli 2009

Remote Services

DistributionProvider

DistributionProvider

X’

BundleB

dinsdag 14 juli 2009

Remote Services

XDistribution

ProviderDistribution

Provider

X’

BundleB

dinsdag 14 juli 2009

Remote ServicesBundle

A

XDistribution

ProviderDistribution

Provider

X’

BundleB

dinsdag 14 juli 2009

Remote ServicesBundle

A

XDistribution

ProviderDistribution

Provider

X’

BundleB

dinsdag 14 juli 2009

Remote ServicesBundle

A

XDistribution

ProviderDistribution

Provider

X’

BundleB

dinsdag 14 juli 2009

Remote ServicesBundle

A

XDistribution

ProviderDistribution

Provider

X’

BundleB

exports

dinsdag 14 juli 2009

Remote ServicesBundle

A

XDistribution

ProviderDistribution

Provider

X’

BundleB

exports

dinsdag 14 juli 2009

Remote ServicesBundle

A

XDistribution

ProviderDistribution

Provider

X’

BundleB

exports

dinsdag 14 juli 2009

Remote ServicesBundle

A

XDistribution

ProviderDistribution

Provider

X’

BundleB

exports

dinsdag 14 juli 2009

Remote ServicesBundle

A

XDistribution

ProviderDistribution

Provider

X’

BundleB

exports imports

dinsdag 14 juli 2009

Remote ServicesBundle

A

XDistribution

ProviderDistribution

Provider

X’

BundleB

exports imports

dinsdag 14 juli 2009

Remote ServicesBundle

A

XDistribution

ProviderDistribution

Provider

X’

BundleB

exports imports

dinsdag 14 juli 2009

Remote ServicesBundle

A

XDistribution

ProviderDistribution

Provider

X’

BundleB

exports imports

dinsdag 14 juli 2009

Remote ServicesBundle

A

XDistribution

ProviderDistribution

Provider

X’

BundleB

exports imports

Framework 1 Framework 2

dinsdag 14 juli 2009

Remote Services

• Service Properties define the interaction

• Intents specify the required/provided capabilities

• Filters used to match

• Service Component Architecture (SCA)

• Interaction specified, not mandated

• Flexible configuration options

dinsdag 14 juli 2009

Service Properties<other properties>

service.exported.intents

service.intents

service.exported.intents.extra

service.exported.interfaces

service.exported.configs

<other properties>

service.exported.intents

objectClass

service.imported.configs

service.imported

remote.intents.supported

remote.configs.supported

Distribution Provider

Framework 1 Framework 2

dinsdag 14 juli 2009

Service Properties<other properties>

service.exported.intents

service.intents

service.exported.intents.extra

service.exported.interfaces

service.exported.configs

<other properties>

service.exported.intents

objectClass

service.imported.configs

service.imported

remote.intents.supported

remote.configs.supported

Distribution Provider

Framework 1 Framework 2

dinsdag 14 juli 2009

Service Properties<other properties>

service.exported.intents

service.intents

service.exported.intents.extra

service.exported.interfaces

service.exported.configs

<other properties>

service.exported.intents

objectClass

service.imported.configs

service.imported

remote.intents.supported

remote.configs.supported

Distribution Provider

Framework 1 Framework 2

endpoint

dinsdag 14 juli 2009

Service Properties<other properties>

service.exported.intents

service.intents

service.exported.intents.extra

service.exported.interfaces

service.exported.configs

<other properties>

service.exported.intents

objectClass

service.imported.configs

service.imported

remote.intents.supported

remote.configs.supported

Distribution Provider

Framework 1 Framework 2

endpoint

dinsdag 14 juli 2009

Blueprint Extender

• RFC 124

• Provides Spring DM Functionality

• Blueprint Extender uses XML definitions in bundle to create & wire application objects

• Namespace Handler services, not yet :-(

• Provides damping

• Proxies services

dinsdag 14 juli 2009

Blueprint Extender

XML

dinsdag 14 juli 2009

Blueprint Extender

XMLBlueprintContainer

dinsdag 14 juli 2009

Blueprint Extender

XMLBlueprintContainer

dinsdag 14 juli 2009

BeanMetadata

ServiceMetadata

ReferenceMetadata

Blueprint Extender

XMLBlueprintContainer

dinsdag 14 juli 2009

BeanBeanMetadata

ServiceMetadata

ReferenceMetadata

Blueprint Extender

XMLBlueprintContainer

dinsdag 14 juli 2009

Bean

Service

BeanMetadata

ServiceMetadata

ReferenceMetadata

Blueprint Extender

XMLBlueprintContainer

dinsdag 14 juli 2009

Bean

Service

BeanMetadata

ServiceMetadata

ReferenceMetadata

Blueprint Extender

XMLBlueprintContainer

Reference

dinsdag 14 juli 2009

Bean

Service

BeanMetadata

ServiceMetadata

ReferenceMetadata

Blueprint Extender

XMLBlueprintContainer

Reference

dinsdag 14 juli 2009

Bean

Service

BeanMetadata

ServiceMetadata

ReferenceMetadata

Blueprint Extender

XMLBlueprintContainer

Reference

dinsdag 14 juli 2009

Bean

Service

BeanMetadata

ServiceMetadata

ReferenceMetadata

Blueprint Extender

XMLBlueprintContainer

Reference

dinsdag 14 juli 2009

Bean

Service

BeanMetadata

ServiceMetadata

ReferenceMetadata

Blueprint Extender

XMLBlueprintContainer

ApplicationObjects

Reference

dinsdag 14 juli 2009

Metadata

NonNull

Metadata

Null

Metadata

Component

Metadata

Service

Metadata

Service

Reference

Metadata

Bean

Metadata

Value

Metadata

Collection

Metadata

Map

Metadata

Bean

Argument

Bean

Property

ListenerRegistration

Listener

IdRef

Metadata

Ref

Metadata

Target

Props

Metadata

Reference

Metadata

Ref

Collection

Metadata

Map

Entry

dinsdag 14 juli 2009

Damping Reference

serviceobjectApp proxy

serviceobject

serviceobject

dinsdag 14 juli 2009

Damping Reference

serviceobjectApp proxy

serviceobject

serviceobject

dinsdag 14 juli 2009

Damping Reference

serviceobjectApp proxy

serviceobject

serviceobject

dinsdag 14 juli 2009

Damping Reference

serviceobjectApp proxy

serviceobject

serviceobject

dinsdag 14 juli 2009

Damping Reference

serviceobjectApp proxy

serviceobject

serviceobject

dinsdag 14 juli 2009

Damping Reference

serviceobjectApp proxy

serviceobject

serviceobject

dinsdag 14 juli 2009

Damping Reference

App proxy

serviceobject

serviceobject

dinsdag 14 juli 2009

Damping Reference

App proxy

serviceobject

serviceobject

dinsdag 14 juli 2009

Damping Reference

App proxy

serviceobject

serviceobject

dinsdag 14 juli 2009

Damping Reference

App proxy

serviceobject

serviceobject

dinsdag 14 juli 2009

Damping Ref-list

serviceobjectApp proxy

serviceobject

serviceobject

List

proxy

proxy

dinsdag 14 juli 2009

Enterprise

• Transactions

• JDBC Database Access

• JMX

• JNDI

• JPA

• Connectors

dinsdag 14 juli 2009

Experimental

• TSL

• Nested Frameworks

• OBR

dinsdag 14 juli 2009

TSL

• A Tiny Script Language

• Feels like a shell

• Acts like a script language

• Uses reflection, but simplifies syntax

• No new commands

• Will become Felix project

dinsdag 14 juli 2009

TSLTelnetShell

ConsoleShell

...Shell

OSGiConvert.

EclipseConvert.

FelixConvert.

BasicCmnds

FrameWorkCmnds

ThreadIO

ThreadIO

CommandShell

Converter

* osgi.command.name=xxx osgi.command.function=yyy

...Cmnds

TSLImpl

dinsdag 14 juli 2009

TSL $ echo Hello World Hello World $ echo <bundle 1> initial@reference:file:org.eclipse.osgi.util_3.1.200.v20070605.jar/ [1]

$ ls eclipse eclipse.ini load runner

$ ls /Ws aQute felix-trunk osgi osgi-books

dinsdag 14 juli 2009

TSL

$ <bundle 6> headers Tool Bnd-0.0.169 Bundle-Activator aQute.fileinstall.FileInstall Export-Package aQute.fileinstall ... Created-By 1.6.0_01 (Sun Microsystems Inc.) Bnd-LastModified 1184160147361 Bundle-Version 1.3 Bundle-ManifestVersion2 Manifest-Version 1.0 Import-Package aQute.fileinstall, ... Bundle-Name biz.aQute.fileinstall Bundle-Description This bundle watches a .... Bundle-SymbolicName biz.aQute.fileinstall

dinsdag 14 juli 2009

TSL $ help={each <<$it class> declaredmethods> {$it name }} aQute.shell.runtime.Closure@90a284 $ help <bundle 6> loadClass getResource ... checkLoader closeBundleLoader getLoaderProxy

$ echo $exception E: java.lang.NullPointerException $ echo $exception java.lang.NullPointerException $ $exception printstacktrace $ // the output is temporarily on reall stderr ...

dinsdag 14 juli 2009

Nested Frameworks

• Application Server Vendors want scoping of applications …

• Basic Idea OSGi is:

• The Application == the set of installed bundles

• Compromise:

• All Frameworks to be nested

dinsdag 14 juli 2009

Framework P

Nested Frameworks

SystemBundle

dinsdag 14 juli 2009

Framework P

Nested Frameworks

SystemBundle

CompositeBundle

dinsdag 14 juli 2009

Framework P

Nested Frameworks

Framework CSystemBundle

CompositeBundle

dinsdag 14 juli 2009

Framework P

Nested Frameworks

Framework CSystemBundle System

Bundle

CompositeBundle

dinsdag 14 juli 2009

Framework P

Nested Frameworks

Framework CSystemBundle System

Bundle

SurrogateBundle

CompositeBundle

dinsdag 14 juli 2009

Framework P

Nested Frameworks

Framework CSystemBundle System

Bundle

SurrogateBundle

CompositeBundle

dinsdag 14 juli 2009

Framework P

Nested Frameworks

Framework CSystemBundle System

Bundle

SurrogateBundle

CompositeBundle

AppBundle

A

dinsdag 14 juli 2009

Framework P

Nested Frameworks

Framework CSystemBundle System

Bundle

SurrogateBundle

CompositeBundle

AppBundle

A

dinsdag 14 juli 2009

Framework P

Nested Frameworks

Framework CSystemBundle System

Bundle

SurrogateBundle

CompositeBundle

AppBundle

A

dinsdag 14 juli 2009

Framework P

Nested Frameworks

Framework CSystemBundle System

Bundle

SurrogateBundle

CompositeBundle

AppBundle

A

AppBundle

B

dinsdag 14 juli 2009

Framework P

Nested Frameworks

Framework CSystemBundle System

Bundle

SurrogateBundle

CompositeBundle

AppBundle

A

AppBundle

B

dinsdag 14 juli 2009

Framework P

Nested Frameworks

Framework CSystemBundle System

Bundle

SurrogateBundle

CompositeBundle

AppBundle

A

AppBundle

B

dinsdag 14 juli 2009

Framework P

Nested Frameworks

Framework CSystemBundle System

Bundle

SurrogateBundle

CompositeBundle

AppBundle

A

AppBundle

B

dinsdag 14 juli 2009

Java Modularity

dinsdag 14 juli 2009

Java Modularity

294dinsdag 14 juli 2009

Java Modularity

2947

dinsdag 14 juli 2009

Java Modularity

42dinsdag 14 juli 2009

Java Modularity

dinsdag 14 juli 2009

Java Modularity

dinsdag 14 juli 2009

Java Modularity

dinsdag 14 juli 2009

Java Modularity

dinsdag 14 juli 2009

Java Modularity

dinsdag 14 juli 2009

Java Modularity

module

dinsdag 14 juli 2009

Java Modularity

module class Foo {}

public class Bar { module int foo() {}}

module interface Baz {}

dinsdag 14 juli 2009

Java Modularity

Visibilityvs

Accessibility

dinsdag 14 juli 2009

Visibility

ClassS

ClassT

ClassT

dinsdag 14 juli 2009

Visibility

ClassS

ClassT

ClassT

dinsdag 14 juli 2009

Visibility

ClassS

ClassT

dinsdag 14 juli 2009

Visibility

ClassS

ClassT

dinsdag 14 juli 2009

Visibility

ClassS

ClassT

dinsdag 14 juli 2009

Visibility

ClassS

ClassT

ModuleSystem

dinsdag 14 juli 2009

Accessibility

public

package

module

private

dinsdag 14 juli 2009

Accessibility

ClassS

dinsdag 14 juli 2009

class

Accessibility

ClassS

ClassT

dinsdag 14 juli 2009

package

class

Accessibility

ClassS

ClassT

Class U

dinsdag 14 juli 2009

module

package

class

Accessibility

ClassS

ClassT

Class U

ClassV

dinsdag 14 juli 2009

module

package

class

Accessibility

ClassS

ClassT

Class U

ClassV

dinsdag 14 juli 2009

module

package

class

Accessibility

ClassS

ClassT

ClassW

Class U

ClassV

dinsdag 14 juli 2009

Is JSR 294 aMeta Module System? (Implemented by OSGi™, Jigsaw, Guice, …)

dinsdag 14 juli 2009

Is JSR 294 aMeta Module System? (Implemented by OSGi™, Jigsaw, Guice, …)

No Java™ Standard for

Modules!dinsdag 14 juli 2009

Bundle

OSGi Modules: Bundle = Module

module

dinsdag 14 juli 2009

Bundle

OSGi Modules: Bundle = Multiple Modules

module A

module B

dinsdag 14 juli 2009

Bundle BBundle A

module

OSGi Modules: Modules Cross Bundles

dinsdag 14 juli 2009

Bundle

OSGi Modules: Nested?

module A

module B

dinsdag 14 juli 2009

Module Dependencies

Bundle A

module A

Bundle B

module B

dinsdag 14 juli 2009

Module Dependencies

Bundle A

module A

Bundle B

module B

requires

provides

permits

dinsdag 14 juli 2009

Module Dependencies

Bundle A

module A

Bundle B

module B

requires

provides

permits?dinsdag 14 juli 2009

dinsdag 14 juli 2009

Containers?

π 3.14

dinsdag 14 juli 2009

Containers?

π 3.14JLS

dinsdag 14 juli 2009

Containers?

π 3.14JLS JVM

dinsdag 14 juli 2009

Containers?

dinsdag 14 juli 2009

container com.acme

Containers?

dinsdag 14 juli 2009

container com.acme

Containers?

module com.acme.foo;

dinsdag 14 juli 2009

container com.acme

Containers?

module com.acme.foo;

module com.acme.foo;module bar;

dinsdag 14 juli 2009

container com.acme

Containers?

module com.acme.foo;

module com.acme.foo;module bar;

module com.acme.foo;module bar;private package one;

module com.acme.foo;module fiz;public package one;

dinsdag 14 juli 2009

container com.acme

Containers?

module com.acme.foo;

module com.acme.foo;module bar;

module com.acme.foo;module bar;private package one;

module com.acme.foo;module fiz;public package one;

module com.acme.foo;module bar;package one;import module fiz;module class A {}

module com.acme.foo;module fiz;package two;

class B {}

dinsdag 14 juli 2009

Q&A

dinsdag 14 juli 2009

Recommended