37 votes

Scala dans le conteneur OSGI?

Comment coder mon bundle dans Scala puis le déployer dans un conteneur OSGI?

Dois-je d'abord le compiler en "java" ou puis-je déployer scala directement dans OSGI et utiliser une sorte de paquet pour le reconnaître?

Tous les indicateurs seraient formidables. Actuellement, j'utilise Apache Felix comme conteneur osgi, mais une simple explication de concepts génériques suffirait pour me lancer.

34voto

drozzy Points 7887

Merci à tous pour les réponses, vous m'a conduit à la solution! Je vais décrire ici dans un peu d'termes plus simples, pour un public plus large.

Objectif: Code scala, déployer pour OSGi.

Outils utilisés:

  1. Equinox OSGi mise en œuvre
  2. Eclipse Helios 3.6,
  3. Scala 2.9

Procédure

  1. Installer Scala IDE pour Eclipse. Trouver la version qui fonctionnera avec la Scala de 2,9 et Eclipse 3.6
  2. Créer de nouveaux Scala Project dans Eclipse.
  3. Convertir le projet de bundle OSGi par un clic droit dessus et en sélectionnant: Configure -> Convert to Plug-in Projects...

    Maintenant, la partie suivante est la où je me suis coincé. Vous voyez, maintenant, nous devons déployer ce bundle (notre projet) à OSGi environnement. Cependant il nous manque la Scala classes (ou bundle qui contient les classes) qui doivent être dans le conteneur OSGi pour vous fournir toutes les Scala paquets API que nous utilisons dans notre bundle. Malheureusement, trouver la "Scala bundle" est pas facile. Après en regardant autour , il s'avère que, pour une raison quelconque, Scala bundle est en fait situé dans la Sonatype Repository Maven.

  4. Télécharger l' scala-library-2.9.1.jar à partir de l'emplacement approprié dans le Sonatype Repository Maven, et de déployer (par le moyen le plus confortable pour vous) à votre conteneur OSGi.

  5. Ajuster votre fichier manifeste pour exiger la Scala bundle (je suis assez sûr que c'est un endroit où le faisceau de dépendance (c'est à dire require-Bundle) est en fait assez en sécurité - après tout, vous ne manquerez jamais votre Scala code sans Scala!):

    Manifest-Version: 1.0
    Bundle-ManifestVersion: 2
    Bundle-Name: Scala Hello
    Bundle-SymbolicName: com.test.scala.hello
    Bundle-Version: 1.0.0.qualifier
    Bundle-Vendor: drozzy
    Import-Package: org.osgi.framework;version="1.5.0"
    Bundle-Activator: com.test.scala.hello.Activator
    Require-Bundle: scala-library;bundle-version="2.9.1"
    
  6. Maintenant, vous pouvez écrire votre faisceau de l'activateur Scala (wooho!):

    //Activator.scala
    package com.test.scala.hello
    import java.lang.System
    import org.osgi.framework.BundleActivator
    import org.osgi.framework.BundleContext
    
    class Activator extends BundleActivator {
      def start(context: BundleContext) {
          System.out.println("Hello world from scala!");
      }
      def stop(context: BundleContext){}
    }
    
  7. Déployer votre projet comme un faisceau de conteneur OSGi et regarder dehors pour le "Bonjour tout le monde, de la scala!" message.

14voto

Johan Prinsloo Points 1077

ScalaModules

Une vidéo d'introduction rapide de l'auteur ici Scala days 2010

8voto

Neil Bartlett Points 12330

OSGi ne se soucient pas quelle langue vous écrivez votre code dans: bytecode JVM est juste bytecode JVM. Donc:

  • compiler avec Scala
  • envelopper les classes résultantes dans un bundle avec bnd (comme vous le feriez pour le code compilé à partir des sources Java).
  • déployer le bundle pour OSGi, comme vous le feriez pour un "normal" bundle (parce que c' est normal bundle).

Vous remarquerez que votre bundle a des dépendances sur la Scala de la bibliothèque. De nouveau, il n'y a rien d'étrange à ce sujet, c'est comme avoir des dépendances dans vous code Java. Pour que ces dépendances pour résoudre ce problème, vous devez installer la Scala bibliothèque bundle de scala-lang-osgi

5voto

michid Points 3526

Il n'y a rien de special: écriture de votre code de Scala et de l'envelopper comme un bundle OSGi en fournissant les bundle méta-données et le service des descripteurs comme vous le feriez avec Java.

Apache Maven peut vous aider dans le processus. Jetez un oeil à la Guggla Projet (un Scala moteur de script) pour un exemple. Le maven-bundle de plug-ins dans le pom.xml prend soin de générer et y compris le paquet de méta-données dans le dernier fichier jar. Il désigne le service de descripteur de fichier xml que vous devez fournir.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X