使用 JDBC 操作 SAP 云平台上的 HANA 数据库
本文假设您对 JDBC(Java Database Connectivity)有最基本的了解。您也可以将其同 ADBC(ABAP Database Connectivity)做对比,细节请参考我的博客ADBC and JDBC
这篇文章分为两部分,第一部分内容:
介绍如何在 SAP Cloud Platform(云平台)上创建一个 HANA 数据库实例
开发一个 Java 应用,部署到 SAP 云平台上。该 Java 应用使用 JDBC 操作同样处于 SAP 云平台上的 HANA 数据库。
第二部分内容:
开发一个 Java 应用,部署在位于 Corporate Network 的 On-Premise 系统里。该 Java 应用通过 Cloud Connector 访问位于 SAP 云平台上的 HANA 实例。我的前一篇公众号文章 使用 Java+SAP 云平台+SAP Cloud Connector 调用 ABAP On-Premise 系统里的函数 介绍了部署在 Internet Network 上的应用如何访问 Corporate Network 内的 On-Premise 系统上的服务,而本文将要介绍的场景则反其道而行之:部署在 On-Premise 上的 Java 应用访问 Internet Network 上的 SAP 云平台的 HANA 数据库。
本文介绍的 Java 应用的全部源代码在我的github上:
创建 SAP 云平台上的 HANA 数据库实例
登陆 SAP 云平台 Cockpit,创建一个新的 HANA 数据库实例:
设置数据库 ID 和 System user 的密码。这里我设置的数据库 ID 为 hana01, 后面会使用到。
创建成功后,数据库实例状态变为 STARTED,可以把其 Development Tools 的链接加到收藏夹里,后面也会用到。
至此这个位于 SAP 云平台上的 HANA 数据库实例已经可用了。下一步就是开发 Java 程序通过 JDBC 访问它。
使用 JDBC 访问 HANA 数据库
将我 github 上的 Java 应用 import 到 Eclipse,如下图所示:
应用主要分三个文件:
Person.java 定义了 Person 模型,只包含 id,firstName 和 lastName 三个成员,以及对应的 getter 和 setter 方法,即所谓的 POJO(Plain Old Java Object )。POJO 这个名字用来强调它是一个普通 Java 对象,没有遵从任何特定的 Java 约定或框架(如 EJB)。
PersonDAO.java 顾名思义: DAO - Data Access Object。通过 JDBC 连接 HANA 数据库实例,创建名为 T_PERSONS 的数据库表,已经往表里插入数据的逻辑都写在这个 DAO 类里。
PersistenceWithJDBCServlet.java 一个简单的通过 Servlet 实现的 UI,用于接受用户输入并调用 PersonDAO 将输入发送到 HANA 数据库实例。
JDBC 数据库 DataSource 实例的获取通过 JNDI 完成,该实例作为输入参数传入到 DAO 构造函数,所有接下来的 JDBC 操作均通过该 DataSource 进行。
这个 DefaultDB 的配置位于 web.xml:
将该应用部署到 SAP 云平台,应用名为 jerryjdbc。
此时仅仅通过上图 web.xml 的配置,Java 应用还无法知道在 SAP 云平台上到底要操作哪个数据库实例。为此我们需要将 jerryjdbc 这个应用同第一步创建的 HANA 数据库实例 hana01 绑定起来。该绑定通过下图的 Data Source bingdings 页面创建:
绑定成功后,即可通过 Servlet UI 提供的简易界面,向 HANA 数据库实例里插入一个 Person 记录 Jerry Wang。
在手机上访问该数据库实例,能看到刚刚插入的 Jerry Wang。
On-Premise 系统应用连接 Internet Network 上的数据库实例
前文介绍的 Java 应用和 HANA 数据库实例均位于 SAP 云平台。我的前一篇公众号文章 使用 Java+SAP 云平台+SAP Cloud Connector 调用 ABAP On-Premise 系统里的函数 介绍了部署在 Internet Network 上的应用如何访问 Corporate Network 上的服务,现在我们试着把访问方向翻转:现在我把 Java 应用部署在 Corporate Network 里,比如 SAP 成都研究院机房的一台服务器上,让该 Java 应用去连接 SAP 云平台上的 HANA 数据库实例。同样的,这里再次需要使用到 Cloud Connector。
配置 Cloud Connector 完成从 On-Premise 系统到 Cloud 的连接
在 SAP 云平台创建另一个 HANA 数据库实例,取名为 jerrydemo。然后登录 Cloud Connector,点击标签 On-Premise to Cloud,创建一个新的 Service Channels:
将新建的数据库实例 jerrydemo 分配到这个新建的 Channel 去:
创建成功如下图。注意生成的端口号 32215,后续会使用。
修改 On-Premise 系统上 Java server 的配置,让其指向 SAP 云平台的数据库实例 Java 应用的代码无需做任何调整,仅需更改 Server 配置。修改 Servers 文件夹下的文件 connection.properties, 明细如下,目的就是将该 Server 的数据库连接指向 Cloud Connector 上刚刚配置的 Service Channel,通过 Cloud Connector 作为桥梁连接到 SAP 云平台上的 HANA 数据库。
javax.persistence.jdbc.url: 指向的 localhost:32215 即 Cloud Connector 上配置的 Service Channel,该 Channel 我分配的 HANA 数据库实例的 ID 为 jerrydemo。currentschema=SYSTEM,意为接下来我通过 JDBC 创建的数据库表会分配到 SYSTEM schema 下。javax.persistenc.jdbc.user / password: 填入 jerrydemo 这个数据库实例的访问用户名和密码。
至此所有配置完成。启动 On-Premise 系统上的 localhost 服务器,插入两条数据:
打开 SAP 云平台上的 HANA Development Tool 连接,从 SYSTEM 这个 Schema 下能观察到通过刚才运行在 On-Premise 系统上的 Web 应用插入的两条记录,说明从 On-Premise 系统写入 SAP 云平台数据库的尝试成功。
版权声明: 本文为 InfoQ 作者【Jerry Wang】的原创文章。
原文链接:【http://xie.infoq.cn/article/218e19f553568d30298d44e1c】。文章转载请联系作者。
评论