SlideShare uma empresa Scribd logo
1 de 19
Baixar para ler offline
OSGi on Scala
                                Ease OSGi development with a Scala DSL
                                           Heiko Seeberger




© 2009 WeigleWilczek. Released under the Creative Commons Attribution-Noncommercial-No Derivative Works 3.0 Germany License.   2009-06-22
Sonntag, 21. Juni 2009
OSGi on Scala




                                                                        Why?



          •       Scala is a great language
                •        Runs on JVM & fully interoperable with Java

                •        Object-functional programming style => Best of OO and FP

                •        Scalable and flexible language => Domain Specific Languages

          •       Let’s put OSGi on Scala to ease OSGi development




© 2009 WeigleWilczek. Released under the Creative Commons Attribution-Noncommercial-No Derivative Works 3.0 Germany License.   2
Sonntag, 21. Juni 2009
OSGi on Scala




                                                            ScalaModules




          •       Scala DSL for OSGi

          •       Ease service handling

          •       Smooth ugly parts of the API, e.g. null references




© 2009 WeigleWilczek. Released under the Creative Commons Attribution-Noncommercial-No Derivative Works 3.0 Germany License.   3
Sonntag, 21. Juni 2009
OSGi on Scala




                                                                Live Demo
                                                           Should I really dare?

                                                                            YES!




© 2009 WeigleWilczek. Released under the Creative Commons Attribution-Noncommercial-No Derivative Works 3.0 Germany License.   4
Sonntag, 21. Juni 2009
OSGi on Scala




             Start Scala REPL with appropriate Classpath



           tmp$ scala -cp felix.jar:scalamodules-core-...jar:scalamodules-util-...jar
           Welcome to Scala version 2.7.5.final (Java HotSpot(TM) Client VM, Java 1.5.0_19).
           Type in expressions to have them evaluated.
           Type :help for more information.




© 2009 WeigleWilczek. Released under the Creative Commons Attribution-Noncommercial-No Derivative Works 3.0 Germany License.   5
Sonntag, 21. Juni 2009
OSGi on Scala




                                 Import Felix and ScalaModules



                                 scala> import org.apache.felix.framework._
                                 import org.apache.felix.framework._

                                 scala> import org.scalamodules.core.RichBundleContext._
                                 import org.scalamodules.core.RichBundleContext._




© 2009 WeigleWilczek. Released under the Creative Commons Attribution-Noncommercial-No Derivative Works 3.0 Germany License.   6
Sonntag, 21. Juni 2009
OSGi on Scala




                            Start Felix and get BundleContext



                    scala> val felix = new Felix(null)
                    felix: org.apache.felix.framework.Felix = org.apache.felix.framework [0]

                    scala> felix.start

                    scala> val ctx = felix.getBundleContext
                    ctx: org.osgi.framework.BundleContext = org...BundleContextImpl@d9367a




© 2009 WeigleWilczek. Released under the Creative Commons Attribution-Noncommercial-No Derivative Works 3.0 Germany License.   7
Sonntag, 21. Juni 2009
OSGi on Scala




                         Define a Service Interface and Object



                              scala> trait Greeting { def hello: String }
                              defined trait Greeting

                              scala> val greeting = new Greeting { def hello = "Hello!" }
                              greeting: java.lang.Object with Greeting = $anon$1@8ed249




© 2009 WeigleWilczek. Released under the Creative Commons Attribution-Noncommercial-No Derivative Works 3.0 Germany License.   8
Sonntag, 21. Juni 2009
OSGi on Scala




                                         Try to consume a Service



                         scala> ctx getOne classOf[Greeting] andApply { _.hello } match {
                              |   case Some(s) => println(s)
                              |   case None    => println("No Greeting service available!")
                              | }
                         No Greeting service available!




© 2009 WeigleWilczek. Released under the Creative Commons Attribution-Noncommercial-No Derivative Works 3.0 Germany License.   9
Sonntag, 21. Juni 2009
OSGi on Scala




            Try to provide a Service with illegal Interface



    scala> ctx registers classOf[String] theService greeting
    <console>:13: error: value registers is not a member of org.osgi.framework.BundleContext
           ctx registers classOf[String] theService greeting
               ^




© 2009 WeigleWilczek. Released under the Creative Commons Attribution-Noncommercial-No Derivative Works 3.0 Germany License.   10
Sonntag, 21. Juni 2009
OSGi on Scala




                                       Provide a Service correctly




         scala> ctx registerAs classOf[Greeting] theService greeting
         res3: org.osgi.framework.ServiceRegistration = org...ServiceRegistrationImpl@ed63a3




