scala osgi equinox apache-felix

Scala en contenedor OSGI?



equinox apache-felix (4)

A OSGi no le importa en qué idioma escribe su código: el bytecode de JVM es solo bytecode de JVM. Asi que:

  • compilar con Scala
  • envuelva las clases resultantes en un paquete usando bnd (tal como lo haría con el código compilado a partir de fuentes Java).
  • despliega el paquete en OSGi, tal como lo harías con un paquete "normal" (porque es un paquete normal).

Notará que su paquete tiene dependencias en la biblioteca de Scala. De nuevo, no hay nada de extraño en esto, es como tener dependencias en tu código Java. Para que esas dependencias se resuelvan, debe instalar el paquete de la biblioteca Scala de scala-lang-osgi

¿Cómo puedo codificar mi paquete en Scala y luego implementarlo en un contenedor OSGI?

¿Lo compilo primero en "java" o puedo implementar scala directamente en OSGI y usar algún tipo de paquetes para reconocerlo?

Cualquier punto sería genial. Actualmente estoy usando Apache Felix como mi contenedor de osgi, pero una simple explicación de conceptos genéricos sería suficiente para comenzar.


No tiene nada de especial: escriba su código en Scala y envuélvalo como un paquete OSGi proporcionando los metadatos de paquetes necesarios y los descriptores de servicio como lo haría con Java.

Apache Maven puede ayudarte en el proceso. Eche un vistazo al Proyecto Guggla (un motor de scripts de Scala) para un ejemplo de trabajo. El maven-bundle-plugin en el pom.xml se encarga de generar e incluir los metadatos del paquete en el archivo jar final. Se refiere al archivo xml del descriptor de servicio que debe proporcionar.



Gracias a todos por las respuestas, ¡me condujeron a la solución! Lo describiré aquí en términos un poco más simples para una audiencia más amplia.

Objetivo : codificar en scala, implementar en OSGi.

Herramientas utilizadas:

  1. Implementación de Equinox OSGi
  2. Eclipse Helios 3.6,
  3. Scala 2.9

Procedimiento

  1. Instale Scala IDE para Eclipse. Encuentra la versión que funcionará con Scala 2.9 y Eclipse 3.6
  2. Crear un nuevo Scala Project en Eclipse.
  3. Convierta el proyecto en paquete OSGi haciendo clic derecho sobre él y seleccionando: Configure -> Convert to Plug-in Projects...

    Ahora, la siguiente parte fue donde me quedé atrapado. Ya ves, ahora tenemos que implementar este paquete (nuestro proyecto) en el entorno OSGi. Sin embargo, nos faltan las clases de Scala (o paquete que contiene esas clases) que tienen que estar en el contenedor OSGi para proporcionar todos los paquetes de Scala API que usamos en nuestro paquete. Desafortunadamente, encontrar el "paquete de Scala" no es tan fácil. Después de mirar alrededor , resulta que, por alguna razón, el paquete Scala realmente se encuentra en el Repositorio Sonatype Maven .

  4. Descargue scala-library-2.9.1.jar desde la ubicación adecuada en Sonatype Maven Repository , e impleméntelo (de la manera más cómoda para usted) en su contenedor OSGi.

  5. Ajuste su archivo de manifiesto para requerir el paquete Scala ( estoy bastante seguro de que este es un lugar donde la dependencia del paquete (es decir, Require-Bundle) es bastante segura, después de todo, ¡nunca ejecutará su código Scala sin 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. Ahora puede escribir el activador de su paquete en 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. Implementa tu proyecto como un paquete al contenedor OSGi y busca el "¡Hola, mundo desde Scala!" mensaje.