osgi users' forum uk - osgi release 4 v4.2 spec overview - peter kriens
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.TRANSCRIPT
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