© 2009 WeigleWilczek. Released under the Creative Commons Attribution-Noncommercial-No Derivative Works 3.0 Germany License.   11
Sonntag, 21. Juni 2009
OSGi on Scala




                         Try to consume a Service once more



                         scala> ctx getOne classOf[Greeting] andApply { _.hello } match {
                              |   case Some(s) => println(s)
                              |   case None    => println("No Greeting service available!")
                              | }
                         Hello!




© 2009 WeigleWilczek. Released under the Creative Commons Attribution-Noncommercial-No Derivative Works 3.0 Germany License.   12
Sonntag, 21. Juni 2009
OSGi on Scala




                              What else can ScalaModules do?




© 2009 WeigleWilczek. Released under the Creative Commons Attribution-Noncommercial-No Derivative Works 3.0 Germany License.   13
Sonntag, 21. Juni 2009
OSGi on Scala




                             Provide a Service with Properties




                                    context registerAs classOf[Greeting] withProperties
                                     ("name" -> "welcome") theService greeting




© 2009 WeigleWilczek. Released under the Creative Commons Attribution-Noncommercial-No Derivative Works 3.0 Germany License.   14
Sonntag, 21. Juni 2009
OSGi on Scala




                Consume multiple Service applying a Filter



                         context getMany classOf[Greeting] withFilter "(name=*)" andApply {
                           _.welcome
                         } match {
                           case None           => noGreetingService()
                           case Some(welcomes) => welcomes.foreach { println }
                         }




© 2009 WeigleWilczek. Released under the Creative Commons Attribution-Noncommercial-No Derivative Works 3.0 Germany License.   15
Sonntag, 21. Juni 2009
OSGi on Scala




                                                          Track Services



            context track classOf[Greeting] on {
              case Adding(greeting, _)   => println("Adding Greeting: " + greeting.welcome)
              case Removed(greeting, _) => println("Removed Greeting: " + greeting.goodbye)
            }




© 2009 WeigleWilczek. Released under the Creative Commons Attribution-Noncommercial-No Derivative Works 3.0 Germany License.   16
Sonntag, 21. Juni 2009
OSGi on Scala




                                               Service Dependencies



                 context registerAs classOf[Command] dependOn classOf[Greeting] theService {
                   greeting => new Command {
                     ...
                   }
                 }




© 2009 WeigleWilczek. Released under the Creative Commons Attribution-Noncommercial-No Derivative Works 3.0 Germany License.   17
Sonntag, 21. Juni 2009
OSGi on Scala




                                                    And much more ...




© 2009 WeigleWilczek. Released under the Creative Commons Attribution-Noncommercial-No Derivative Works 3.0 Germany License.   18
Sonntag, 21. Juni 2009
OSGi on Scala




                                                 How to get started?



          •       www.scalamodules.org

          •       Wiki / Getting Started

          •       Reference Guide

          •       Contact: seeberger@weiglewilczek.com




© 2009 WeigleWilczek. Released under the Creative Commons Attribution-Noncommercial-No Derivative Works 3.0 Germany License.   19
Sonntag, 21. Juni 2009

Mais conteúdo relacionado

Semelhante a OSGi DevCon Europe 09 - OSGi on Scala

Bytecode Weaving in OSGi – Enhance Your Classes, Not Your Dependency graph! ...
Bytecode Weaving in OSGi – Enhance Your Classes, Not Your Dependency graph!  ...Bytecode Weaving in OSGi – Enhance Your Classes, Not Your Dependency graph!  ...
Bytecode Weaving in OSGi – Enhance Your Classes, Not Your Dependency graph! ...
mfrancis
 
Osgi Webinar
Osgi WebinarOsgi Webinar
Osgi Webinar
WSO2
 
TRESOR: The modular cloud - Building a domain specific cloud platform with OS...
TRESOR: The modular cloud - Building a domain specific cloud platform with OS...TRESOR: The modular cloud - Building a domain specific cloud platform with OS...
TRESOR: The modular cloud - Building a domain specific cloud platform with OS...
mfrancis
 

Semelhante a OSGi DevCon Europe 09 - OSGi on Scala (20)

Introduction to OSGGi
Introduction to OSGGiIntroduction to OSGGi
Introduction to OSGGi
 
