Agile Development with OSGi
Upcoming SlideShare
Loading in...5
×
 

Agile Development with OSGi

on

  • 221 views

Blast from the past that looks an awful lot like microservices...

Blast from the past that looks an awful lot like microservices...

Statistics

Views

Total Views
221
Views on SlideShare
220
Embed Views
1

Actions

Likes
3
Downloads
2
Comments
1

1 Embed 1

http://www.slideee.com 1

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Agile Development with OSGi Agile Development with OSGi Presentation Transcript

  • Agile Development with OSGi Matt Stine
  • About your speaker... IT Manager / Business Analyst / Software Architect by Day Speaker (JavaOne, SpringOne/2GX, Lambda Lounge, NFJS, RWX, PAX) Author (GroovyMag, NFJS the Magazine) President of the Memphis/Mid-South Java User Group Agile Zone Leader @ DZone OSGi Enthusiast
  • A Tale of Two Cities: Tracer Bullet Development OSGi
  • Where it all began...
  • ...OK, really this time!
  • A rose by any other name... Walking Skeleton (Alistair Cockburn)
 http://alistair.cockburn.us/Walking+skeleton Spanning Application/Matrix (Mary & Tom Poppendieck)
 Lean Software Development: An Agile Toolkit Nested Synchronization (Mary & Tom Poppendieck)
 Implementing Lean Software Development Hudson River Company Start (Johanna Rothman)
 Manage It! Thread (Matt Simons)
 “Big and Agile?” Cutter IT Journal 15(1): January 2002. Spike (Luke Hohmann)
 Beyond Software Architecture: Creating and Sustaining Winning Solutions
  • Propose System Objects Tracer Bullet Development Inspired by Ship It! (Richardson/Gwaltney), page 127
  • Propose System Objects Identify application layers/modules e.g. Client, Server, Database Must be able to stand alone Keep as coarse grained as possible Must be able to justify isolated developer/team
  • Propose System Objects Propose Interfaces Tracer Bullet Development Inspired by Ship It! (Richardson/Gwaltney), page 127
  • Propose Interfaces Define contract between system objects Collaborative effort Agree on method names, signatures Stub out implementations (canned data) Define how layers will talk (e.g. direct API calls, RMI, SOAP, OSGi, JMS) System architecture “emerges”
  • Propose System Objects Propose Interfaces Connect Interfaces Tracer Bullet Development Inspired by Ship It! (Richardson/Gwaltney), page 127
  • Connect Interfaces Implement interobject communication Many issues will emerge - resolve them! Now the tracer bullet can be fired!
  • Propose System Objects Propose Interfaces Connect Interfaces Add Functions Tracer Bullet Development Inspired by Ship It! (Richardson/Gwaltney), page 127
  • Add Functions Finally time to add real production code! Developers/teams can work in isolation now Work from high priority/high risk to low priority/low risk Start to address performance problems
  • Propose System Objects Propose Interfaces Connect Interfaces Add Functions Refactor, Refine, Repeat Tracer Bullet Development Inspired by Ship It! (Richardson/Gwaltney), page 127
  • Refactor, Refine, Repeat Interfaces will evolve Add/change at any time, but... No broken windows!!! Within module, refactor mercilessly! Between modules, must communicate!
  • Propose System Objects Propose Interfaces Connect Interfaces Add Functions Refactor, Refine, Repeat Tracer Bullet Development Inspired by Ship It! (Richardson/Gwaltney), page 127
  • TBD Benefits Teams can work in parallel, independently Can demonstrate “working” system earlier, providing feedback to you sooner New features can be demonstrated immediately Loosely coupled, highly cohesive modules Encapsulation of module details Enables automated integration testing Enables interteam communication Enables staff reallocation
  • OSGi The Dynamic Module system for Java
  • OSGi Architecture Hardware Operating System Java Virtual Machine Modules Lifecycle Service Registry Services Security Application/Bundles OSGiPlatformJavaPlatform Inspired by Modular Java (Craig Walls), page 16
  • SOA in a JVM! Service Bundle Consumer Bundle RegistersService DiscoversService Consumes Service Inspired by Modular Java (Craig Walls), page 17 OSGi Service Registry
  • Modularity...how? Encapsulation Service Registry Versioning
 
 
 

  • Bundle Versioning Bar 1.0.2 Zab 2.1.3 Inspired by Modular Java (Craig Walls), page 18 Foo 1.0.0 Zab 1.0.4 Qib 2.0.1
  • Modularity...how? Encapsulation Service Registry Versioning Dynamism/Lifecycle
  • OSGi Implementations Equinox
  • PAX Tools for OSGi
  • PaxConstruct Script-oriented toolkit for OSGi development Similar to Rails/Grails development model Built on Maven 2
  • PaxRunner OSGi framework launcher Facilitates quick start OSGi exploration Facilitates swapping OSGi platforms (works with all major open source implementations) Facilitates provisioning OSGi bundles from multiple sources Magic behind “pax-provision” and PaxExam
  • PaxExam Testing toolkit for OSGi Facilitates in-container integration testing of bundles Flow: Starts OSGi container of choice Provisions and starts selected bundles Injects OSGi BundleContext to your JUnit test Executes a test method Rinse and repeat until done!
  • Why TBD+OSGi? Connect Interfaces
  • Why TBD+OSGi? Connect Interfaces Client Object Client Module Service Interface Service Implementation Server Module
  • Case Study
  • As a customer I can browse for speakers and select one so that I can reserve him/her. As a customer I can reserve my chosen speakers at any Fluffbox location at which he/she is available so that I can pick him/her up. As a kiosk, I can notify the reservation system when speakers are picked up/returned so that customers will have an up-to-date view of what speakers are available. Online Reservation System for Speaker Rental Kiosks
  • System Objects Web UI Business Services Data Access Outbound Messaging Database Kiosk Inbound Messaging
  • Business Services Interface List<Speaker> browse();! ! Speaker get(Long id);! ! List<Kiosk> findKiosksWhereAvailable(Speaker speaker);! ! Kiosk get(Long id);! ! Rental reserve(Speaker speaker, Kiosk kiosk, Customer customer);! ! void pickup(Rental rental);! ! void returnRental(Rental rental, Kiosk kiosk);!
  • Data Access Interface List<Speaker> findAll();! ! Speaker get(Long id);! ! List<Kiosk> findKiosksWhereAvailable(Speaker speaker);! ! Kiosk get(Long id);! ! Rental create(Rental rental);! ! void pickup(Rental rental);! ! void returnRental(Rental rental);!
  • Outbound Messaging Interface void notifyKioskOfRental(Kiosk kiosk, Rental rental);
  • Inbound Messaging Interface void notifyHqOfRentalPickup(Rental rental);! ! void notifyHqOfRentalReturn(Rental rental, Kiosk kiosk);
  • Connect Interfaces Web UI Business Services Data Access Outbound Messaging Database Kiosk Spring DM/OSGi OSGi JDBC Spring DM/OSGi JMS JMS Spring DM/OSGi Inbound Messaging
  • Add Functions On to the code... Code available at: http://github.com/ mstine/fluffbox
  • Refactor, Refine, Repeat Maybe change out plain JMS for Spring Integration solution Maybe track spatial data on locations to enable mapping Still need to add a payment system - another system object? Our TBD system puts us in great position to address any of these and more!
  • Please fill out your evaluations! Matt Stine matt.stine@gmail.com Twitter: mstine http://www.mattstine.com