2011-06-12 4 views
1

J'essaye de déployer un paquet basé sur le ressort dans osgi (fusible esb). Dans le contexte de ressort, je me rapporte à un dossier de db4o qui est dans le dossier de ressources. Selon ma compréhension, un projet maven s'assurera que tout fichier disponible sous le dossier des ressources sera disponible dans le classpath du projet. J'ai gardé le fichier sous ressources/META-INF/spring/repo/test.db4o.Ressort OSGi classpath resource issue

Voici l'entrée au printemps.


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

Une fois que j'installe et essaie de démarrer l'application, j'obtiens l'exception suivante.


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 

J'ai essayé différentes combinaisons, mais OSGi ne semble pas reconnaître ce fichier. Tout pointeur sera apprécié.

-Merci

+0

dans quel paquet se trouve le fichier 'test.db4o'? vous devez les mettre dans le même paquet. –

+0

C'est dans le même paquet. – Shamik

+0

Avez-vous essayé 'classpath:/META-INF/printemps/repo/test.db4o' (chemin commençant par une barre oblique) – FrVaBe

Répondre

0

J'ai finalement trouvé le problème. ObjectContainerFactoryBean s'appuie sur OSGiResourceBundle pour charger la ressource en tant qu'objet fichier. Bien que OSGiResourceBundle expose une méthode appelée getFile(), elle ne fonctionne pas comme prévu dans un environnement OSGi. Il attend toujours un protocole de fichier alors que la ressource retournée en URI possède un protocole "bundle". Donc, l'exception est levée. La solution de contournement consiste à utiliser un inputstream ou getUrl. Comme je n'avais pas le code source de ObjectContainerFactoryBean, j'ai dû étendre cette classe pour fournir ma propre implémentation qui charge le fichier en entrée.