web server apache tomcat11-34-Ahead of Time compilation support

前言

整理这个官方翻译的系列,原因是网上大部分的 tomcat 版本比较旧,此版本为 v11 最新的版本。

开源项目

从零手写实现 tomcat minicat 别称【嗅虎】心有猛虎,轻嗅蔷薇。

系列文章

web server apache tomcat11-01-官方文档入门介绍

web server apache tomcat11-02-setup 启动

web server apache tomcat11-03-deploy 如何部署

web server apache tomcat11-04-manager 如何管理?

web server apache tomcat11-06-Host Manager App -- Text Interface

web server apache tomcat11-07-Realm Configuration

web server apache tomcat11-08-JNDI Resources

web server apache tomcat11-09-JNDI Datasource

web server apache tomcat11-10-Class Loader

web server apache tomcat11-11-Jasper 2 JSP Engine

web server apache tomcat11-12-SSL/TLS Configuration

web server apache tomcat11-13-SSI

web server apache tomcat11-14-CGI

web server apache tomcat11-15-proxy

web server apache tomcat11-16-mbean

web server apache tomcat11-17-default-servlet

web server apache tomcat11-18-clusting 集群

web server apache tomcat11-19-load balance 负载均衡

web server apache tomcat11-20-connectors 连接器

web server apache tomcat11-21-monitor and management 监控与管理

web server apache tomcat11-22-logging 日志

web server apache tomcat11-23-APR

web server apache tomcat11-24-Virtual Hosting and Tomcat

web server apache tomcat11-25-Advanced IO and Tomcat

web server apache tomcat11-26-maven jars

web server apache tomcat11-27-Security Considerations

web server apache tomcat11-28-Windows Service

web server apache tomcat11-29-Windows Authentication

web server apache tomcat11-30-The Tomcat JDBC Connection Pool

web server apache tomcat11-31-websocket

web server apache tomcat11-32-rewrite

web server apache tomcat11-33-CDI

web server apache tomcat11-34-Ahead of Time compilation support

使用 GraalVM/Mandrel Native Image 工具构建 Tomcat 本机二进制文件

设置

本机图像工具更容易与单个 JAR 一起使用,因此该过程将使用 Maven shade 插件 JAR 打包。

其思想是生成一个包含来自 Tomcat、Web 应用程序和所有附加依赖项的所有必要类的单个 JAR。

尽管 Tomcat 已经接收了兼容性修复以支持本机图像,但其他库可能不兼容,可能需要替换代码(GraalVM 文档有更多详细信息)。

  • 下载并安装 GraalVM 或 Mandrel。
  • 从 https://github.com/apache/tomcat/tree/main/modules/stuffed 下载 Tomcat Stuffed 模块。为了方便起见,可以设置一个环境变量:
export TOMCAT_STUFFED=/绝对路径到/stuffed

构建过程现在需要 Apache Ant 和 Maven。

打包和构建

在 $TOMCAT_STUFFED 文件夹内,目录结构与常规 Tomcat 相同。主要配置文件放置在 conf 文件夹中,如果使用默认的 server.xml,则 Web 应用程序放置在 webapps 文件夹中。

所有 Web 应用程序类都需要在 Maven shade 插件和编译器在 JSP 预编译步骤期间使用。任何存在于 /WEB-INF/lib 中的 JAR 都需要作为 Maven 依赖项提供。webapp-jspc.ant.xml 脚本将从 Web 应用程序的 /WEB-INF/classes 文件夹复制类到 Maven 用作编译目标的 target/classes 路径,但如果任何 JSP 源使用它们,则它们需要打包为 JAR。

首先是使用所有依赖项构建带阴影的 Tomcat JAR。假设 Web 应用程序包含一个 $WEBAPPNAME Web 应用程序,所有 Web 应用程序中的 JSP 都必须预先编译并打包:

cd $TOMCAT_STUFFED
mvn package
ant -Dwebapp.name=$WEBAPPNAME -f webapp-jspc.ant.xml

