Spring OSGI -Klassenspath -Ressourcenproblem
Frage
Ich versuche, ein federbasiertes Bundle in OSGI (Fuse ESB) bereitzustellen. In einem Spring -Kontext beziehe ich mich auf eine DB4O -Datei, die sich im Ordner mit dem Ressourcen befindet. Nach meinem Verständnis stellt ein Maven -Projekt sicher, dass jede Datei, die im Ressourcenordner verfügbar ist, in Project ClassPath verfügbar sein wird. Ich habe die Datei unter Ressourcen/Meta-inf/fing/repo/test.db4o aufbewahrt.
Hier ist der Eintrag im Frühlingskontext.
<bean id="objectContainer" class="org.springmodules.db4o.ObjectContainerFactoryBean">
<property name="databaseFile" value="classpath:META-INF/spring/repo/test.db4o" />
</bean>
Sobald ich installiert und versuche, die Anwendung zu starten, erhalte ich die folgende Ausnahme.
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
Ich habe verschiedene Kombinationen ausprobiert, aber OSGI scheint diese Datei nicht zu erkennen. Jeder Zeiger wird geschätzt.
-Vielen Dank
Lösung
Ich fand das Problem schließlich. ObjectContainerFactoryBean stützt sich auf OsgireSourcebundle, um die Ressource als Dateiobjekt zu laden. Obwohl OsgireSourcebundle eine Methode namens GetFile () enthüllt, funktioniert sie nicht wie in einer OSGI -Umgebung beabsichtigt. Es wird immer ein Dateiprotokoll erwartet, während die als URI zurückgegebene Ressource ein Protokoll "Bündel" hat. Daher wird die Ausnahme ausgelöst. Die Problemumgehung besteht darin, einen Inputstream oder Geturl zu verwenden. Da ich nicht den Quellcode von ObjectContainerFactoryBean hatte, musste ich diese Klasse erweitern, um meine eigene Implementierung bereitzustellen, die die Datei als Eingabestream lädt.