Pergunta

Eu estou tentando executar o Java Advanced Imaging (JAI) dentro de um contêiner OSGi (primavera-dm). Eu sou capaz de acessar as bibliotecas JAI, mas receber o seguinte erro quando eu chamo JAI pela primeira 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

As DLLs estão no classpath e referenciado como bibliotecas Bundle-NativeCode no meu manifesto. É possível executar as DLLs JAI nativas dentro OSGi? Se assim for, o que eu preciso fazer?

(EDIT: esclarecimentos)

Eu transferi a biblioteca do Windows JAI e extraído JARs e DLLs do pacote de download.

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

Solução

A declaração do bloco Bundle-NativeCode não parece certo. De acordo com a especificação OSGi (que eu recomendo que você baixar - é bem simples), todas as bibliotecas para uma única plataforma deve ser especificada na mesma cláusula, de modo que muda para:

Bundle-NativeCode: libs/mlib_jai_mmx.dll; libs/mlib_jai_util.dll; libs/mlib_jai.dll; 
 osname=WindowsXP; 
 processor=x86

Em geral eu não recomendo rolar seus próprios manifestos de pacote se você pode encontrá-los em outro lugar (este é bastante simples além da parte código nativo). Neste caso, eu encontrei-os 2 deles na Primavera repositório . Ele não inclui a parte do código nativo - provavelmente devido a problemas de licença

.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top