Bootstrap

往ABAP gateway system上和CloudFoundry 部署HTML5应用

ABAP Gateway system

在我的公众号文章里有详细介绍:

  • 用WebIDE部署

  • 用Eclipse Team provider部署

  • 执行report /UI5/UI5_UPLOAD_INTO_MIME

Cloud Foundry

在manifest.yml文件里指定buildpack,

然后到manifest.yml文件所在的根目录下,执行命令行:

cf push -f ./approuter-manifest.ymlcf push首先会将整个应用的文件上传到Cloud Foundry上:

因为我的manifest.yml里未指定Nodejs buildpack的版本号,因此使用服务器上默认版本1.6.21:

下载nodejs buildpack后进行build:

build成功:

在build日志能能看到详细步骤。

部署应用的详细过程在

使用SAP云平台的CloudFoundry部署应用:

在cockpit遇到错误信息:instance: a0abe2b5-7623-4cf1-4c65-0c79, index: 0, exit_description: APP/PROC/WEB: Exited with status 254, reason: CRASHED

使用命令查看部署日志:cf logs connectvity-demo-approuter --recent

2018-05-30T11:33:30.95+0800 [CELL/0] OUT Starting health monitoring of container2018-05-30T11:33:31.68+0800 [APP/PROC/WEB/0] ERR npm ERR! Linux 4.4.0-119-generic2018-05-30T11:33:31.68+0800 [APP/PROC/WEB/0] ERR npm ERR! argv "/home/vcap/deps/0/node/bin/node" "/home/vcap/deps/0/bin/npm" "start"2018-05-30T11:33:31.68+0800 [APP/PROC/WEB/0] ERR npm ERR! node v6.13.12018-05-30T11:33:31.68+0800 [APP/PROC/WEB/0] ERR npm ERR! npm v3.10.102018-05-30T11:33:31.68+0800 [APP/PROC/WEB/0] ERR npm ERR! path /home/vcap/app/package.json2018-05-30T11:33:31.68+0800 [APP/PROC/WEB/0] ERR npm ERR! code ENOENT2018-05-30T11:33:31.68+0800 [APP/PROC/WEB/0] ERR npm ERR! errno -22018-05-30T11:33:31.68+0800 [APP/PROC/WEB/0] ERR npm ERR! syscall open2018-05-30T11:33:31.68+0800 [APP/PROC/WEB/0] ERR npm ERR! enoent ENOENT: no such file or directory, open '/home/vcap/app/package.json'2018-05-30T11:33:31.68+0800 [APP/PROC/WEB/0] ERR npm ERR! enoent ENOENT: no such file or directory, open '/home/vcap/app/package.json'2018-05-30T11:33:31.68+0800 [APP/PROC/WEB/0] ERR npm ERR! enoent This is most likely not a problem with npm itself2018-05-30T11:33:31.68+0800 [APP/PROC/WEB/0] ERR npm ERR! enoent and is related to npm not being able to find a file.2018-05-30T11:33:31.68+0800 [APP/PROC/WEB/0] ERR npm ERR! enoent2018-05-30T11:33:31.69+0800 [APP/PROC/WEB/0] ERR npm ERR! Please include the following file with any support request:发现原因是build时找不到package.json. 但我确认我部署的zip文件里存在package.json

解决方案

使用CLI进行部署:

cf push -f ./approuter-manifest.yml问题解决:

Netweaver

要记录日志需要有一个checkpoint group,可以自行创建也可以使用标准的。这里我重用标准的group:DEMO_CHECKPOINT_GROUP。

tcode SAAB,点Display <->Activate进入编辑模式,将Logpoints设置为"Log",日期设为Today,意为当天生效。

Netweaver的日志记录大多是基于用户级别的,这一点比较方便。给想打开日志记录的用户创建一个打开日志开关的配置:

新建一个report名称为ZCONTEXT, 下面代码的含义是把当前report名称(包含在环境变量sy-cprog)和当前report的运行环境(online运行还是offline运行)写入该checkpoint group。因为可能有其他人也会使用该group,所以用SUBKEY区分不同的用户。

LOG-POINT ID demo_checkpoint_group
SUBKEY sy-uname
FIELDS sy-batch sy-cprog.

执行完report后返回SAAB即可查看到记录的日志。

双击能看到记录的明细。

CloudFoundry

总的guideline在上有。

这里简述要点。

SAP云平台的CloudFoundry环境里的日志记录推荐使用slf4j(Simple Log Facade for Java)。即Java代码里使用slf4j提供的接口进行日志记录,而具体的日志记录实现可以通过配置文件来指定。

我做了一个例子,全部源代码在我的上。我的例子使用log4j2作为日志记录的实现。

(1) 在Java项目的pom.xml里定义slf4j和log4j2的版本号。


  1.8
  1.8
  2.1.5
  2.8.2
  1.7.24

在pom.xml文件的dependency区域维护相关的dependency:


  org.slf4j
  slf4j-api
  ${slf4j.version}



  com.sap.hcp.cf.logging 
  cf-java-logging-support-log4j2
  ${cf-logging-version}



  org.apache.logging.log4j
  log4j-slf4j-impl
  ${log4j2.version}



  org.apache.logging.log4j
  log4j-core
  ${log4j2.version}



  com.sap.hcp.cf.logging
  cf-java-logging-support-servlet
  ${cf-logging-version}

(2) 在CLASSPATH下新建log4j2.xml, 使用如下源代码:



















(3) 在SAP云平台Cockpit里创建一个新的log instance:

取名为jerry-log:

(4) 代码里的使用:

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

private static final Logger LOGGER = LoggerFactory.getLogger(ConnectivityServlet.class);

然后使用LOGGER.info 记录日志。

(5) 如何查询记录的日志:点击Logs标签页->Open Kibanna Dashboard, 能看到上图"Diablo Connecting to backend system"对应的日志:

在log明细里能看到之前在SAP云平台Cockpit里创建的Log service实例。