質問

OSGI(Fuse ESB)にスプリングベースのバンドルを展開しようとしています。Springコンテキストでは、リソースフォルダー内のDB4Oファイルを参照しています。私の理解によると、Mavenプロジェクトは、Resourcesフォルダーの下で利用可能なファイルがProject ClassPathで利用可能になることを確認します。ファイルはリソース/メタ-INF/spring/repo/test.db4oの下に保持しています。

これが春のコンテキストのエントリです。


<bean id="objectContainer" class="org.springmodules.db4o.ObjectContainerFactoryBean">
    <property name="databaseFile" value="classpath:META-INF/spring/repo/test.db4o" />
</bean>

インストールしてアプリケーションを起動しようとすると、次の例外が得られます。


java.io.FileNotFoundException: OSGi resource[classpath:META-INF/spring/repo/test.db4o|bnd.id=258|bnd.sym=taxonomydaoimplbundle] cannot be resolved to absolute file path because it does not reside in the file system: bundle://258.0:1/META-INF/spring/repo/test.db4o

私はさまざまな組み合わせを試しましたが、OSGIはこのファイルを認識していないようです。ポインターは大歓迎です。

-ありがとう

役に立ちましたか?

解決

私は最終的に問題を見つけました。 ObjectContainerFactoryBeanは、OsgiresourceBundleに依存して、リソースをファイルオブジェクトとしてロードしています。 osgiresourcebundleはgetFile()と呼ばれるメソッドを公開していますが、OSGI環境で意図されているようには機能しません。 URIがプロトコル「バンドル」を持っているために返されるリソースは常にファイルプロトコルを期待します。したがって、例外はスローされています。回避策は、inputstreamまたはgetUrlを使用することです。 ObjectContainerFactoryBeanのソースコードを持っていなかったため、ファイルを入力ストリームとしてロードする独自の実装を提供するために、このクラスを拡張する必要がありました。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top