バンドルを Scala でコーディングしてから OSGI コンテナーにデプロイするにはどうすればよいですか?
最初に「Java」にコンパイルしますか?それとも、scala を OSGI に直接デプロイして、何らかのバンドルを使用してそれを認識することができますか?
どんな指針も素晴らしいでしょう。現在、osgi コンテナーとして Apache Felix を使用していますが、一般的な概念を簡単に説明するだけで十分です。
バンドルを Scala でコーディングしてから OSGI コンテナーにデプロイするにはどうすればよいですか?
最初に「Java」にコンパイルしますか?それとも、scala を OSGI に直接デプロイして、何らかのバンドルを使用してそれを認識することができますか?
どんな指針も素晴らしいでしょう。現在、osgi コンテナーとして Apache Felix を使用していますが、一般的な概念を簡単に説明するだけで十分です。
答えてくれたみんなに感謝します、あなたは私を解決策に導きました! ここでは、より多くの読者のために、もう少し簡単な言葉で説明します。
目標: scala でコーディングし、OSGi にデプロイします。
使用ツール:
手順
Scala Project
Eclipse で新規作成します。プロジェクトを右クリックして次を選択し、プロジェクトを OSGi バンドルに変換します。Configure -> Convert to Plug-in Projects...
さて、次の部分は私が行き詰まった場所でした。ご覧のとおり、このバンドル (プロジェクト) を OSGi 環境にデプロイする必要があります。ただし、バンドルで使用するすべての Scala パッケージ API を提供するために OSGi コンテナーに含まれている必要がある Scala クラス (またはそれらのクラスを含むバンドル) がありません。残念ながら、「Scala バンドル」を見つけるのはそれほど簡単ではありません。調べてみると、何らかの理由で Scala バンドルが実際には Sonatype Maven Repository にあることがわかりました。
Sonatype Maven Repositoryscala-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 で記述できます (すごい!):
//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 from scala!" に注意してください。メッセージ。
Scala days 2010の著者による簡単な紹介ビデオ
OSGi は、コードをどの言語で記述したかを気にしません。JVM バイトコードは単なる JVM バイトコードです。そう:
バンドルが Scala ライブラリに依存していることに気付くでしょう。繰り返しますが、これは何もおかしなことではなく、Java コードに依存関係があるようなものです。これらの依存関係を解決するには、scala-lang-osgiから Scala ライブラリ バンドルをインストールする必要があります。
特別なことは何もありません。Scala でコードを記述し、Java で行う場合と同様に、必要なバンドル メタデータとサービス記述子を提供することにより、OSGi バンドルとしてラップします。
このプロセスでは、 Apache Mavenが役立ちます。実際の例については、Guggla プロジェクト(Scala スクリプト エンジン) を参照してください。pom.xmlのmaven-bundle-pluginは、バンドル メタ データの生成と最終的な jar ファイルへの組み込みを処理します。これは、提供する必要があるサービス記述子xml ファイルを参照します。