2

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-BlueprintSpring-Contextマニフェスト ヘッダーの両方を に設定しようとしましたがmanifest.mf、それらは にコピーされますMANIFEST.MFが、新しいImport-Package値は追加されません。

たとえば、<int:gateway .../>ブループリント コンテキストに を追加すると、Bundlor がGatewayProxyFactoryBean上記のようなランタイム依存関係を正しく判断できるようになると期待されますか?

Bundlor が正しいImport-Package値を決定できない場合、これらの「内部」パッケージ要件をどのように管理しますか? サードパーティのライブラリに含まれる可能性のあるすべてのパッケージをリストする必要があるのは、不合理だと思います。Import-LibrarySpring 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 -青写真サービス用/

4

1 に答える 1

1

考えられる解決策で私自身の質問に答えます。

DynamicImport-Package: org.springframework.*

これはちょっとしたハックですが、機能します

于 2012-02-03T10:11:18.100 に答える