现在应将 Web 应用程序的依赖项添加到主要的 $TOMCAT_STUFFED/pom.xml,然后构建带阴影的 JAR:

mvn package

最好尽可能避免在 Ahead of Time 编译中使用反射,因此最好将主 server.xml 配置以及用于配置上下文的 context.xml 文件生成并编译为 Tomcat 嵌入式代码。

$JAVA_HOME/bin/java\-Dcatalina.base=. -Djava.util.logging.config.file=conf/logging.properties\-jar target/tomcat-stuffed-1.0.jar --catalina -generateCode src/main/java

然后停止 Tomcat 并使用以下命令包含生成的嵌入式代码:

mvn package

这里描述的进程的其余部分将假定此步骤已完成,并且在命令行中添加了 --catalina -useGeneratedCode 参数。如果不是这种情况,则应将其删除。

本机图像配置

本机图像不支持任何形式的动态类加载或反射,除非在描述符中显式定义。生成它们使用 GraalVM 的跟踪代理,并且在某些情况下需要进行额外的手动配置。

使用 GraalVM substrate VM 及其跟踪代理运行 Tomcat:

$JAVA_HOME/bin/java\-agentlib:native-image-agent=config-output-dir=$TOMCAT_STUFFED/target/\-Dorg.graalvm.nativeimage.imagecode=agent\-Dcatalina.base=. -Djava.util.logging.config.file=conf/logging.properties\-jar target/tomcat-stuffed-1.0.jar --catalina -useGeneratedCode

现在,Web 应用程序中通往动态类加载的所有路径(例如:Servlet 访问、WebSockets 等)都需要使用将练习 Web 应用程序的脚本访问。Servlet 可能在启动时加载,而无需实际访问。监听器也可以在启动时用于加载其他类。完成后,可以停止 Tomcat。

描述符现已在代理输出目录中生成。此时必须进行进一步的配置,以添加未跟踪的项目,包括:基本接口、资源包、基于 BeanInfo 的反射等。有关此过程的更多信息,请参阅 Graal 文档。

尽管必须将所有使用的类 AOT 编译到本机图像中,但是 Web 应用程序仍必须保持不变,并且继续在 WEB-INF 文件夹中包含所有所需的类和 JAR。尽管这些类实际上不会运行或加载,但需要访问它们。

构建本机图像

如果一切都做得正确,现在可以使用 native-image 工具构建本机图像。

$JAVA_HOME/bin/native-image --report-unsupported-elements-at-runtime\--enable-http --enable-https --enable-url-protocols=http,https,jar,jrt\--initialize-at-build-time=org.eclipse.jdt,org.apache.el.parser.SimpleNode,jakarta.servlet.jsp.JspFactory,org.apache.jasper.servlet.JasperInitializer,org.apache.jasper.runtime.JspFactoryImpl\-H:+UnlockExperimentalVMOptions\-H:+JNI -H:+ReportExceptionStackTraces\-H:ConfigurationFileDirectories=$TOMCAT_STUFFED/target/\-H:ReflectionConfigurationFiles=$TOMCAT_STUFFED/tomcat-reflection.json\-H:ResourceConfigurationFiles=$TOMCAT_STUFFED/tomcat-resource.json\-H:JNIConfigurationFiles=$TOMCAT_STUFFED/tomcat-jni.json\-jar $TOMCAT_STUFFED/target/tomcat-stuffed-1.0.jar

附加的 --static 参数启用了在生成的二进制文件中

的 glibc、zlib 和 libstd++ 的静态链接。 然后运行本机图像:

./tomcat-stuffed-1.0 -Dcatalina.base=. -Djava.util.logging.config.file=conf/logging.properties --catalina -useGeneratedCode

兼容性

Servlet、JSP、EL、WebSockets、Tomcat 容器、tomcat-native、HTTP/2 在本机图像中都支持开箱即用。

