dependencies, dependencies, dependencies

39
TECHNOLOGIES Marcel Offermans Dependencies, dependencies, dependencies

Upload: marcel-offermans

Post on 01-Dec-2014

111 views

Category:

Software


2 download

DESCRIPTION

Managing dependencies in OSGi using the Apache Felix Dependency Manager gives you some powerful tools for expressing and managing all kinds of dependencies between components. This presentation shows you how to use them, and explains what design patterns are available for building applications. It also shows how to extend this system with custom types of dependencies.

TRANSCRIPT

Page 1: Dependencies, dependencies, dependencies

TECHNOLOGIES

Marcel Offermans

Dependencies, dependencies, dependencies

Page 2: Dependencies, dependencies, dependencies

Marcel Offermans

• Fellow and Software Architect at Luminis Technologies [email protected]

!

• Member and Committer at Apache Software [email protected]

Page 3: Dependencies, dependencies, dependencies

Agenda

• Introduction

• Basic Concepts

• Dependencies

• Design Patterns

• Custom Dependencies

• Add-ons

• Wrap-up

Software distribution: copy both zip archives from the memory stick

Page 4: Dependencies, dependencies, dependencies

Introduction

Page 5: Dependencies, dependencies, dependencies

Framework

Java$Virtual$Machine

OSGi$framework

Security

Module

Life$cycle

ServiceBundle Bundle Bundle

Page 6: Dependencies, dependencies, dependencies

Service Dependencies

• framework: ServiceListener – notification whenever there is a change

in the service registry

– but: only changes that occur while you are listening

• utility: ServiceTracker – solves the listening issue

– adds ability to customize services

Page 7: Dependencies, dependencies, dependencies

Problem

• using the framework supplied tooling, you are dealing with dependencies at a very low level

• a lot of boiler plate code is needed to implement real world scenarios

• there are very few design patterns that deal with composing an application based on services

Page 8: Dependencies, dependencies, dependencies

Declaring your dependencies

• Service Binder

• Dependency Manager

• Declarative Services

• iPOJO

• Blueprint

• ...many more

Page 9: Dependencies, dependencies, dependencies

Dependency Manager

• Subproject of Apache Felix

• Nearing a 3.0 release

• Some interesting new features

...I’m not unbiased, being it’s author

Page 10: Dependencies, dependencies, dependencies

Basic Concepts

Page 11: Dependencies, dependencies, dependencies

Basic Concepts

• Component: class that implements certain behaviour (a POJO)

• Dependency: something our component needs or wants (ie. a service)

• Service: OSGi service interface(s) under which our component is registered

Page 12: Dependencies, dependencies, dependencies

Declarative API

• Declarative ≠ XML

• Using a Java API has many advantages: – less error prone because of syntax and

compile time checking

– refactoring support, completion

– very readable through fluid API

– everything in one place, no magic

Page 13: Dependencies, dependencies, dependencies

Example code

• Projects – Download: http://www.xs4all.nl/~mfo/projects.zip

• Uses Eclipse + BndTools – Homepage: http://njbartlett.name/bndtools.html

– Update Site: http://bndtools-updates.s3.amazonaws.com

• Based on a snapshot release of the upcoming Dependency Manager 3.0

• During the presentation, we will switch between slides and Eclipse to show running examples

On the memory stick: !a) an Eclipse update site for BndTools b) a set of Eclipse projects

Page 14: Dependencies, dependencies, dependencies

Using the Dependency Manager

public class Activator extends DependencyActivatorBase { public void init(BundleContext context, DependencyManager manager) throws Exception { manager.add(createComponent() .setImplementation(new HelloWorld()) ); }! public void destroy(BundleContext context, DependencyManager manager) throws Exception { }}

Import-Package = org.apache.felix.dm;version="[3.0,4)"

Page 15: Dependencies, dependencies, dependencies

Basic Use Cases

• Declare a component

!

!

!

• Declare it lazily

HelloWorld helloWorld = new HelloWorld(); manager.add(createComponent() .setImplementation(helloWorld) );

manager.add(createComponent() .setImplementation(HelloWorld.class) );

Page 16: Dependencies, dependencies, dependencies

Component Life Cycle

• methods of the component

!

!

!

• setCallbacks(“init”, “start”, ...) setCallbacks(inst, “init”, “start”, ...) – to invoke the methods on ‘inst’

• ComponentStateListener – if you want to listen from the outside

public static class HelloWorldLifeCycle { private void init() { System.out.println("init"); } private void start() { System.out.println("start"); } private void stop() { System.out.println("stop"); } private void destroy() { System.out.println("destroy"); } }