Enterprise Applications With OSGi and SpringSource dm Server
Enterprise Applications With OSGi and SpringSource dm ServerEnterprise Applications With OSGi and SpringSource dm Server
Enterprise Applications With OSGi and SpringSource dm Server
 
Mac ruby deployment
Mac ruby deploymentMac ruby deployment
Mac ruby deployment
 
Groovy in 15 minutes
Groovy in 15 minutesGroovy in 15 minutes
Groovy in 15 minutes
 
JAX 09 - OSGi Service Components Models
JAX 09 - OSGi Service Components ModelsJAX 09 - OSGi Service Components Models
JAX 09 - OSGi Service Components Models
 
How to reduce cold starts for Java Serverless applications in AWS at JCON Wor...
How to reduce cold starts for Java Serverless applications in AWS at JCON Wor...How to reduce cold starts for Java Serverless applications in AWS at JCON Wor...
How to reduce cold starts for Java Serverless applications in AWS at JCON Wor...
 
OSGi DevCon 2009 Review
OSGi DevCon 2009 ReviewOSGi DevCon 2009 Review
OSGi DevCon 2009 Review
 
Cloud PaaS with Java
Cloud PaaS with JavaCloud PaaS with Java
Cloud PaaS with Java
 
Deploying and running Grails in the cloud
Deploying and running Grails in the cloudDeploying and running Grails in the cloud
Deploying and running Grails in the cloud
 
Bytecode Weaving in OSGi – Enhance Your Classes, Not Your Dependency graph! ...
Bytecode Weaving in OSGi – Enhance Your Classes, Not Your Dependency graph!  ...Bytecode Weaving in OSGi – Enhance Your Classes, Not Your Dependency graph!  ...
Bytecode Weaving in OSGi – Enhance Your Classes, Not Your Dependency graph! ...
 
GlassFish v3 - Architecture
GlassFish v3 - ArchitectureGlassFish v3 - Architecture
GlassFish v3 - Architecture
 
The OSGi Framework Multiplication
The OSGi Framework MultiplicationThe OSGi Framework Multiplication
The OSGi Framework Multiplication
 
AWS DevDay Berlin - Automating building blocks choices you will face with con...
AWS DevDay Berlin - Automating building blocks choices you will face with con...AWS DevDay Berlin - Automating building blocks choices you will face with con...
AWS DevDay Berlin - Automating building blocks choices you will face with con...
 
Modular Java EE in the Cloud
Modular Java EE in the CloudModular Java EE in the Cloud
Modular Java EE in the Cloud
 
Osgi Webinar
Osgi WebinarOsgi Webinar
Osgi Webinar
 
2023-09-28-AWS Las Palmas UG - Dynamic Anti-Frigile Systems.pdf
2023-09-28-AWS Las Palmas UG - Dynamic Anti-Frigile Systems.pdf2023-09-28-AWS Las Palmas UG - Dynamic Anti-Frigile Systems.pdf
2023-09-28-AWS Las Palmas UG - Dynamic Anti-Frigile Systems.pdf
 
TRESOR: The modular cloud - Building a domain specific cloud platform with OS...
TRESOR: The modular cloud - Building a domain specific cloud platform with OS...TRESOR: The modular cloud - Building a domain specific cloud platform with OS...
TRESOR: The modular cloud - Building a domain specific cloud platform with OS...
 
Tales from the OSGi trenches
Tales from the OSGi trenchesTales from the OSGi trenches
Tales from the OSGi trenches
 
"Messaging with Quarkus"
"Messaging with Quarkus""Messaging with Quarkus"
"Messaging with Quarkus"
 
"Messaging with Quarkus"
"Messaging with Quarkus""Messaging with Quarkus"
"Messaging with Quarkus"
 

Mais de Heiko Seeberger

Eclipse Magazin 12 - Design by Contract
Eclipse Magazin 12 - Design by ContractEclipse Magazin 12 - Design by Contract
Eclipse Magazin 12 - Design by Contract
Heiko Seeberger
 
Eclipse Magazin 16 - Die Stärke der Drei
Eclipse Magazin 16 - Die Stärke der DreiEclipse Magazin 16 - Die Stärke der Drei
Eclipse Magazin 16 - Die Stärke der Drei
Heiko Seeberger
 
Eclipse Magazin15 - Performance Logging
Eclipse Magazin15 - Performance LoggingEclipse Magazin15 - Performance Logging
Eclipse Magazin15 - Performance Logging
Heiko Seeberger
 