在撰写本文档时,由于 Graal 不支持日志管理器配置属性,因此不支持 JULI,除了一些静态初始化器问题外,常规的 java.util.logging 记录器和实现应该使用。

如果使用默认的 server.xml 文件,则必须从配置中删除一些 Server 监听器,因为它们与本机图像不兼容,例如 JMX 监听器(不支持 JMX)和泄漏预防监听器(使用不存在于 Graal 中的内部代码)。

更好的 Tomcat 功能缺失项目:

  • java.util.logging LogManager:未实现通过系统属性进行配置,因此必须使用标准 java.util.logging 而不是 JULI
  • 静态链接配置:tomcat-native 不能进行静态链接

参考资料

https://tomcat.apache.org/tomcat-11.0-doc/cdi.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/7926.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

文心一言 VS 讯飞星火 VS chatgpt (254)-- 算法导论18.2 7题

七、假设磁盘硬件允许我们任意选择磁盘页面的大小,但读取磁盘页面的时间是 abt 其中 a 和 b 为规定的常数,t 为确定磁盘页大小后的 B 树的最小度数。请描述如何选择 t 以(近似地)最小化 B 树的查找时间。对 a5ms 和 b10ms ,请给出 t 的一个最…

超越视觉极限:深度学习图像超分辨率算法清单【第四部分】

