追加したユーザーは T.Yamamoto です。最後に編集したユーザーは T.Yamamotoで、その日時は 2009-12-23 20:06:13 です。

GroovyでOSGiサービスを書く

Groovy jarさえコンテナにロードしてしまえば、GroovyでOSGiサービスを書くのは簡単で、フレームワークに含まれているBundleActivatorクラスのサブクラスを作るだけです。(訳注:BundleActivatorは実際にはinterfaceなのでそれを実装する、という意味です)

package org.codehaus.groovy.osgi

import org.osgi.framework.BundleActivator import org.osgi.framework.BundleContext

class 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> ss

Framework 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

osgi> install file:///home/user/dev/groovy-core/src/examples/osgi/build/hello-bundle-imports-groovy.jar Bundle id is 12

osgi> ss

Framework 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.0

osgi> start 12 Groovy BundleActivator started

osgi> stop 12 Groovy BundleActivator stopped

start/stop時のメッセージから、Groovyサービスが正しく起動され、そして停止されたことがわかります。

子ページ 追加

©2008-2009 grails.jp