Eclipse Magazin 14 - Getting hooked on Equinox
Eclipse Magazin 14 - Getting hooked on EquinoxEclipse Magazin 14 - Getting hooked on Equinox
Eclipse Magazin 14 - Getting hooked on Equinox
Heiko Seeberger
 
Eclipse Magazin 12 - Security does matter
Eclipse Magazin 12 - Security does matterEclipse Magazin 12 - Security does matter
Eclipse Magazin 12 - Security does matter
Heiko Seeberger
 
EclipseCon 08 - Agile RCP
EclipseCon 08 - Agile RCPEclipseCon 08 - Agile RCP
EclipseCon 08 - Agile RCP
Heiko Seeberger
 
W-JAX 07 - AOP im Einsatz mit OSGi und RCP
W-JAX 07 - AOP im Einsatz mit OSGi und RCPW-JAX 07 - AOP im Einsatz mit OSGi und RCP
W-JAX 07 - AOP im Einsatz mit OSGi und RCP
Heiko Seeberger
 
JAX 08 - Experiences using Equinox Aspects in a real-world Project
JAX 08 - Experiences using Equinox Aspects in a real-world ProjectJAX 08 - Experiences using Equinox Aspects in a real-world Project
JAX 08 - Experiences using Equinox Aspects in a real-world Project
Heiko Seeberger
 

Mais de Heiko Seeberger (20)

JavaSPEKTRUM - Scala 3
JavaSPEKTRUM - Scala 3JavaSPEKTRUM - Scala 3
JavaSPEKTRUM - Scala 3
 
JavaSPEKTRUM - Scala 2
JavaSPEKTRUM - Scala 2JavaSPEKTRUM - Scala 2
JavaSPEKTRUM - Scala 2
 
JavaSPEKTRUM - Scala 1
JavaSPEKTRUM - Scala 1JavaSPEKTRUM - Scala 1
JavaSPEKTRUM - Scala 1
 
RheinJUG 2010 - Sprechen Sie Scala?
RheinJUG 2010 - Sprechen Sie Scala?RheinJUG 2010 - Sprechen Sie Scala?
RheinJUG 2010 - Sprechen Sie Scala?
 
W-JAX 09 - ScalaModules
W-JAX 09 - ScalaModulesW-JAX 09 - ScalaModules
W-JAX 09 - ScalaModules
 
W-JAX 09 - Lift
W-JAX 09 - LiftW-JAX 09 - Lift
W-JAX 09 - Lift
 
JM 08/09 - Beginning Scala Review
JM 08/09 - Beginning Scala ReviewJM 08/09 - Beginning Scala Review
JM 08/09 - Beginning Scala Review
 
JM 08/09 - ScalaModules
JM 08/09 - ScalaModulesJM 08/09 - ScalaModules
JM 08/09 - ScalaModules
 
JAX 09 - OSGi on Scala
JAX 09 - OSGi on ScalaJAX 09 - OSGi on Scala
JAX 09 - OSGi on Scala
 
JAX 08 - Agile RCP
JAX 08 - Agile RCPJAX 08 - Agile RCP
JAX 08 - Agile RCP
 
Eclipse Magazin 12 - Design by Contract
Eclipse Magazin 12 - Design by ContractEclipse Magazin 12 - Design by Contract
Eclipse Magazin 12 - Design by Contract
 
JUGM 07 - AspectJ
JUGM 07 - AspectJJUGM 07 - AspectJ
JUGM 07 - AspectJ
 
Eclipse Magazin 16 - Die Stärke der Drei
Eclipse Magazin 16 - Die Stärke der DreiEclipse Magazin 16 - Die Stärke der Drei
Eclipse Magazin 16 - Die Stärke der Drei
 
Eclipse Magazin15 - Performance Logging
Eclipse Magazin15 - Performance LoggingEclipse Magazin15 - Performance Logging
Eclipse Magazin15 - Performance Logging
 
Eclipse Magazin 14 - Getting hooked on Equinox
Eclipse Magazin 14 - Getting hooked on EquinoxEclipse Magazin 14 - Getting hooked on Equinox
Eclipse Magazin 14 - Getting hooked on Equinox
 
Eclipse Magazin 12 - Security does matter
Eclipse Magazin 12 - Security does matterEclipse Magazin 12 - Security does matter
Eclipse Magazin 12 - Security does matter
 
EclipseCon 08 - Agile RCP
EclipseCon 08 - Agile RCPEclipseCon 08 - Agile RCP
EclipseCon 08 - Agile RCP
 
