java - io.netty.handler.ssl.OpenSsl 使用 tomcat 类而不是自身

标签 java tomcat netty grpc

尝试在tomcat下使用netty-tcnative-boringssl-static。当从 JUnit 测试中加载代码时,它可以正常工作,但在 tomcat 容器中却不是这样。 io.netty.handler.ssl.OpenSsl 类中的这段代码试图从 SSL 类的类加载器加载 native 库。

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 中获取 native 库。 但是当它在 tomcat 下工作时,它从 tomcat 库中获取 SSL 类并且找不到 native 库。

试过 tomcat 8 和 9

最佳答案

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

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

关于java - io.netty.handler.ssl.OpenSsl 使用 tomcat 类而不是自身,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41909764/

相关文章:

java - 在Java中发送HTTP POST请求

java - 从预先存在的应用程序创建 Web 应用程序

java - 授予单一类权限

netty - 在同一台开发机器上运行多个 Netty 客户端和一个服务器

java - 如何在netty中存储带有用户名和ChannelHandlerContext的用户列表

java - Netty AttributeKey - 无法推断 AttributeKey<> 的类型参数

java - Neo4j 对实体集合的保存操作

java - 获取范围内的随机整数(x,y]?

java - 为什么我尝试在 TomCat 上部署项目时收到此错误消息(来自 NetBeans)? (上下文启动失败)

Java:将字符串从一个文件复制到另一个文件而不会丢失 'newline format'