1

Spring ベースのバンドルを osgi (fuse esb) にデプロイしようとしています。Spring のコンテキストでは、リソース フォルダー内にある db4o ファイルを参照しています。私の理解によると、maven プロジェクトは、リソース フォルダーの下で利用可能なファイルがプロジェクトのクラスパスで利用できるようにします。resources/META-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 はこのファイルを認識しないようです。任意のポインタをいただければ幸いです。

-ありがとう

4

1 に答える 1

0

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

于 2011-06-16T23:10:23.940 に答える