W-JAX 07 - AOP im Einsatz mit OSGi und RCP
W-JAX 07 - AOP im Einsatz mit OSGi und RCPW-JAX 07 - AOP im Einsatz mit OSGi und RCP
W-JAX 07 - AOP im Einsatz mit OSGi und RCP
 
W-JAX 08 - Declarative Services versus Spring Dynamic Modules
W-JAX 08 - Declarative Services versus Spring Dynamic ModulesW-JAX 08 - Declarative Services versus Spring Dynamic Modules
W-JAX 08 - Declarative Services versus Spring Dynamic Modules
 
JAX 08 - Experiences using Equinox Aspects in a real-world Project
JAX 08 - Experiences using Equinox Aspects in a real-world ProjectJAX 08 - Experiences using Equinox Aspects in a real-world Project
JAX 08 - Experiences using Equinox Aspects in a real-world Project
 

Último

+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
?#DUbAI#??##{{(☎️+971_581248768%)**%*]'#abortion pills for sale in dubai@
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
panagenda
 

Último (20)

Understanding the FAA Part 107 License ..
Understanding the FAA Part 107 License ..Understanding the FAA Part 107 License ..
Understanding the FAA Part 107 License ..
 
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
 
MS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectorsMS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectors
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : Uncertainty
 
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
 
CNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In PakistanCNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In Pakistan
 
Introduction to Multilingual Retrieval Augmented Generation (RAG)
Introduction to Multilingual Retrieval Augmented Generation (RAG)Introduction to Multilingual Retrieval Augmented Generation (RAG)
Introduction to Multilingual Retrieval Augmented Generation (RAG)
 
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
 
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 AmsterdamDEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
 
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWEREMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
 
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 

