W-JAX 09 - ScalaModules

19
Copyright WeigleWilczek 2009 SCALAMODULES OSGi ganz einfach mit einer Scala DSL Heiko Seeberger

description

ScalaModules - OSGi ganz einfach mit einer Scala DSL

Transcript of W-JAX 09 - ScalaModules

Page 1: W-JAX 09 - ScalaModules

Copyright WeigleWilczek 2009

SCALAMODULESOSGi ganz einfach mit einer Scala DSL

Heiko Seeberger

Page 2: W-JAX 09 - ScalaModules

HOUSTON, WIR HABEN EIN PROBLEM!

2

ServiceReference ref = ctx.getServiceReference(Greeting.class.getName());if (ref != null) { try { Object service = ctx.getService(ref); Greeting greeting = (Greeting) service; if (greeting != null) { System.out.println(greeting.welcome()); } else { System.out.println("No Greeting service available!"); } } finally { ctx.ungetService(ref); }} else { System.out.println("No Greeting service available!");}

Low-level APIHäßliche

Details

Page 3: W-JAX 09 - ScalaModules

WIE KÖNNTE SCALA HELFEN?

3

Ausdrucksstarke high-level DSL

Page 4: W-JAX 09 - ScalaModules

SO ETWAS IN DER ART ...

4

OSGi giveMe Greeting and call welcome

Page 5: W-JAX 09 - ScalaModules

WIE BAUE ICH EINE DSL?

5

ImplicitConversions

Fluent API

Higher-orderFunctions

Page 6: W-JAX 09 - ScalaModules

SCALAMODULES

6

Scala DSL to ease OSGi development

Page 7: W-JAX 09 - ScalaModules

SERVICES REGISTRIEREN

7

val hello = new Greeting { ... }ctx register hello

... unter allen Interfaces

automatisch

Page 8: W-JAX 09 - ScalaModules

SERVICES REGISTRIEREN II

8

val hello = new Greeting { ... }ctx register (hello as classOf[Greeting])

... unter einem bestimmten Interface

typsicher

Page 9: W-JAX 09 - ScalaModules

SERVICES REGISTRIEREN III

9

val hello = new Greeting { ... }ctx register (hello withProps ("Scala" -> "Modules"))

... mit Properties

Page 10: W-JAX 09 - ScalaModules

LIVE DEMO

10

Page 11: W-JAX 09 - ScalaModules

SERVICES KONSUMIEREN I

11

ctx getOne classOf[Greeting] andApply { _.welcome } match { case None => // Handle service not available ... case Some(welcome) => println(welcome)}

... nur einen einzelnen

Funktional

Page 12: W-JAX 09 - ScalaModules

SERVICES KONSUMIEREN II

12

ctx getOne classOf[Greeting] andApply { (greeting, properties) => ...}

... nur einen einzelnen mit Properties

Page 13: W-JAX 09 - ScalaModules

SERVICES KONSUMIEREN III

13

ctx getMany classOf[Greeting] andApply { _.welcome } match { case Nil => // Handle service not available ... case welcomes => welcomes foreach { println }}

... alle

Page 14: W-JAX 09 - ScalaModules

SERVICES KONSUMIEREN IV

14

ctx getMany classOf[Greeting] withFilter isTrue("polite") andApply { _.welcome} match { case Nil => // Handle service not available ... case welcomes => welcomes foreach { println }}

... alle mit Filter

Page 15: W-JAX 09 - ScalaModules

LIVE DEMO

15

Page 16: W-JAX 09 - ScalaModules

SERVICES TRACKEN

16

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 Properties

Page 17: W-JAX 09 - ScalaModules

SERVICE-ABHÄNGIGKEITEN

17

ctx register { (grt: Greeting) => new GreetingReverser(grt) }

... wie DS Mandatory Dependencies

Page 18: W-JAX 09 - ScalaModules

FRAGEN / DISKUSSION

18