Problema com biblioteca nativa

Estou usando duas bibliotecas nativas (.so) em um aplicação web, mas está ocorrendo um erro. Eu coloquei as bibliotecas em diretamente dentro da jre e quando executo a aplicação acontece o seguinte erro?

java.lang.UnsatisfiedLinkError: Native Library /usr/local/java/SUNWappserver/jdk/jre/lib/i386/client/libjLibSiTef.so already loaded in another classloader

O fato de estar em local comum a todas as aplicações pode estar levando a esse problema?

carregue ela no mesmo classloader

Na verdade eu não estou carregando diretamente. Quem produziu a biblioteca me passou um jar com classes que abstraem isso. Além disso a aplicação é WEB. Tem como eu carregar em um mesmo classloader? Como eu faria isso?

cada webcontainer tem seu proprio classloader
tipo
se varias aplicacoes precisar desse cara
vc pode carregar no loader do webcontainer

Classes com bibliotecas nativas têm esse problema de classloading; para evitar isso:

  • Não usar classes com bibliotecas nativas (é claro que isso é irreal)
  • Ou então deixar disponível para todas as aplicações, para que a classe seja carregada apenas uma vez. Como se faz isso depende de seu web ou application container. O jeito mais estúpido e simples (e mais arriscado) é pôr essa biblioteca no diretório jre/lib/ext do Java que está sendo usado.

Porque meu caro? Eu não ponho nada lá, nunca gostei, pq pra remover isso de lá é uma tortura depois.
Mas meu professor (na facul) insistia em mandar a gente meter as libs lá, pq dizia que esse era o diretório de extensão para outras bibliotecas.

É por isso que não gosto de bibliotecas nativas. O livro J2EE Antipatterns menciona o uso de bibliotecas nativas como um “anti-pattern” porque abre uma lata cheia de vermes na sua utilização.
Um dos problemas é que costumam deixar o web ou application container totalmente instável; outro deles é esse problema de classloading (onde a biblioteca não pode ser simplesmente “deployed” para uma única aplicação do application container; ela tem de ficar global para todas as aplicações.).
Se possível (se a redução de performance for aceitável), use um executável Java separado que acesse essa biblioteca e se comunique com o application/web container via sockets, por exemplo.
Assim, se o executável cair, só ele terá de ser reiniciado, não o web ou application container inteirinho.