ITS TIME FOR THE RESOLUTION TIM VERBELEN Senior Researcher imec - - PowerPoint PPT Presentation

it s time for the resolution
SMART_READER_LITE
LIVE PREVIEW

ITS TIME FOR THE RESOLUTION TIM VERBELEN Senior Researcher imec - - PowerPoint PPT Presentation

ITS TIME FOR THE RESOLUTION TIM VERBELEN Senior Researcher imec Ghent University 1 PUBLIC ! could not resolve the bundles: [ that.awesome.library.i.found -1.0.0 org.osgi.framework.BundleException: Unable to resolve


slide-1
SLIDE 1

PUBLIC

IT’S TIME FOR THE RESOLUTION

1

TIM VERBELEN

Senior Researcher imec – Ghent University

slide-2
SLIDE 2

PUBLIC

2

! could not resolve the bundles: [that.awesome.library.i.found-1.0.0

  • rg.osgi.framework.BundleException: Unable to resolve

that.awesome.library.i.found [1](R 1.0): missing requirement [that.awesome.library.i.found [1](R 1.0)]

  • sgi.wiring.package;

(&(osgi.wiring.package=some.exotic.package)(version>=1.0.0) (!(version>=2.0.0))) Unresolved requirements: [[that.awesome.library.i.found [1](R 1.0)] osgi.wiring.package; (&(osgi.wiring.package=some.exotic.package)(version>=1.0.0) (!(version>=2.0.0)))]]

slide-3
SLIDE 3

PUBLIC

WHEN DO YOU RESOLVE?

slide-4
SLIDE 4

PUBLIC

WHEN DO YOU RESOLVE?

AT RUNTIME?

slide-5
SLIDE 5

PUBLIC

WHEN DO YOU RESOLVE?

AT RUNTIME? AT LAUNCH TIME?

slide-6
SLIDE 6

PUBLIC

WHEN DO YOU RESOLVE?

AT RUNTIME? AT LAUNCH TIME? AT DEVELOPMENT TIME?

slide-7
SLIDE 7

PUBLIC

OSGI BUNDLES AND PACKAGES

7

RESOLVING IMPORT

  • PACKAGES

foo.bar v1.0.0

foo.bar.api; version=1.0.0 foo.bar.impl Export-Package Private-Package Import-Package foo.bar.util; version=[1.0.0, 1.1.0)

slide-8
SLIDE 8

PUBLIC

OSGI BUNDLES AND PACKAGES

8

RESOLVING IMPORT

  • PACKAGES

foo.bar v1.0.0

foo.bar.api; version=1.0.0 foo.bar.impl Export-Package Private-Package Import-Package foo.bar.util; version=[1.0.0, 1.1.0)

OSGi framework

install

Resolver

slide-9
SLIDE 9

PUBLIC

OSGI BUNDLES AND PACKAGES

9

RESOLVING IMPORT

  • PACKAGES

foo.bar v1.0.0

foo.bar.api; version=1.0.0 foo.bar.impl Export-Package Private-Package Import-Package foo.bar.util; version=[1.0.0, 1.1.0) install

foo.bar.util v1.0.0

foo.bar.util; version=1.0.0 Export-Package

OSGi framework Resolver

slide-10
SLIDE 10

PUBLIC

RESOLVING AGAINST A REPOSITORY

10

foo.bar v1.0.0

foo.bar.api; version=1.0.0 foo.bar.util; version=[1.0.0, 1.1.0)

foo.bar.util v2.0.0

foo.bar.util; version=2.0.0

com.car v1.0.0

com.car.api; version=1.0.0

Repository …

Resolver resolve foo.bar v1.0.0 foo.bar.util v1.0.0

foo.bar.util; version=1.0.0

slide-11
SLIDE 11

PUBLIC

RESOLVING AGAINST A REPOSITORY

11

foo.bar v1.0.0

foo.bar.api; version=1.0.0 foo.bar.util; version=[1.0.0, 1.1.0)

foo.bar.util v2.0.0

foo.bar.util; version=2.0.0

com.car v1.0.0

com.car.api; version=1.0.0

Repository …

Resolver resolve foo.bar v1.0.0 foo.bar.util v1.0.0

foo.bar.util; version=1.0.0

slide-12
SLIDE 12

PUBLIC

RESOLVING PACKAGES

slide-13
SLIDE 13

PUBLIC

OSGI EXTENDERS

13

DO STUFF ON BEHALF OF ANOTHER BUNDLE

foo.bar v1.0.0 OSGi framework

install

Resolver felix.scr

Service-Component: OSGI-INF/foo.bar.BarImpl.xml

slide-14
SLIDE 14

PUBLIC

OSGI EXTENDERS

14

DO STUFF ON BEHALF OF ANOTHER BUNDLE

foo.bar v1.0.0 OSGi framework

install

Resolver felix.configurator

OSGI-INF/configurator/config.json

slide-15
SLIDE 15

PUBLIC

REQUIREMENTS AND CAPABILITIES

▪ Something the bundle needs

▪ Namespace ▪ Directives (i.e. a filter)

15

▪ Something the bundle offers

▪ Namespace ▪ Attributes (i.e. key-value pairs)

Requirement Capability

slide-16
SLIDE 16

PUBLIC

REQUIREMENTS AND CAPABILITIES

▪ Something the bundle needs

▪ Namespace ▪ Directives (i.e. a filter)

  • sgi.wiring.package;

filter:=“(&(osgi.wiring.package=foo.bar.util)(ve rsion>=1.0.0)(!(version>=2.0.0)))”

  • sgi.extender;

filter:=“(&(osgi.extender=osgi.component)(ve rsion>=1.4.0)(!(version>=2.0.0)))”

16

▪ Something the bundle offers

▪ Namespace ▪ Attributes (i.e. key-value pairs)

  • sgi.wiring.package;
  • sgi.wiring.package=“foo.bar.util”

version=“1.0.0”

  • sgi.extender;
  • sgi.extender=“osgi.component”

Requirement Capability

slide-17
SLIDE 17

PUBLIC

RESOLVING CAPABILITIES AND REQUIREMENTS

slide-18
SLIDE 18

PUBLIC

OSGI SERVICES

18

REQUIRE AN OSGI SERVICE

foo.bar.api v1.0.0

foo.bar.api; version=1.0.0

slide-19
SLIDE 19

PUBLIC

OSGI SERVICES

19

REQUIRE AN OSGI SERVICE

foo.bar.api v1.0.0 foo.bar.impl v1.0.0

foo.bar.api; version=1.0.0 import foo.bar.api.BarService

slide-20
SLIDE 20

PUBLIC

OSGI SERVICES

20

REQUIRE AN OSGI SERVICE

foo.bar.api v1.0.0 foo.bar.impl v1.0.0 foo.bar.consumer v1.0.0

foo.bar.api; version=1.0.0 import foo.bar.api.BarService import

slide-21
SLIDE 21

PUBLIC

OSGI SERVICES

21

REQUIRE AN OSGI SERVICE

foo.bar.api v1.0.0 foo.bar.impl v1.0.0 foo.bar.consumer v1.0.0

foo.bar.api; version=1.0.0 import foo.bar.api.BarService import

Provide-Capability

  • sgi.service;
  • bjectClass:List<String>=“foo.bar.api.BarService"

Require-Capability

  • sgi.service;

filter:="(objectClass=foo.bar.api.BarService)"; effective:=active

slide-22
SLIDE 22

PUBLIC

OSGI SERVICES

22

REQUIRE AN OSGI SERVICE

foo.bar.api v1.0.0 foo.bar.impl v1.0.0 foo.bar.consumer v1.0.0

foo.bar.api; version=1.0.0 import foo.bar.api.BarService import

Provide-Capability

  • sgi.service;
  • bjectClass:List<String>=“foo.bar.api.BarService"

Require-Capability

  • sgi.service;

filter:="(objectClass=foo.bar.api.BarService)"; effective:=active

slide-23
SLIDE 23

PUBLIC

RESOLVING SERVICES

slide-24
SLIDE 24

PUBLIC

DECLARING REQUIREMENTS AND CAPABILITIES

@Capability(namespace=“your.name.space”, name=“foo”, version=“1.0.0”) @Requirement(namespace=“your.name.space”, filter=“(name=foo)”) USE BUNDLE ANNOTATIONS

slide-25
SLIDE 25

PUBLIC

DECLARING REQUIREMENTS AND CAPABILITIES WITH BUNDLE ANNOTATIONS

slide-26
SLIDE 26

PUBLIC

SO WHAT ABOUT INSTALLING AT RUNTIME?

USE THE REPOSITORY AND RESOLVER SERVICES

OSGi framework Resolver

Resolver

slide-27
SLIDE 27

PUBLIC

SO WHAT ABOUT INSTALLING AT RUNTIME?

USE THE REPOSITORY AND RESOLVER SERVICES

OSGi framework Resolver foo.bar v1.0.0

foo.bar.api; version=1.0.0 foo.bar.util; version=[1.0.0, 1.1.0)

foo.bar.util v2.0.0

foo.bar.util; version=2.0.0

com.car v1.0.0

com.car.api; version=1.0.0

Repository …

foo.bar.util v1.0.0

foo.bar.util; version=1.0.0 Resolver Repository

slide-28
SLIDE 28

PUBLIC

SO WHAT ABOUT INSTALLING AT RUNTIME?

USE THE REPOSITORY AND RESOLVER SERVICES

OSGi framework Resolver foo.bar v1.0.0

foo.bar.api; version=1.0.0 foo.bar.util; version=[1.0.0, 1.1.0)

foo.bar.util v2.0.0

foo.bar.util; version=2.0.0

com.car v1.0.0

com.car.api; version=1.0.0

Repository …

foo.bar.util v1.0.0

foo.bar.util; version=1.0.0

Deployment Agent

Resolver Repository

slide-29
SLIDE 29

PUBLIC

RESOLVER SERVICE

▪ Resolver Map<Resource, List<Wire>> resolve(ResolveContext context) throws ResolutionException ▪ ResolveContext Collection<Resource> getMandatoryResources() what to resolve? List<Capability> findProviders(Requirement requirement) where to find capabilities to resolve it?

29

slide-30
SLIDE 30

PUBLIC

RESOLVING AT RUNTIME

slide-31
SLIDE 31

PUBLIC

CONCLUSION

▪ Resolving is a gain, not a pain ▪ Resolve early and often ▪ Curate your repositories ▪ Use the (BND) tooling

slide-32
SLIDE 32

PUBLIC