Page 17: Dependencies, dependencies, dependencies

Declaring as a service

• setInterface(...) – allows you to declare multiple services

– allows you to specify service properties

manager.add(createComponent() .setInterface(LogService.class.getName(), new Properties() {{ put(Constants.SERVICE_RANKING, 20); }}) .setImplementation(MyLogService.class)

Page 18: Dependencies, dependencies, dependencies

Declaring Dependencies

• Adding a dependency

!

!

!

• Injects dependency – uses null object pattern

– injects other “OSGi” instances

• setCallbacks(...) setCallbacks(inst, ...)

manager.add(createComponent() .setImplementation(HelloWorldLogger.class) .add(createServiceDependency() .setService(LogService.class) ) );

Page 19: Dependencies, dependencies, dependencies

Dependencies

Page 20: Dependencies, dependencies, dependencies

Dependencies

• Different types: – Service Dependencies

– Configuration Dependencies

– Bundle Dependencies

– Resource Dependencies

Page 21: Dependencies, dependencies, dependencies

Configuration Dependencies

• Based on Configuration Admin – designed for required dependencies

– service.pid to identify the configuration

– allows you to only accept *valid* configurations •update() throws ConfigurationException

Page 22: Dependencies, dependencies, dependencies

Bundle Dependencies

• Depend on a bundle: – in certain states

– with certain manifest entries

• Bundle instance can be injected

Page 23: Dependencies, dependencies, dependencies

Resource Dependencies

• Resources are modeled as URLs

• Are provided by a repository – another bundle

– an Eclipse workspace

– some external source

• Filter on host, port, protocol, path and URL

Page 24: Dependencies, dependencies, dependencies

Design Patterns

Page 25: Dependencies, dependencies, dependencies

Design Patterns

• Moving up a level in abstraction

• OSGi is too low level to expose to everybody, but it is a great platform to build on

• Patterns provide a common language and describe solutions in context

Page 26: Dependencies, dependencies, dependencies

Overview of Design Patterns

• Whiteboard Pattern

• Null Object Pattern

• “Singleton” Service

• Aspect Service

• Adapter Service

• Resource Adapter Service

Page 27: Dependencies, dependencies, dependencies

Whiteboard Pattern

“don’t  call  us...  we’ll  call  you”

Page 28: Dependencies, dependencies, dependencies

Null Object Pattern

• An object that implements a certain interface, can be safely invoked and does nothing

Page 29: Dependencies, dependencies, dependencies

“Singleton” Service

• Publishes a component as a service

• Ties its life cycle to that of its dependencies

get()getVersions()get(version)store(Document)

Document Repository

Singleton

Storagerequires

Page 30: Dependencies, dependencies, dependencies

Aspect Service

• Works at the service level

• “intercepts” certain services

• can be chained based on rankings

• completely dynamic

get()getVersions()get(version)store(Document)

Repository CacheAspect

get()getVersions()get(version)store(Document)

Repository

intercepts

Page 31: Dependencies, dependencies, dependencies

Adapter Service

• Works on existing services

• Adapts them, publishes a different service for each existing one

getCacheHits()setSize()setTTL()flush()

Repository CacheManageable

Adapter

get()getVersions()get(version)store(Document)

Repository Cache

adapts

Page 32: Dependencies, dependencies, dependencies

Resource Adapter Service

• Adapts resources (instead of services)

• Allows you to expose the behavior of certain resources instead of their “inner guts”

play()pause()stop()

Audio TrackResourceAdapter

MP3Fileadapts

Page 33: Dependencies, dependencies, dependencies

Custom Dependencies

Page 34: Dependencies, dependencies, dependencies

Custom Dependencies

• Dependency Manager is extensible with custom dependencies: – depend on time of day

– depend on some custom instance / condition (start level, app state)

Page 35: Dependencies, dependencies, dependencies

Add-ons

Page 36: Dependencies, dependencies, dependencies

Add-ons

• Shell (Felix, Equinox, Gogo)

• Annotation based (Java 5 required)

• Legacy support (2.x API adapter)

Page 37: Dependencies, dependencies, dependencies

Wrap-up

Page 38: Dependencies, dependencies, dependencies

Wrap-up

• Points to take away: – do not expose every developer to the

OSGi API

– build higher level abstractions, use design patterns

– consider the dependency manager, it is very flexible

Page 39: Dependencies, dependencies, dependencies

More about OSGi

• ApacheCon 2010 North America November 1-5, Atlanta – OSGi tutorial

– full day OSGi track

• Masterclass on OSGiOctober 12-15, Girona – Neil Bartlett and Peter Kriens