我的前一篇文章 使用Java+SAP云平台+SAP Cloud Connector调用ABAP On-Premise系统里的函数介绍了在SAP云平台的Neo环境下如何通过SAP Cloud Connector消费ABAP On-Premise系统里的函数。在那篇文章demo程序的Java代码里,我们实际是通过JCO(Java Connector)来远程调用ABAP On-Premise系统里的函数。
今天我们换个环境,试试SAP云平台的CloudFoundry环境。同前一篇文章提到的在SAP云平台的Neo环境里消费ABAP On-Premise函数相比,在CloudFoundry环境里实现同样的需求,所需的步骤要复杂一些。
同Neo环境的部署相比,在CloudFoundry环境下最显著的架构区别就是多了个App Router。为什么CloudFoundry环境下需要这个东西?我的同事李贝宁在他的文章 SAP成都研究院李三郎:SCP Application Router简介 里做过详细阐述。
为了完成这个例子,我们需要部署两个应用到SAP云平台的CloudFoundry环境去,即App Router和Web应用本身。两个例子的完整代码在我的github上:
https://github.com/i042416/CloundFoundry_Connectivity
上图各模块间交互的简单阐述:
1. App Router作为用户访问Web应用的入口。
2. App Router将请求重定向到XSUAA实例,弹出登录界面。该实例负责完成登录认证,稍后会创建它。下图是登录界面在我手机上打开的效果。
3. 登录完成后,App Router将请求重定向到Web应用。
4. Web应用向XSUAA发起两个并行的请求,如图4a和4b所示,获取用于访问接下来第5,第6步的JSON Web Token。
5. Web应用访问Destination实例获取对应配置信息。
6. Web应用将请求发送给Connectivity实例。
7. Connectivity实例将请求通过Secure tunnel(安全隧道)转发给Cloud Connector。
8. Cloud Connector和On-Premise系统都位于Corporate Network里,直接调用其服务。
创建一个从Virtual Host到Internal Host的映射关系。Virtual Host的名称可以随便维护,我维护的是my-backend, 记住这个名称,以后会用到。Internal Host我维护的是提供OData服务的On-Premise系统的主机名和端口号。点击Check按钮,确保Cloud Connector能够成功连接On-Premise系统,状态为Reachable。
将On-Premise系统的下列4个ICF服务路径暴露出来:
/sap/bc/lrep
/sap/iwbep
/sap/opu/odata
/sap/public
至此Cloud Connector上的配置完成了。