W-JAX 09 - ScalaModules

  • Published on
    30-Jun-2015

  • View
    1.356

  • Download
    3

Embed Size (px)

DESCRIPTION

ScalaModules - OSGi ganz einfach mit einer Scala DSL

Transcript

  • 1. SCALAMODULES OSGi ganz einfach mit einer Scala DSL Heiko SeebergerCopyright WeigleWilczek 2009

2. HOUSTON, WIR HABEN EIN PROBLEM! ServiceReference ref = ctx.getServiceReference(Greeting.class.getName()); if (ref != null) { try {Object service = ctx.getService(ref);Greeting greeting = (Greeting) service; Low-level APIif (greeting != null) { Hliche System.out.println(greeting.welcome());} else {Details }System.out.println("No Greeting service available!");} finally {ctx.ungetService(ref); } } else { System.out.println("No Greeting service available!"); } 2 3. WIE KNNTE SCALA HELFEN?Ausdrucksstarke high-level DSL3 4. SO ETWAS IN DER ART ... OSGi giveMe Greeting and call welcome 4 5. WIE BAUE ICH EINE DSL?ImplicitHigher-order Conversions Functions Fluent API 5 6. SCALAMODULES Scala DSL to ease OSGi development 6 7. SERVICES REGISTRIEREN val hello = new Greeting { ... } automatisch ctx register hello ... unter allen Interfaces 7 8. SERVICES REGISTRIEREN II val hello = new Greeting { ... } ctx register (hello as classOf[Greeting]) typsicher ... unter einem bestimmten Interface8 9. SERVICES REGISTRIEREN III val hello = new Greeting { ... } ctx register (hello withProps ("Scala" -> "Modules")) ... mit Properties9 10. LIVE DEMO 10 11. SERVICES KONSUMIEREN I Funktional ctx getOne classOf[Greeting] andApply { _.welcome } match { case None=> // Handle service not available ... case Some(welcome) => println(welcome) }... nur einen einzelnen 11 12. SERVICES KONSUMIEREN II ctx getOne classOf[Greeting] andApply { (greeting, properties) => ... } ... nur einen einzelnen mit Properties12 13. SERVICES KONSUMIEREN III ctx getMany classOf[Greeting] andApply { _.welcome } match { case Nil=> // Handle service not available ... case welcomes => welcomes foreach { println } }... alle13 14. SERVICES KONSUMIEREN IVctx getMany classOf[Greeting] withFilter isTrue("polite") andApply { _.welcome } match { case Nil=> // Handle service not available ... case welcomes => welcomes foreach { println } }... alle mit Filter14 15. LIVE DEMO 15 16. SERVICES TRACKEN ctx track classOf[Greeting] on { case Adding(grt, _) => println("Adding polite Greeting: " + grt.welcome) case Removed(grt, _) => println("Removed polite Greeting: " + grt.goodbye) } ... mit oder ohne Properties16 17. SERVICE-ABHNGIGKEITEN ctx register { (grt: Greeting) => new GreetingReverser(grt) } ... wie DS Mandatory Dependencies17 18. FRAGEN / DISKUSSION18 19. DANKEKontakt: seeberger@weiglewilczek.com19