Your SlideShare is downloading. ×
OSGi Community Event 2010 - Dependencies, dependencies, dependencies
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

OSGi Community Event 2010 - Dependencies, dependencies, dependencies

1,010

Published on

OSGi Community Event 2010 - Dependencies, dependencies, dependencies (Marcel Offermans - Luminis Technologies)

OSGi Community Event 2010 - Dependencies, dependencies, dependencies (Marcel Offermans - Luminis Technologies)

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
1,010
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
13
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. !"#$%&'&()"* Marcel Offermans Dependencies, dependencies, dependencies 1
  • 2. Marcel Offermans • Fellow and Software Architect at Luminis Technologies marcel.offermans@luminis.nl • Member and Committer at Apache Software Foundation marrs@apache.org 2
  • 3. Agenda • Introduction • Basic Concepts • Dependencies • Design Patterns • Custom Dependencies • Add-ons • Wrap-up 3
  • 4. Agenda • Introduction • Basic Concepts • Dependencies • Design Patterns • Custom Dependencies • Add-ons • Wrap-up Software distribution: copy both zip archives from the memory stick 3
  • 5. Introduction 4
  • 6. Framework !"#"$%&'()"*$+",-&./ 012&$3'"4/56'7 1/,)'&(8 +69)*/ :&3/$,8,*/ 1/'#&,/ ;).9*/ ;).9*/ ;).9*/ 5
  • 7. 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 6
  • 8. 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 7
  • 9. Declaring your dependencies • Service Binder • Dependency Manager • Declarative Services • iPOJO • Blueprint • ...many more 8
  • 10. Dependency Manager • Subproject of Apache Felix • Nearing a 3.0 release • Some interesting new features ...I’m not unbiased, being it’s author 9
  • 11. Basic Concepts 10
  • 12. 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 11
  • 13. 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 12
  • 14. 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 13
  • 15. 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 13
  • 16. 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)" 14
  • 17. Basic Use Cases • Declare a component • Declare it lazily HelloWorld helloWorld = new HelloWorld(); manager.add(createComponent() .setImplementation(helloWorld) ); manager.add(createComponent() .setImplementation(HelloWorld.class) ); 15
  • 18. 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"); } } 16
  • 19. 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) 17
  • 20. 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) ) ); 18
  • 21. Dependencies 19
  • 22. Dependencies • Different types: – Service Dependencies – Configuration Dependencies – Bundle Dependencies – Resource Dependencies 20
  • 23. 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 21
  • 24. Bundle Dependencies • Depend on a bundle: – in certain states – with certain manifest entries • Bundle instance can be injected 22
  • 25. 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 23
  • 26. Design Patterns 24
  • 27. 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 25
  • 28. Overview of Design Patterns • Whiteboard Pattern • Null Object Pattern • “Singleton” Service • Aspect Service • Adapter Service • Resource Adapter Service 26
  • 29. Whiteboard Pattern “don’t  call  us... we’ll  call  you” 27
  • 30. Null Object Pattern • An object that implements a certain interface, can be safely invoked and does nothing 28
  • 31. “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 Storage requires 29
  • 32. 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 Cache Aspect get() getVersions() get(version) store(Document) Repository intercepts 30
  • 33. Adapter Service • Works on existing services • Adapts them, publishes a different service for each existing one getCacheHits() setSize() setTTL() flush() Repository Cache Manageable Adapter get() getVersions() get(version) store(Document) Repository Cache adapts 31
  • 34. 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 Track Resource Adapter MP3 File adapts 32
  • 35. Custom Dependencies 33
  • 36. Custom Dependencies • Dependency Manager is extensible with custom dependencies: – depend on time of day – depend on some custom instance / condition (start level, app state) 34
  • 37. Add-ons 35
  • 38. Add-ons • Shell (Felix, Equinox, Gogo) • Annotation based (Java 5 required) • Legacy support (2.x API adapter) 36
  • 39. Wrap-up 37
  • 40. 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 38
  • 41. More about OSGi • ApacheCon 2010 North America November 1-5, Atlanta – OSGi tutorial – full day OSGi track • Masterclass on OSGi October 12-15, Girona – Neil Bartlett and Peter Kriens 39

×