Pregunta
Estoy tratando de ejecutar Java Advanced Imaging (JAI) dentro de un contenedor OSGi (primavera-dm). Soy capaz de acceder a las bibliotecas JAI, pero recibir el siguiente error cuando llamo JAI por primera vez:
Error: Could not load mediaLib accelerator wrapper classes. Continuing in pure Java mode. Occurs in: com.sun.media.jai.mlib.MediaLibAccessor com.sun.media.jai.mlib.MediaLibLoadException
Los archivos DLL se encuentran en la ruta de clase y se hace referencia como bibliotecas Bundle-NativeCode en mi manifiesto. ¿Es posible ejecutar los archivos DLL JAI nativas en OSGi? Si es así, ¿qué tengo que hacer?
(edit: aclaraciones)
He descargado la biblioteca de Windows JAI y extrajeron los frascos y las DLL del paquete de descarga.
Mainfest:
Manifest-Version: 1.0 Bundle-Name: Java Advanced Imaging Bundle-SymbolicName: javax.media.jai Bundle-Version: 1.1.3 Bundle-ClassPath: libs/, jai_codec.jar, jai_core.jar, mlibwrapper_jai.jar Bundle-RequiredExecutionEnvironment: JavaSE-1.6 Bundle-NativeCode: libs/mlib_jai_mmx.dll; osname=WindowsXP; processor=x86, libs/mlib_jai_util.dll; osname=WindowsXP; processor=x86, libs/mlib_jai.dll; osname=WindowsXP; processor=x86 Export-Package:
Solución
La declaración del bloque Bundle-NativeCode
no se ve bien. De acuerdo con la especificación OSGi (que recomiendo encarecidamente que descargue - es bastante recta hacia adelante), todas las bibliotecas para una sola plataforma debe especificarse en la misma cláusula, por lo que cambia a:
Bundle-NativeCode: libs/mlib_jai_mmx.dll; libs/mlib_jai_util.dll; libs/mlib_jai.dll;
osname=WindowsXP;
processor=x86
En general no recomiendan rodar su propio paquete se manifiesta si se puede encontrar en otro lugar (éste es bastante sencilla, además de la parte de código nativo). En este caso, los encontré 2 de ellos en la primavera repositorio . No incluye la parte de código nativo. - probablemente debido a problemas de licencia