[英]Java Tomcat web application JNI
I have java web application which is deployed to Tomcat. 我有部署到Tomcat的Java Web应用程序。 Application calls low level
C
library via JNI. 应用程序通过JNI调用底层
C
库。 Everything works fine when I deploy my application at first time, but as soon as I trying to redeploy - application crashes with following error: java.lang.UnsatisfiedLinkError: Native Library /opt/apache-tomcat/apache-tomcat-7.0.57/shared/lib/libGenderizer.so already loaded in another classloader
第一次部署应用程序时,一切正常,但是尝试重新部署时,应用程序崩溃,并出现以下错误:
java.lang.UnsatisfiedLinkError: Native Library /opt/apache-tomcat/apache-tomcat-7.0.57/shared/lib/libGenderizer.so already loaded in another classloader
I've created and put my .so object under /opt/apache-tomcat/apache-tomcat-7.0.57/shared/lib. 我已经创建了.so对象并将其放在/opt/apache-tomcat/apache-tomcat-7.0.57/shared/lib下。
In catalina.sh (file which starts tomcat) I've added following line which sets library path for tomcat. 在catalina.sh(启动tomcat的文件)中,我添加了以下行,该行设置了tomcat的库路径。
JAVA_OPTS="$JAVA_OPTS -Djava.library.path=/opt/apache-tomcat/current/shared/lib"
I am redeploying my application using maven mvn tomcat7:redeploy
我正在使用maven
mvn tomcat7:redeploy
部署我的应用程序
Could you please help me to resolve current issue? 您能帮我解决当前问题吗? I am doing System.gc() but unfortunately it doesn't help.
我正在做System.gc(),但是不幸的是它没有帮助。
public class GenderService {
private static Logger logger = Logger.getLogger(GenderService.class);
static {
try {
System.gc();
System.loadLibrary("Genderizer");
}
catch(UnsatisfiedLinkError e){
logger.error("Native code library failed to load.\n", e);
}
}
private native String genderize(String name);
public Gender identifyGender(Customer customer){
Gender gender = determineGender(customer);
return gender;
}
}
Already asked on SO . 已经问过SO了 。 See Apache Tomcat Wiki for a helpful answer.
请参阅Apache Tomcat Wiki,以获得有用的答案。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.