Carregando uma biblioteca nativa compartilhada no Tomcat no Ubuntu

Como faço para carregar uma biblioteca compartilhada no Tomcat6, no Ubuntu?

Eu criei uma biblioteca “awragrids” com o nome “libawragrids.so” e coloquei em

/var/lib/tomcat6/shared 

Eu defini as seguintes variables ​​de ambiente no terminal do qual eu chamo de start tomcat:

 export PATH=$PATH:/var/lib/tomcat6/shared export JAVA_OPTS="-Djava.library.path=/var/lib/tomcat6/shared" export LD_LIBRARY_PATH=/var/lib/tomcat6/shared 

Eu então tento carregar a biblioteca com

 private static final String GRIDTOOL_LIBRARY_NAME = "awratools"; static { try { System.loadLibrary(GRIDTOOL_LIBRARY_NAME); } catch (java.lang.SecurityException e) { System.out.println("Not allowed to load dynamic library " + GRIDTOOL_LIBRARY_NAME + "."); throw e; } catch (java.lang.UnsatisfiedLinkError e) { System.out.println("Failed to load dynamic library " + GRIDTOOL_LIBRARY_NAME + "."); throw e; } } 

e acabe no segundo bloco catch. Todas as leituras que fiz sugerem que qualquer uma das duas primeiras exportações deveria resolver o problema. No windows, eu coloquei “awragrids.dll” em uma pasta no caminho e funciona bem.

Eu passei muito tempo com isso e realmente preciso dormir um pouco … por favor me ajude!

Certifique-se de que o script de boot do Tomcat – catalina.sh em /var/lib/tomcat6/bin – esteja realmente usando o JAVA_OPTS do ambiente. No script no sistema que estou vendo agora, alguém coloca uma definição completa sem colocar a configuração do ambiente.

Acho que isso pode ter sido um erro da minha parte. Quando eu originalmente compilei a biblioteca, ela tinha um nome diferente (“libawargrids.so”), então eu a renomei com:

 mv libawragrids.so libawratools.so 

Enquanto o equivalente parece funcionar no Windows, talvez não funcione no Linux. Quando compilei novamente usando o nome “awratools” (produzindo “libawratools.so), o problema desapareceu.

Enquanto o problema já está resolvido, se alguém puder confirmar que a renomeação é provavelmente o que a causou (e talvez explique por quê), isso seria apreciado.

Desculpe por desperdiçar o tempo das pessoas, mas obrigado pela ajuda!

PS Eu coloquei agora as linhas:

 export JAVA_OPTS="-Djava.library.path=/var/lib/tomcat7/shared" export LD_LIBRARY_PATH=/var/lib/tomcat7/shared 

na parte superior de /etc/init.d/tomcat6, não importa qual usuário inicia o serviço. Por favor, deixe-me saber se isso é, por algum motivo, ruim.

Intereting Posts