超越视觉极限:深度学习图像超分辨率算法清单【第四部分】 简介2019年 - SAN (Second-Order Attention Network)2019年 - IMDN (Information Multi-Distillation Network)2020年 - SwinIR (Swin Transformer for Image Restoration)2021年 - Real-ESRGAN (Real-World…

使用图网络和视频嵌入预测物理场

文章目录 一、说明二、为什么要预测?三、流体动力学模拟的可视化四、DeepMind神经网络建模五、图形编码六、图形处理器七、图形解码器八、具有不同弹簧常数的轨迹可视化九、预测的物理编码和推出轨迹 一、说明 这是一篇国外流体力学专家在可视化流体物理属性的设计…

大数据技术概述_2.大数据面临的5个方面的挑战

1. 大数据面临着5个主要问题 2012年冬季,来自IBM、微软、谷歌、HP、MIT、斯坦福、加州大学伯克利分校、UIUC等产业界和学术界的数据库领域专家通过在线的方式共同发布了一个关于大数据的白皮书。该白皮书首先指出大数据面临着5个主要问题,分别是异构性&a…

环境搭建 docker-compose

systemctl restart network docker-compose 单独执行一个文件 docker-compose -f version: 3services:nacos-standalone:image: nacos/nacos-server:v2.3.1 container_name: nacos-standaloneenvironment:- PREFER_HOST_MODEhostname- MODEstandalone- NACOS_AUTH_IDENTITY_…

阿里云CentOS 7.9 64位 Liunx 安装redis

具体的步骤如下: 添加 EPEL 仓库,因为 Redis 在标准的 CentOS 仓库中不可用: sudo yum install epel-release安装 Redis: sudo yum install redis启动 Redis 服务: sudo systemctl start redis如果你想让 Redis 在…

使用Vue3开发项目,搭建Vue cli3项目步骤

1.打开cmd ,输入 vue create neoai遇到这样的问题 则需要升级一下电脑上 Vue Cli版本哈 升级完成之后 再次输入命令,创建vue3项目 vue create neoai安装完成后,输入 npm run serve 就可以运行项目啦~ 页面运行效果

【LLM 论文】OpenAI 基于对比学习微调 LLM 得到嵌入模型

论文:Text and Code Embeddings by Contrastive Pre-Training ⭐⭐⭐⭐ OpenAI 一、论文速读 这篇论文基于大型生成式 LLM 通过对比学习来微调得到一个高质量的 text 和 code 的 embedding 模型。 训练数据的格式:是一堆 ( x i , y i ) (x_i, y_i) (x…

上传文件至linux服务器失败

目录 前言异常排查使用df -h命令查看磁盘使用情况使用du -h --max-depth1命令查找占用空间最大的文件夹 原因解决补充:删除文件后,磁盘空间无法得到释放 前言 使用XFTP工具上传文件至CentOS服务器失败 异常 排查 使用df -h命令查看磁盘使用情况 发现磁盘…

C语言:初学者和专家的分水岭

C语言:初学者和专家的分水岭 C语言作为一门古老而强大的编程语言,被认为是菜鸟和大神之间的分水岭。在编程领域,C语言不仅是初学者学习的重要起点,也是专家深入研究和高级编程的基础。本文将通过具体实例来说明C语言在不同级别开发…

【leetcode】链表排序题目总结

21. 合并两个有序链表 递归法 /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode() : val(0), next(nullptr) {}* ListNode(int x) : val(x), next(nullptr) {}* ListNode(int x, ListNode *next) : va…

怎么ai解答问题?这三个方法都可以

怎么ai解答问题?在数字化飞速发展的今天,人工智能(AI)技术已经渗透到我们生活的方方面面,尤其是在解答问题方面,AI展现出了令人瞩目的能力。那么,哪些软件可以利用AI技术解答问题呢?…

使用curl命令查看服务器端口开放情况

目录 1.ssh端口 22 2.mysql数据库端口 3306 3.web应用端口 (Jellyfin 8082) (wordpress 8088) (tomcat 8080) 4.不存在的端口 5.被防火墙阻挡的端口 1.ssh端口 22 curl -v 10.10.10.205:22 curl…

leetcode_47.全排列 II

47. 全排列 II 题目描述:给定一个可包含重复数字的序列 nums ,按任意顺序 返回所有不重复的全排列。 示例 1: 输入:nums [1,1,2] 输出: [[1,1,2],[1,2,1],[2,1,1]]示例 2: 输入:nums [1,2,3] …

了解你的构建:发布经理构建难点应对指南

在如今的计算机行业,发布经理的工作任重而道远。一方面他们必须紧跟日益攀升的行业标准,发布速度的极限不断突破,现在要求的速度在过去是远远无法想象的。另一方面,质量的门槛也在不断抬高。 我并非诟病软件更新换代过于迅速频繁…

揭秘数据可视化:五款利器助力决策

在当今这个数据驱动的时代,数据可视化已成为企业决策、数据分析不可或缺的一部分。通过直观、生动的图形、图像,数据可视化能够更快速、更准确地传达信息,帮助企业洞察数据背后的价值。本文将为您介绍几款优秀的数据可视化工具。 一、山海鲸…

【C++ 所有STL容器简介】

【C 所有STL容器简介】 1. vector2. list3. deque4. set / multiset5. map / multimap6. unordered_set / unordered_multiset7. unordered_map / unordered_multimap8. stack9. queue10. priority_queue C 标准模板库(STL)提供了一系列常用的容器&#…

Backblaze发布2024 Q1硬盘故障质量报告-1

作为一家在2021年在美国纳斯达克上市的云端备份公司,Backblaze一直保持着对外定期发布HDD和SSD的故障率稳定性质量报告,给大家提供了一份真实应用场景下的稳定性分析参考数据。 截至2024年第一季度末,Backblaze在其全球数据中心的云存储服务器…

Lua 协程模拟 Golang 的 go defer 编程模式

封装go函数用于创建并启动一个协程: ---go函数创建并启动一个协程 ---param _co_task function 函数原型 fun(_co:thread) function go(_co_task)local co coroutine.create(_co_task) -- 创建一个暂停的协程coroutine.resume(co, co) -- 调用coroutine.resume激活…

弹性云服务器是什么,为何如此受欢迎

云计算作为当下炙手可热的技术领域,已然成为现代企业不可或缺的核心能力。云服务器作为云计算的基石之一,在这个数字化时代发挥着至关重要的作用。而弹性云服务器,作为云服务器的一种演进形式,更是备受瞩目。 弹性云服务器&#…