io.netty.handler.ssl.OpenSsl使用tomcat类而不是self

时间:2017-01-28 12:26:07

标签: java tomcat netty grpc

尝试在tomcat下使用netty-tcnative-boringssl-static。从JUnit测试代码时测试它是否正常工作,但在tomcat容器中则不然。 io.netty.handler.ssl.OpenSsl类中的此代码尝试从SSL类的类加载器加载本机库。

private static void loadTcNative() throws Exception {
    String os = normalizeOs(SystemPropertyUtil.get("os.name", ""));
    String arch = normalizeArch(SystemPropertyUtil.get("os.arch", ""));

    Set<String> libNames = new LinkedHashSet<String>(3);
    // First, try loading the platform-specific library. Platform-specific
    // libraries will be available if using a tcnative uber jar.
    libNames.add("netty-tcnative-" + os + '-' + arch);
    if (LINUX.equalsIgnoreCase(os)) {
        // Fedora SSL lib so naming (libssl.so.10 vs libssl.so.1.0.0)..
        libNames.add("netty-tcnative-" + os + '-' + arch + "-fedora");
    }
    // finally the default library.
    libNames.add("netty-tcnative");

    NativeLibraryLoader.loadFirstAvailable(SSL.class.getClassLoader(),
        libNames.toArray(new String[libNames.size()]));
}

当它单独工作时(例如来自JUnit测试),它在netty-tcnative-boringssl-static jar中找到SSL类,并从那些jar依赖项中的WEB-INF / native获取本机库。 但是当它在tomcat下运行时,它从tomcat库中获取SSL类并且无法找到本机库。

尝试使用tomcat 8和9

2 个答案:

答案 0 :(得分:1)

这将很快修复,并成为4.1.9.Final的一部分:

https://github.com/netty/netty/pull/5766

答案 1 :(得分:0)

似乎在这个帖子中找到了解决方案 https://github.com/netty/netty-tcnative/issues/136

我刚刚复制了netty-tcnative-boringssl-static.jar并在tomcat库目录中重新链接了tomcat-jni.jar