OSGi バンドルとしてパッケージ化されたサービス実装で Spring と Spring Integration を使用しています。このサービスは Blueprint、より具体的には Gemini Blueprint によって公開されます [ http://www.springframework.org/schema/osgi
]
<bean id="myService" class="org.example.mti.MyServiceImplementation"/>
<osgi:service ref="myService" interface="org.example.mti.api.MyService"/>
コンテキストファイルは次の場所にありますMETA-INF/spring/applicationContext*.xml
これは、実装のためにライブラリに依存しないメモリ バックアップ DAO などの一部のスタブ サービスではうまく機能します。サービスは登録され、別のバンドルで実行できます。
私が Spring Integration を使用している、より複雑なサービスの場合、サービスの実装には明らかに、通常の Spring ライブラリ バンドルによってエクスポートされる Spring クラスへのアクセスが必要です。
Bundlor を使用してMANIFEST.MF
ファイルを管理しています。Spring Bundlor 1.0.0.RELEASE と Eclipse Virgo Bundlor 1.1.0.M3 を試しました。
私の理解では、Bundlor はブループリント コンテキスト ファイルをスキャンして必要なクラスを決定できるようになっていると理解していますが、Import-Package
マニフェスト ヘッダーに追加された非常に有用なものは見当たりません。
Import-Package:
org.example.dao,
org.example.domain,
org.example.mti.api,
javax.inject,
org.springframework.integration,
org.springframework.integration.annotation,
org.springframework.integration.support
Pax Exam を使用してバンドルを実行しようとすると、Felix で ClassNotFoundException が表示されます
java.lang.ClassNotFoundException:
org.springframework.integration.gateway.GatewayProxyFactoryBean
Bundle-Blueprint
とSpring-Context
マニフェスト ヘッダーの両方を に設定しようとしましたがmanifest.mf
、それらは にコピーされますMANIFEST.MF
が、新しいImport-Package
値は追加されません。
たとえば、<int:gateway .../>
ブループリント コンテキストに を追加すると、Bundlor がGatewayProxyFactoryBean
上記のようなランタイム依存関係を正しく判断できるようになると期待されますか?
Bundlor が正しいImport-Package
値を決定できない場合、これらの「内部」パッケージ要件をどのように管理しますか? サードパーティのライブラリに含まれる可能性のあるすべてのパッケージをリストする必要があるのは、不合理だと思います。Import-Library
Spring DM から漠然と思い出すものに相当するものはありますか?
参考文献:
http://static.springsource.org/s2-bundlor/1.0.x/user-guide/htmlsingle/user-guide.html http://blog.springsource.org/2009/09/26/bundlor-adds-support -青写真サービス用/