OSGi DevCon Europe 09 - OSGi on Scala

  • 1. OSGi on Scala Ease OSGi development with a Scala DSL Heiko Seeberger © 2009 WeigleWilczek. Released under the Creative Commons Attribution-Noncommercial-No Derivative Works 3.0 Germany License. 2009-06-22 Sonntag, 21. Juni 2009
  • 2. OSGi on Scala Why? • Scala is a great language • Runs on JVM & fully interoperable with Java • Object-functional programming style => Best of OO and FP • Scalable and flexible language => Domain Specific Languages • Let’s put OSGi on Scala to ease OSGi development © 2009 WeigleWilczek. Released under the Creative Commons Attribution-Noncommercial-No Derivative Works 3.0 Germany License. 2 Sonntag, 21. Juni 2009
  • 3. OSGi on Scala ScalaModules • Scala DSL for OSGi • Ease service handling • Smooth ugly parts of the API, e.g. null references © 2009 WeigleWilczek. Released under the Creative Commons Attribution-Noncommercial-No Derivative Works 3.0 Germany License. 3 Sonntag, 21. Juni 2009
  • 4. OSGi on Scala Live Demo Should I really dare? YES! © 2009 WeigleWilczek. Released under the Creative Commons Attribution-Noncommercial-No Derivative Works 3.0 Germany License. 4 Sonntag, 21. Juni 2009
  • 5. OSGi on Scala Start Scala REPL with appropriate Classpath tmp$ scala -cp felix.jar:scalamodules-core-...jar:scalamodules-util-...jar Welcome to Scala version 2.7.5.final (Java HotSpot(TM) Client VM, Java 1.5.0_19). Type in expressions to have them evaluated. Type :help for more information. © 2009 WeigleWilczek. Released under the Creative Commons Attribution-Noncommercial-No Derivative Works 3.0 Germany License. 5 Sonntag, 21. Juni 2009
  • 6. OSGi on Scala Import Felix and ScalaModules scala> import org.apache.felix.framework._ import org.apache.felix.framework._ scala> import org.scalamodules.core.RichBundleContext._ import org.scalamodules.core.RichBundleContext._ © 2009 WeigleWilczek. Released under the Creative Commons Attribution-Noncommercial-No Derivative Works 3.0 Germany License. 6 Sonntag, 21. Juni 2009
  • 7. OSGi on Scala Start Felix and get BundleContext scala> val felix = new Felix(null) felix: org.apache.felix.framework.Felix = org.apache.felix.framework [0] scala> felix.start scala> val ctx = felix.getBundleContext ctx: org.osgi.framework.BundleContext = org...BundleContextImpl@d9367a © 2009 WeigleWilczek. Released under the Creative Commons Attribution-Noncommercial-No Derivative Works 3.0 Germany License. 7 Sonntag, 21. Juni 2009
  • 8. OSGi on Scala Define a Service Interface and Object scala> trait Greeting { def hello: String } defined trait Greeting scala> val greeting = new Greeting { def hello = "Hello!" } greeting: java.lang.Object with Greeting = $anon$1@8ed249 © 2009 WeigleWilczek. Released under the Creative Commons Attribution-Noncommercial-No Derivative Works 3.0 Germany License. 8 Sonntag, 21. Juni 2009
  • 9. OSGi on Scala Try to consume a Service scala> ctx getOne classOf[Greeting] andApply { _.hello } match { | case Some(s) => println(s) | case None => println("No Greeting service available!") | } No Greeting service available! © 2009 WeigleWilczek. Released under the Creative Commons Attribution-Noncommercial-No Derivative Works 3.0 Germany License. 9 Sonntag, 21. Juni 2009
  • 10. OSGi on Scala Try to provide a Service with illegal Interface scala> ctx registers classOf[String] theService greeting <console>:13: error: value registers is not a member of org.osgi.framework.BundleContext ctx registers classOf[String] theService greeting ^ © 2009 WeigleWilczek. Released under the Creative Commons Attribution-Noncommercial-No Derivative Works 3.0 Germany License. 10 Sonntag, 21. Juni 2009
  • 11. OSGi on Scala Provide a Service correctly scala> ctx registerAs classOf[Greeting] theService greeting res3: org.osgi.framework.ServiceRegistration = org...ServiceRegistrationImpl@ed63a3 © 2009 WeigleWilczek. Released under the Creative Commons Attribution-Noncommercial-No Derivative Works 3.0 Germany License. 11 Sonntag, 21. Juni 2009
  • 12. OSGi on Scala Try to consume a Service once more scala> ctx getOne classOf[Greeting] andApply { _.hello } match { | case Some(s) => println(s) | case None => println("No Greeting service available!") | } Hello! © 2009 WeigleWilczek. Released under the Creative Commons Attribution-Noncommercial-No Derivative Works 3.0 Germany License. 12 Sonntag, 21. Juni 2009
  • 13. OSGi on Scala What else can ScalaModules do? © 2009 WeigleWilczek. Released under the Creative Commons Attribution-Noncommercial-No Derivative Works 3.0 Germany License. 13 Sonntag, 21. Juni 2009
  • 14. OSGi on Scala Provide a Service with Properties context registerAs classOf[Greeting] withProperties ("name" -> "welcome") theService greeting © 2009 WeigleWilczek. Released under the Creative Commons Attribution-Noncommercial-No Derivative Works 3.0 Germany License. 14 Sonntag, 21. Juni 2009
  • 15. OSGi on Scala Consume multiple Service applying a Filter context getMany classOf[Greeting] withFilter "(name=*)" andApply { _.welcome } match { case None => noGreetingService() case Some(welcomes) => welcomes.foreach { println } } © 2009 WeigleWilczek. Released under the Creative Commons Attribution-Noncommercial-No Derivative Works 3.0 Germany License. 15 Sonntag, 21. Juni 2009
  • 16. OSGi on Scala Track Services context track classOf[Greeting] on { case Adding(greeting, _) => println("Adding Greeting: " + greeting.welcome) case Removed(greeting, _) => println("Removed Greeting: " + greeting.goodbye) } © 2009 WeigleWilczek. Released under the Creative Commons Attribution-Noncommercial-No Derivative Works 3.0 Germany License. 16 Sonntag, 21. Juni 2009
  • 17. OSGi on Scala Service Dependencies context registerAs classOf[Command] dependOn classOf[Greeting] theService { greeting => new Command { ... } } © 2009 WeigleWilczek. Released under the Creative Commons Attribution-Noncommercial-No Derivative Works 3.0 Germany License. 17 Sonntag, 21. Juni 2009
  • 18. OSGi on Scala And much more ... © 2009 WeigleWilczek. Released under the Creative Commons Attribution-Noncommercial-No Derivative Works 3.0 Germany License. 18 Sonntag, 21. Juni 2009
  • 19. OSGi on Scala How to get started? • www.scalamodules.org • Wiki / Getting Started • Reference Guide • Contact: seeberger@weiglewilczek.com © 2009 WeigleWilczek. Released under the Creative Commons Attribution-Noncommercial-No Derivative Works 3.0 Germany License. 19 Sonntag, 21. Juni 2009