Netweaver和CloudFoundry是如何运行Web应用的?
Netweaver
在Jerry的微信公众号文章SAP Fiori应用的三种部署方式里提到SAP Fiori应用以BSP应用的方式部署在ABAP Front-End Server上。那么这些BSP应用在运行时为什么能够接受和发送HTTP请求呢?
主要是下图的Internet Communication Manager(ICM)在起作用。
SAP help:
The Internet Communication Manager ensures that communication between the SAP System (SAP NetWeaver Application Server) and the outside world via HTTP, HTTPS and SMTP protocols works properly.
The ICM is a component of the SAP NetWeaver Application Server. It is implemented as a separate process, which is started and monitored by the ABAP dispatcher.
即ICM作为沟通的桥梁,确保Netweaver应用服务器和外界能够通过HTTP,HTTPS等协议交互。ICM是Netweaver应用服务器的一个组件,作为一个单独的工作进程,由ABAP dispatcher启动并监控。
- ICM本身维护了一个工作线程池。有一个专属的控制线程,负责接收进来的TCP/IP请求,然后从线程池中唤醒一个工作线程来响应该请求。
- 每个工作线程包含一个I/O处理器,负责网络输入输出。工作线程通过各种各样的plugin处理HTTP,SMTP等协议。
CloudFoundry
假设我本地开发了一个Java Web应用,里面包含一个Servlet,部署到CloudFoundry后,该应用如何运行起来的?
细心观察cf push的日志,不难自己找出答案。
因为我的manifest.yml里定义的buildpack为java_buildpack:
这对应了cf push日志里高亮的这一行:
下载Open JDK JRE和Tomcat instance。
为什么会自动下载tomcat?
打开java_buildpac的github仓库:
https://github.com/cloudfoundry/java-buildpack
上面提到了原因:
The Tomcat Container allows servlet 2 and 3 web applications to be run. These applications are run as the root web application in a Tomcat container.
一旦buildpack检测到war包中存在WEB-INF,且不存在Java Main(实现了main方法的Java类),则决定使用Tomcat容器。
实际上从cf push的日志里也能观察到tomcat容器启动参数:
“JAVA_OPTS=”-agentpath: P W D / . j a v a − b u i l d p a c k / o p e n j d k j r e / b i n / j v m k i l l − 1.13. 0 R E L E A S E = p r i n t H e a p H i s t o g r a m = 1 − D j a v a . i o . t m p d i r = PWD/.java-buildpack/open_jdk_jre/bin/jvmkill-1.13.0_RELEASE=printHeapHistogram=1 -Djava.io.tmpdir= PWD/.java−buildpack/openjdkjre/bin/jvmkill−1.13.0RELEASE=printHeapHistogram=1−Djava.io.tmpdir=TMPDIR -Djava.ext.dirs= P W D / . j a v a − b u i l d p a c k / c o n t a i n e r s e c u r i t y p r o v i d e r : PWD/.java-buildpack/container_security_provider: PWD/.java−buildpack/containersecurityprovider:PWD/.java-buildpack/open_jdk_jre/lib/ext -Djava.security.properties=$PWD/.java-buildpack/java_security/java.security J A V A O P T S − D a c c e s s . l o g g i n g . e n a b l e d = f a l s e − D h t t p . p o r t = JAVA_OPTS -Daccess.logging.enabled=false -Dhttp.port= JAVAOPTS−Daccess.logging.enabled=false−Dhttp.port=PORT" && CALCULATED_MEMORY= ( ( (PWD/.java-buildpack/open_jdk_jre/bin/java-buildpack-memory-calculator-3.13.0_RELEASE -totMemory=KaTeX parse error: Can't use function '\"' in math mode at position 84: …250 -vmOptions=\̲"̲JAVA_OPTS") && echo JVM Memory Configuration: KaTeX parse error: Expected 'EOF', got '&' at position 19: …CULATED_MEMORY &̲& JAVA_OPTS=\"JAVA_OPTS KaTeX parse error: Can't use function '\"' in math mode at position 18: …LCULATED_MEMORY\̲"̲ && MALLOC_AREN…JAVA_OPTS JAVA_HOME=$PWD/.java-buildpack/open_jdk_jre exec $PWD/.java-buildpack/tomcat/bin/catalina.sh run",
最后一行的$PWD/.java-buildpack/tomcat/bin/catalina.sh run是我们非常熟悉的tomcat启动脚本。
要获取更多Jerry的原创技术文章,请关注公众号"汪子熙"或者扫描下面二维码:
相关文章
- C# 系统应用之TreeView控件 (一).显示树状磁盘文件目录及加载图标
- Dash与Plotly开发Web端交互式可视化应用
- Electron,可以将web网页程序包装成桌面应用
- java基础知识回顾之javaIO类--File类应用:过滤器接口FilenameFilter和FileFilter
- IDEA中利用MAVEN制作和打包普通可执行应用(非SprintBoot的WEB应用)
- Serverless 时代下微服务应用全托管解决方案
- 企业实践|分布式系统可观测性之应用业务指标监控
- 在C#代码中应用Log4Net(四)在Winform和Web中捕获全局异常
- 用JavaMelody来监控我们的web应用
- 有状态的 web 应用
- Rest API的简单应用
- 【斗医】【4】Web应用开发20天
- 【斗医】【20】Web应用开发20天
- SAP UI5 Web Component React应用如何在Component之间跳转
- 关于 Web 应用的 Above-the-Fold Loading 加载机制
- web 应用开发最佳实践之一:避免大型、复杂的布局和布局抖动
- Spring实战5-基于Spring构建Web应用
- 在Angular应用的child Component里同时使用@Input和@Output
- CV之IR:计算机视觉之图像检索(Image Retrieval)方向的简介、使用方法、案例应用之详细攻略
- 对一个即将上线的网站,如何做一个较完整的Web应用/网站测试?
- Python - Opencv应用实例之头发自动分割、计数、特征统计智能分析系统