Java Tomcat Web应用程序JNI

时间:2015-02-11 11:00:14

标签: java tomcat java-native-interface

我有部署到Tomcat的java Web应用程序。应用程序通过JNI调用低级C库。我第一次部署应用程序时一切正常,但是一旦我尝试重新部署 - 应用程序崩溃并出现以下错误:java.lang.UnsatisfiedLinkError: Native Library /opt/apache-tomcat/apache-tomcat-7.0.57/shared/lib/libGenderizer.so already loaded in another classloader

  1. 我已创建并将我的.so对象放在/opt/apache-tomcat/apache-tomcat-7.0.57/shared/lib下。

  2. 在catalina.sh(启动tomcat的文件)中,我添加了以下行,为tomcat设置库路径。 JAVA_OPTS="$JAVA_OPTS -Djava.library.path=/opt/apache-tomcat/current/shared/lib"

  3. 我正在使用maven mvn tomcat7:redeploy

  4. 重新部署我的应用程序

    你能帮我解决一下当前的问题吗?我正在做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;
                }
        }
    

1 个答案:

答案 0 :(得分:0)

已在SO上提出问题。请参阅Apache Tomcat Wiki以获得有用的答案。