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.