2012-12-04 13 views
9

Spring構成とOSGi Blueprint(Gemini Blueprintなど)の組み合わせに関する良い/ベストプラクティスはありますか?どのXMLファイルを使用しますか? OSGiバンドル(META-INF/springOSGi-INF)にはどこに入れていますか?これらのプラクティスのどれを使って、あなたのバンドルを、ジェミニ以外ではない設計と組み合わせて再利用することができますか?OSGiの設計図とバネ構成の組み合わせ

背景:Spring/Spring DMからSpring/Blueprintに切り替えるプロセスが進行中です。私は<bean>要素を定義する青写真を知っています。しかし、Blueprint仕様の限定されたBean定義機能が私たちのすべてのニーズを満たしていないという状況に直面することがあります。だから、OSGiサービス経由でバンドルを配線するためにバンドルとBlueprintの中でSpringの設定を使うのは良い選択です。

答えて

5

Blueprintファイルは、OSGI-INF/blueprint /の下に置かれ、* .xml(通常はblueprint.xml)という名前が付けられます。この場所はOSGi 4.2 Blueprint仕様に準拠しており、AriesやGeminiで動作します。

春DMファイル(あなたはおそらく知っているように)META-INF /春の下に行く/とも名付けられている* .xmlファイル(通常はbeans.xmlの)

どちらのファイルが共存する平和的にできるはずです。ただし、インストールされている各コンテナのサポートがある場合にのみ動作します。

OSGiサービスレジストリを使用して配線する必要があります。

マイグレーションに関しては、Blu-Printで実行できなかった機能のためにSpring-DMにとどまっています。他のすべてはBlueprintに移行されています。

+0

JBoss Fuseでは動作しないと思います。 Aries OSGi xmlでインポートされたサービスは、Spring DM xmlでは認識できません。 – sancho21

+0

同じバンドルからサービスを公開して使用することはできないと思います。これは青写真/春の相互運用性の問題ではありません。同様の問題は、春や単なる青写真でも起こります。 – mjmeno

10

どのXMLファイルを使用しますか? OSGiバンドルにはどこに入れますか (META-INF/spring、OSGi-INF)?これらのプラクティスで、 は、Gemini以外の実装である のBlueprintと組み合わせてバンドルを再利用できますか?

ジェミニ青写真が均等にこれらのディレクトリの両方を扱いますが、OSGI-INF/blueprint/*.xmlは、一般的なOSGiの青写真仕様で指定された唯一のものです。

Aはthe Gemini Blueprint documentationから練習を示唆している:

[...] は練習コンベンションモジュール名-のcontext.xml によって名付けられ、少なくとも2つのファイルにアプリケーションコンテキストのコンフィギュレーション を分割することです提案modulename-osgi-context.xmlがあります。 modulename-context.xmlファイル には、 OSGiの知識とは関係なく、通常のBean定義が含まれています。 modulename-osgi-context.xmlファイルには、OSGiサービスをインポートおよびエクスポートするためのBean の定義が含まれています。 Gemini Blueprint OSGiスキーマを、Spring 'beans'名前空間の代わりにトップレベルの 名前空間として使用することもできます(ただし、これは必須ではありません)。( )

私はこれを試して、うまくいきます。私は自分のプロジェクトの1つにGemini Blueprintを使用しています。私の豆とその関係を定義するファイルMETA-INF/spring/context.xmlと、OSGiサービスとしてどのBeanを公開/インポートするかを定義するMETA-INF/spring/osgi-context.xmlがあります。context.xml

<beans xmlns="http://www.springframework.org/schema/beans" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd"> 
    <bean id="myOrdinarySpringBean" class="com.acme.impl.Foo"/> 
</beans> 

のように見え、まったく青写真/ OSGiの構成との定期的な普通のSpringアプリケーションコンテキストです。それを動作させるための<osgi:service .../>:あなたは、もちろん、ここにも<beans>名前空間とルート要素を使用することができますが、あなたはそうのようなサービスをxmlns:osgiを定義し、接頭辞する必要があると思います

<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"> 
    <service id="myOsgiService" ref="myOrdinarySpringBean" interface="com.acme.Foo"/> 
</blueprint> 

よう osgi-context.xmlが見えます。私の場合、ジェミニ独自の青写真のものは必要ないので、この青写真の一般的な設定に満足しています。同様に、私は <blueprint>ネームスペースを context.xmlにも使用できますが、この特定のアプリケーションは古いものでOSGiに移植されています。

順番に別のアプリケーションが

<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"> 
    <reference id="myOrdinarySpringBeanImportedFromOsgi" interface="com.acme.Foo" availability="mandatory"/> 
</blueprint> 

ようosgi-context.xml独自のを持っており、この時点ではない、しかし、独自のcontext.xml

<beans xmlns="http://www.springframework.org/schema/beans" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd"> 
    <bean id="myOrdinaryOtherSpringBean" class="com.acme.impl.Bar"> 
     <property name="foo" ref="myOrdinarySpringBeanImportedFromOsgi"/> 
    </bean> 
</beans> 

などを持っている可能性があり、実際にはあまり気にしませんでした myOrdinarySpringBeanImportedFromOsgiがOSGiサービスからインポートされるか、同じアプリケーションコンテキスト内の通常の通常のSpring Beanとして定義されます。

私は双子座の青写真の実装から自分を切り離すにしたい場合は、これらのMETA-INF/osgi-context.xml構成は自明OSGI-INF/blueprint/に移動することができますが、時間のために、私は、ディレクトリ構造の混乱を避けるために、同じ場所で二つの半分を維持することを好むされています。

関連する問題