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的架构:

  1. ICM本身维护了一个工作线程池。有一个专属的控制线程,负责接收进来的TCP/IP请求,然后从线程池中唤醒一个工作线程来响应该请求。
  2. 每个工作线程包含一个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:$PWD/.java-buildpack/open_jdk_jre/bin/jvmkill-1.13.0_RELEASE=printHeapHistogram=1 -Djava.io.tmpdir=$TMPDIR -Djava.ext.dirs=$PWD/.java-buildpack/container_security_provider:$PWD/.java-buildpack/open_jdk_jre/lib/ext -Djava.security.properties=$PWD/.java-buildpack/java_security/java.security $JAVA_OPTS -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=$MEMORY_LIMIT -loadedClasses=11021 -poolType=metaspace -stackThreads=250 -vmOptions="$JAVA_OPTS") && echo JVM Memory Configuration: $CALCULATED_MEMORY && JAVA_OPTS="$JAVA_OPTS $CALCULATED_MEMORY" && MALLOC_ARENA_MAX=2 JAVA_OPTS=$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的原创技术文章,请关注公众号"汪子熙"或者扫描下面二维码:

最新文章

  1. cell单选
  2. linux ping加执行时间
  3. JavaScript模板引擎artTemplate.js——template.compile()方法
  4. Mysql数据库中存储中文为乱码
  5. java httpclient cookie
  6. BZOJ3588 : fx
  7. 生产环境下的mysql主从复制
  8. c# winfrom应用程序关闭任务管理器中的进程
  9. java 创建线程
  10. 自问自答-hadoop自带哪些案例(0.20.2)
  11. CF GYM 100703A Tea-drinking
  12. ios - 再细读KVO
  13. Hibernate 环境搭建
  14. python之单例设计模式
  15. 微信小程序支付步骤
  16. 如何把函数都用promise方式实现?
  17. Spring中ApplicationContext加载机制
  18. MySQL5.5编译安装以及Debug
  19. 在 CentOS7 安装 ELK
  20. 用openssl为EAP-TLS生成证书(CA证书,服务器证书,用户证书)

热门文章

  1. 修改mac host文件绑定域名
  2. hdu1394(枚举/树状数组/线段树单点更新&区间求和)
  3. 洛谷 P1434 [SHOI2002]滑雪 解题报告
  4. 在linux服务器下日志提取的python脚本(实现输入开始时间和结束时间打包该时间段内的文件)
  5. [题解](折半搜索)luogu_P4799_BZOJ_4800世界冰球锦标赛
  6. WEB安全字体(Web Safe Fonts)-网页设计用什么字体兼容性好?
  7. Python面向对象之组合
  8. [Java]hashCode的作用
  9. Codeforces Round #563 (Div. 2) A. Ehab Fails to Be Thanos
  10. uoj207共价大爷游长沙