バンドルをScalaでコーディングしてから、OSGIコンテナーにデプロイするにはどうすればよいですか?
最初にそれを「Java」にコンパイルしますか、それともscalaをOSGIに直接デプロイし、何らかのバンドルを使用してそれを認識することができますか?
どんなポインタも素晴らしいでしょう。現在、osgiコンテナとしてApache Felixを使用していますが、一般的な概念を簡単に説明するだけで開始できます。
答えてくれたみんなに感謝します、あなたは私を解決策に導きました!ここでは、より多くの読者のために、もう少し簡単な言葉で説明します。
Goal:scalaでコードを記述し、OSGiにデプロイします。
使用したツール:
手順
Scala Project
を作成します。プロジェクトを右クリックして次を選択し、プロジェクトをOSGiバンドルに変換します。Configure -> Convert to Plug-in Projects...
さて、次の部分は私が行き詰まったところです。ご覧のとおり、このバンドル(プロジェクト)をOSGi環境にデプロイする必要があります。ただし、使用するすべてのScalaパッケージAPIを提供するためにOSGiコンテナーに含まれている必要があるScalaクラス(またはそれらのクラスを含むバンドル))がありません。残念ながら、「Scalaバンドル」を見つけるのはそれほど簡単ではありません。 見回す 後、何らかの理由でScalaバンドルは実際には Sonatype Mavenリポジトリ 。
Sonatype Mavenリポジトリ の適切な場所からscala-library-2.9.1.jar
をダウンロードし、OSGiコンテナーに(最も快適な方法で)デプロイします。
マニフェストファイルを調整して、Scalaバンドル()が必要になるようにします。これは、バンドルの依存関係(つまり、Require-Bundle)が実際にかなり安全な場所の1つであると確信しています。すべて、Scalaなしで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"
これで、バンドルアクティベーターを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){}
}
プロジェクトをバンドルとしてOSGiコンテナーにデプロイし、「Hello world fromscala!」を探します。メッセージ。
著者による簡単な紹介ビデオはこちら Scala days 201
OSGiは、コードをどの言語で記述してもかまいません。JVMバイトコードは単なるJVMバイトコードです。そう:
バンドルがScalaライブラリに依存していることに気付くでしょう。これについても奇妙なことは何もありません。これは、Javaコードに依存しているのと同じです。これらの依存関係を解決するには、Scalaライブラリバンドルを scala-lang-osgi からインストールする必要があります。
特別なことは何もありません。コードをScalaで記述し、Javaの場合と同じように、必要なバンドルメタデータとサービス記述子を提供してOSGiバンドルとしてラップします。
Apache Maven プロセスを支援できます。実用的な例については、 Guggla Project (a Scalaスクリプトエンジン))をご覧ください。 maven-bundle-plugin の- pom.xml は、バンドルメタデータの生成と最終的なjarファイルへの組み込みを処理します。これは、提供する必要のある サービス記述子 xmlファイルを参照します。