• Like

Loading…

Flash Player 9 (or above) is needed to view presentations.
We have detected that you do not have it on your computer. To install it, go here.

Scala - OSGi Bundles from Outer (Java) Space

  • 1,439 views
Uploaded on

Talk auf dem Scala-Day der W-JAX 2010 http://jax.de/wjax2010/sessions/?tid=1732#session-15038

Talk auf dem Scala-Day der W-JAX 2010 http://jax.de/wjax2010/sessions/?tid=1732#session-15038

More in: Technology , Education
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
1,439
On Slideshare
0
From Embeds
0
Number of Embeds
0

Actions

Shares
Downloads
7
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. Prof. Dr. Oliver Braun | FH Schmalkalden Christoph Schmidt | FH Schmalkalden Scala – OSGi-Bundles from Outer (Java) Space
  • 2. Inhalt
    • Framework / Tools
      • OSGi
      • 3. Bnd, Pax Runner
      • 4. Sbt, ScalaModules, bnd4sbt
    • Beispiel: Songfinder
      • Code bzw. Vorgehen beim Coden
      • 5. Live-Demo
    • Code unter: http://github.com/c-schmidt/songfinder_example_wjax
  • 6. OSGi
    • Modulsystem für die JVM
      • JSR 291: Dynamic Component Support for Java SE
      • 7. Sichtbarkeitsregeln
      • 8. Abhängigkeitsverwaltung
      • 9. Versionierung
    • Bundles
      • JAR + OSGi-Manifest
  • 10. OSGi
    • Dynamisches Komponentenmodell
      • Zur Laufzeit: install, start, stop, update, uninstall
    • Serviceorientiertes Modulsystem
      • Dienste in JVM zur Laufzeit registrieren und konsumieren
      • 11. Service-Registry für Reaktion auf Hinzufügen oder Entfernen
  • 12. OSGi
    • Eine Klasse im Bundle muss Interface BundleActivator implementieren
    • 13. interface BundleActivator {
      • void start(BundleContext c);
      • 14. void stop(BundleContext c);
    • }
    • 15. Über BundleContext Services registrieren, ...
  • 16. bnd
    • „the swiss army knife of OSGi“
    • 17. Zum Erzeugen von Bundles
    • 18. Generiert Manifest
    • 19. => Vereinfacht OSGi-Entwicklung
  • 20. Pax Runner
    • Startet OSGi-Plattform mit angegebenen Bundles
    • 21. scan-bundle:mvn:http://scala-tools.org/repo-releases!com.weiglewilczek.scala-lang-osgi/scala-library/2.8.0
    • 22.
    • 23. $ pax-run.sh --bootDelegation="sun.*,com.sun.*" scan-composite:file:songfinder.composite
    • 24. Verschiedene Profile
  • 25. Sbt
    • Simple Build Tool
    • 26. Konfigurieren und Erweitern in Scala
    • 27. Mit interaktiver Shell, z.B.
    • 28. $ sbt
    • 29. > ~ compile
    • 30. Auch für reine Java-Projekte nützlich
  • 31. ScalaModules
    • Scala-DSL für OSGi-Entwicklung
    • 32. Spart eine Menge Boilerplate
    // Java ServiceReference reference = context.getServiceReference(Greeting.class.getName()); if (reference != null) { try { Object service = context.getService(reference); Greeting greeting = (Greeting) service; if (greeting != null) { System.out.println(greeting.welcome()); } else { System.out.println("No Greeting service available!"); } } finally { context.ungetService(reference); } } else { System.out.println("No Greeting service available!"); } // Scala context findService withInterface[Greeting] andApply { _.welcome } match { case None => println("No Greeting service available!") case Some(welcome) => println(welcome) }
  • 33. bnd4sbt
    • Plugin für sbt zur Nutzung von bnd
    • 34. Konfiguration in Scala/sbt
    • 35. Kein zusätzliches bnd-File nötig
    • 36. Erstellen eines OSGi-Bundles mit
      • $ sbt bnd-bundle
  • 37. Der Songfinder
  • 38. Sbt-Projekt
  • 49. Sbt-Projekt
  • 57. Plugins.scala
      class Plugins (info: ProjectInfo) extends PluginDefinition (info) { lazy val aquteRepo = "aQute Maven Repository" at "http://www.aqute.biz/repo" lazy val aquteModuleConfig = ModuleConfiguration("biz.aQute", aquteRepo) lazy val bnd4sbt = "com.weiglewilczek.bnd4sbt" % "bnd4sbt" % "1.0.0" }
  • 58. Project.scala
      class RadioParentProject(info: ProjectInfo) extends ParentProject (info) { object Dependencies { val osgiVersion = "4.2.0" val scalaModulesCore = "com.weiglewilczek.scalamodules" %% "scalamodules-core" % "2.0.0" val osgiCore = "org.osgi" % "org.osgi.core" % osgiVersion % "provided" } ... }
  • 59. Das API-Bundle
      als Sub-Projekt: songfinder-api/ `-- src `-- main `-- scala `-- Songfinder.scala
  • 60. Erstellen des API-Bundles
  • 68. Konfiguration: Project.scala
      ... val songfinderAPIProject = project("songfinder-api", "radio-songfinder-api", new SongfinderAPIProject(_)) class SongfinderAPIProject (info: ProjectInfo) extends DefaultProject (info) with BNDPlugin { override def bndExportPackage = "org.unsane.radio.songfinder;version= %s".format(projectVersion.value) :: Nil }...
  • 69. Erstellen eines Services
  • 79. Erstellen eines Services
      //songfinder-create/../Activator.scala class Activator extends BundleActivator {... override def start(context: BundleContext ) { val songfinder = new Songfinder { override def find = { ... }... override def stopMsg = "shutdown now!" } context createService songfinder } override def stop (context: BundleContext ) {} }
  • 80. Der Watcher
    • Ein weiteres Sub-Projekt: songfinder-watch
    • 81. Project.scala konfigurieren
    • 82. Client-Bundle in die Datei
    • 83. songfinder.composite aufnehmen
  • 84. Der Watcher
      //songfinder-watch/../Activator.scala class Activator extends BundleActivator { var run = true class WatchActor(context: BundleContext) extends Actor {...} override def start (context: BundleContext ) { new WatchActor(context).start() } override def stop (context: BundleContext ) { run = false } }
  • 85. Der Watcher
      class WatchActor(context: BundleContext) extends Actor { def act() { while (run) { println("[radio/songfinder-watch] watching") context watchServices withInterface[Songfinder] andHandle { case AddingService(songfinder, _) => songfinder.find case ServiceRemoved(songfinder, _) => println(songfinder stopMsg) } Thread.sleep(3000) } } }
  • 86. Demo
    • Im Projektverzeichnis radio
    • 87. OSGi- Plattform mit Pax Runner starten:
    • 88. $ pax-run.sh
    • 89. --bootDelegation="sun.*,com.sun.*"
    • 90. scan-composite: file: songfinder.composite
  • 91. Quellen
      http://github.com/c-schmidt/songfinder_example_wjax http://github.com/weiglewilczek/scalamodules http://github.com/weiglewilczek/bnd4sbt http://code.google.com/p/simple-build-tool/ http://www.osgi-buch.com/ http://paxrunner.ops4j.org/space/Pax+Runner
  • 92. Und zum Schluss ein kleines bisschen Werbung:
  • 93.
      [email_address] http://github.com/c-schmidt [email_address] http://pads.fh-schmalkalden.de/ http://twitter.com/obcode http://github.com/obcode
    Vielen Dank für Ihre Aufmerksamkeit