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:
¿Fue útil?

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top