追加したユーザーは T.Yamamoto です。最後に編集したユーザーは T.Yamamotoで、その日時は 2009-12-23 20:06:13 です。
GroovyでOSGiサービスを書く
Groovy jarさえコンテナにロードしてしまえば、GroovyでOSGiサービスを書くのは簡単で、フレームワークに含まれているBundleActivatorクラスのサブクラスを作るだけです。(訳注:BundleActivatorは実際にはinterfaceなのでそれを実装する、という意味です)
package org.codehaus.groovy.osgiimport org.osgi.framework.BundleActivator
import org.osgi.framework.BundleContextclass Activator implements BundleActivator { void start(BundleContext context) {
println "Groovy BundleActivator started"
} void stop(BundleContext context) {
println "Groovy BundleActivator stopped"
}
}コンテナがサービスを起動するとき、Activatorのstart(BundleContext)メソッドが呼び出され、コンテナがサービスを停止するとき、stop(BundleContext)メソッドが呼び出されます。
新しいGroovyサービスをデプロイ(配備)するための最初のステップは、Activatorを含んだjarファイルを作ることです。Jarのmanifestでは、新しいサービスの名前、バージョン、Activatorへの完全修飾パス名、groovy-all jarバンドルからインポートするパッケージなどを指定する必要があります。この例での完全なmanifestは次のようになります:
Manifest-Version: 1.0
Ant-Version: Apache Ant 1.7.0
Created-By: 10.0-b19 (Sun Microsystems Inc.)
Built-By: user
provider: org.codehaus.groovy.osgi
Bundle-ManifestVersion: 2
Bundle-Name: Groovy OSGi Example Bundle
Bundle-SymbolicName: org.codehaus.groovy.osgi.hello-groovy-bundle
Bundle-Version: 1.0.0
Bundle-Activator: org.codehaus.groovy.osgi.Activator
Bundle-Vendor: Groovy
Bundle-Localization: plugin
Import-Package: groovy.lang;version="1.7.0.beta-1-SNAPSHOT",org.codeha
us.groovy.reflection;version="1.7.0.beta-1-SNAPSHOT",org.codehaus.gro
ovy.runtime;version="1.7.0.beta-1-SNAPSHOT",org.codehaus.groovy.runti
me.callsite;version="1.7.0.beta-1-SNAPSHOT",org.w3c.dom,org.osgi.fram
ework;version="1.3.0"
Bundle-ClassPath: .
Import-Package文は重要です。ここでは、参照することが許される、Groovy-all jarからのすべての依存性が示されます。Groovy-all Jarは、ここに示されたものより、もっとずっと多くのパッケージをエクスポートしています。ここでのImport-Package定義は、printlnが正しく動作するために最低限必要な依存性のみが示されています。もっと実際的なActivatorでは、もっと多くのパッケージをインポートすることになるでしょう。
この例での完全なJarは次のようなレイアウトになります:
hello-bundle-imports-groovy.jar
--META-INF
----MANIFEST.MF
--org
----codehaus
------groovy
--------osgi
----------Activator.class
OSGiコンソールを実行し、以下の一連のコマンドを発行して、この新しいHello-Groovyバンドルをテストしてみましょう。"ss"を使って、正しい依存関係が事前にロードされることを確認します。
osgi> ssFramework is launched.id State Bundle
0 ACTIVE org.eclipse.osgi_3.4.0.v20080605-1900
10 ACTIVE groovy-all_1.7.0.beta-1-SNAPSHOTosgi> install file:///home/user/dev/groovy-core/src/examples/osgi/build/hello-bundle-imports-groovy.jar
Bundle id is 12osgi> ssFramework is launched.id State Bundle
0 ACTIVE org.eclipse.osgi_3.4.0.v20080605-1900
10 ACTIVE groovy-all_1.7.0.beta-1-SNAPSHOT
12 INSTALLED org.codehaus.groovy.osgi.hello-groovy-bundle_1.0.0osgi> start 12
Groovy BundleActivator startedosgi> stop 12
Groovy BundleActivator stopped
start/stop時のメッセージから、Groovyサービスが正しく起動され、そして停止されたことがわかります。