1

我正在尝试在 osgi (fuse esb) 中部署基于 spring 的包。在 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 返回的资源有一个协议“包”。因此,抛出异常。解决方法是使用输入流或 getUrl。因为我没有 ObjectContainerFactoryBean 的源代码,所以我不得不扩展这个类来提供我自己的实现,它将文件作为输入流加载。

于 2011-06-16T23:10:23.940 回答