在浏览器里使用 SAP GUI

事务码 SICF,service name 输入 WEBGUI,

点右键,选择 Test Service:



可以在浏览器里敲 SE38 进入 ABAP editor 了:

然么缺乏语法高亮显示:

如果想要浏览器里的语法高亮显示,参考我的 SAP community blog How ABAP syntax highlight is implemented in WebIDE launched via browser

首先从我的Github下载我写好的 hello world Servlet 到本地。安装 Maven,然后执行命令行 mvn clean install,确保 build 成功,在项目根目录的 target 文件夹内生成了 demo.war。

将 demo.war 放到本地 tomcat 的 webapps 文件夹下面。启动本地 tomcat,确保该 servlet 本地工作成功。

然后切换回项目根目录,执行 cf push 部署到您的 CloudFoundry 上。manifest.yml 我已经编辑好了,内容如下:


部署完毕后,在浏览器访问部署在 CloudFoundry 上的 Servlet:

Netweaver
在 Jerry 的微信公众号文章SAP Fiori应用的三种部署方式里提到 SAP Fiori 应用以 BSP 应用的方式部署在 ABAP Front-End Server 上。那么这些 BSP 应用在运行时为什么能够接受和发送 HTTP 请求呢?

主要是下图的 Internet Communication Manager(ICM)在起作用。

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:TMPDIR -Djava.ext.dirs=PWD/.java-buildpack/open_jdk_jre/lib/ext -Djava.security.properties=JAVA_OPTS -Daccess.logging.enabled=false -Dhttp.port=PORT" && CALCULATED_MEMORY=(MEMORY_LIMIT -loadedClasses=11021 -poolType=metaspace -stackThreads=250 -vmOptions="JAVA_OPTS") && echo JVM Memory Configuration: CALCULATED_MEMORY && JAVA_OPTS="CALCULATED_MEMORY" && MALLOC_ARENA_MAX=2 JAVA_OPTS=PWD/.java-buildpack/open_jdk_jre exec $PWD/.java-buildpack/tomcat/bin/catalina.sh run",
最后一行的 $PWD/.java-buildpack/tomcat/bin/catalina.sh run 是我们非常熟悉的 tomcat 启动脚本。
版权声明: 本文为 InfoQ 作者【Jerry Wang】的原创文章。
原文链接:【http://xie.infoq.cn/article/3684f48fc4068d25ffe150c50】。文章转载请联系作者。
评论