我有一个我从遗留的Web应用程序创建的war osgi包。我遇到的问题是,在spring配置中有对类路径上的文件的引用(见下文),这些文件在将遗留战争部署到tomcat时很好,因为它们可以在thr文件系统上找到。但是,由于osgi没有文件系统的概念,因此无法找到这些文件,并且我得到一个未找到文件的异常。任何人都可以打电话给我,如果我可以继续以这种或类似的方式加载classpth资源。或者我必须使用org.springframework.osgi.io.OsgiBundleResource以编程方式加载它们。
<bean id="manager" class="com.xyz.abc.Manager" depends-on="workflowCache">
<property name="configuration" value="classpath:com/xyz/abc/resource/workflow.xml"/>
</bean>
提前致谢。
答案 0 :(得分:1)
这里的问题几乎肯定不是OSGi没有文件系统的概念,而是文件不再在类路径上了。
我假设当war在正常的tomcat中运行时,您引用的workflow.xml位于文件系统上,可通过tomcat类路径访问。 WAR的类加载器委托给父类加载器,后者能够访问workflow.xml文件。
在OSGi中,您的类路径由Bundle-Classpath和任何包导入或包要求定义。显然,无法通过任何这些机制访问此workflow.xml文件。
有几个选择:
这些都是一些(很多)hacky,所以你可能希望看一下加载这个文件的不同方式。我不熟悉OsgiBundleResource。
如果您在OSGi中运行,您可能希望查看基于Spring DM的Blueprint Container规范。我知道有两个实现,Apache Aries和Eclipse Gemini。
答案 1 :(得分:1)
伙计们,我遇到了类似的问题。所以我尝试了这个(更改了classpath - &gt;文件)
虽然它似乎不是一个合乎逻辑的原因,但它有效,因为该文件位于类路径上,而且equinox无法使用classpath找到它:但确实使用file找到了该文件:
直到找到任何合理的理由,如果有效,我们可以继续使用它。