2011-06-12 6 views
1

osgi (fuse esb)에 스프링 기반 번들을 배포하려고합니다. 스프링 컨텍스트에서 리소스 폴더 안에있는 db4o 파일을 참조하고 있습니다. 내 이해에 따라, maven 프로젝트는 resources 폴더 아래에있는 파일을 프로젝트 클래스 경로에서 사용할 수 있는지 확인합니다. 파일을 resources/META-INF/spring/repo/test.db4o 아래에 보관했습니다.스프링 OSGi 클래스 경로 리소스 문제

다음은 봄 문맥의 항목입니다.


<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가이 파일을 인식하지 못하는 것 같습니다. 어떤 포인터도 감사 할 것입니다.

-Thanks

+0

'test.db4o' 파일을 번들로 제공합니까? 그것들을 같은 묶음에 넣어야합니다. –

+0

동일한 번들에 있습니다. – Shamik

+0

'classpath :/META-INF/spring/repo/test.db4o' (슬래시로 시작하는 경로) – FrVaBe

답변

0

마지막으로 문제가 발견되었습니다. ObjectContainerFactoryBean은 리소스를 파일 객체로로드하기 위해 OSGiResourceBundle을 사용합니다. OSGiResourceBundle은 getFile()이라는 메서드를 공개하지만 OSGi 환경에서 의도 한대로 작동하지 않습니다. URI로 리턴 된 자원은 프로토콜 "bundle".Hence를 가지지 만 항상 파일 프로토콜을 기대합니다. 예외가 발생합니다. 해결 방법은 inputstream 또는 getUrl을 사용하는 것입니다. ObjectContainerFactoryBean 소스 코드가 없으므로이 클래스를 확장하여 입력 스트림으로 파일을로드하는 자체 구현을 제공해야했습니다.